应届坎坷求职路,双非院校的学弟,前不久拿到了腾讯网易美团等大厂Offer,恭喜!
Posted Java_宇宁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应届坎坷求职路,双非院校的学弟,前不久拿到了腾讯网易美团等大厂Offer,恭喜!相关的知识,希望对你有一定的参考价值。
前言
2020年过去了,对很多人来说,这一年经历了太多太多,可能是十年来记忆里比较浓墨重彩的一笔。过去的一年里,“熬”算是这个阶段我的关键字,确实太多时候就要放弃,好在自己“熬”过去了,在新的2021年里,也有个一个非常好的开端,我收获了心仪的offer。
目前面试过的大厂有阿里、腾讯、字节、美团、网易、shopee;也投过中小厂去练练手,但面试的问题有些水,后面便不投了,有那时间还不如多刷几道算法题;虽然面试的大厂不多,但是还是比较幸运的拿到了腾讯csig、美团支付平台、网易杭州研究院的三个大厂offer
一月我开始刷算法题,这里有整理一份【算法小抄】;整理知识点;和回顾项目;但是我忘记了最重要的网络协议操作系统最重要的知识部分;这也会后面的面试失败留下伏笔
我目前的简历技能模块上重点强调自己对redis、多线程、jvm、mysql这些知识点有比较熟练的掌握(后面淘宝一面后我被挖底层挖怕了,简历改成了熟悉掌握)
项目模块:准备的项目是两个其实业务层面上比较简单都是比较平常的CRUD,但我的项目亮点是第一个项目是不用ssm框架,自己基于原生的web 去做了开发,大概模拟了三大框架思想进行了工具的封装帮助自己进行开发;以及第二个项目我将redis用在自己的项目,网上学习redis实现消息队列,自己封装了简易RPC框架;这些都算是项目的小亮点;
2月末开始进行的春招,先阿里面试开启春招,整个春招持续2月多,不断的复盘和补漏,这个春招是我技术增长最快的一阵子
下面我展示下经历大厂的面试题,并对一些面试题说下我个人觉得比较好的答题思路
面试思路:面试官抛出一道面试题,需要回答三部分:1.它是什么作用是什么 2.原理是什么 3.在实战中是怎样的(技术选型的考量),如果可以最好举一反三,这样子的涉及跟哪方面的知识有共通之处
阿里淘宝一面
- 自我介绍
- 开源项目贡献过代码么?(回答没有,很尴尬)
- 之前在部门做什么?简单介绍一下业务吧,内部有哪些系统,作何交互过程说一下
- Dubbo踩过哪些坑?分别是怎么解决的?(我答了异常处理时业务异常捕获的问题,自定义了一个异常拦截器)
- 说下你对线程安全的理解
- 事务有哪些特性?
- 怎么理解原子性?
- 讲一下乐观锁和悲观锁的区别,这两种锁在Java和MySQL分别是怎么实现的?
- HashMap为什么不是线程安全的?怎么让HashMap变得线程安全?两者的区别是什么?
- jdk1.8对ConcurrentHashMap做了哪些优化?为什么这样优化?
- redis主从机制了解么?怎么实现的?
- 有过GC调优的经历么?(有点虚,答得不是很好)
- List,Map,Set三个接口存取元素时,各有什么特点?
- TreeMap和TreeSet在排序时如何比较元素?Collection工具类中的sort()方法如何比较元素?
- Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行 它们有什么区别?
- 线程的sleep()方法和yield()方法有什么区别?
- 当一个线程进入一个对象的synchronized方法A之后 其他线程是否可进入此对象的synchronized方法b?
- 请说出与线程同步以及线程调度相关的方法
- synchroized关键字的用法?
- 启动一个线程是调用run()还是start()方法?
- 有什么想问的么?
阿里中台一面 (挂在算法)
- 自我介绍,聊项目, 这边挺常规的,从项目入手。
- 解析Excel为什么用POI ? POI存在的问题?
- 还知道哪些解析Excel的工具吗?
- 你们项目中用过MQ,平时都用MQ来做什么?
- 你处理过MQ得幂等问题,当时是怎么做的?
- MQ的可靠性怎么保证?
- redis你们都用来做什么?
- redis的持久化机制?
- 怎么样保证redis的高可用?
- HashMap和ConcurrentHashMap的区别?
- ConcurrentHashMap不同版本的差异?
- 用过多线程吗?
- 多线程的几种实现方式。
- 做过微服务开发吗?
- 说一说对重构的看法
- 有什么问题要问我的吗?
整个的面试流程我完成度比较高,聊的挺开心,但是面试过后让我写笔试题,这个我写的太差,部门没再让我进入二面流程;
腾讯TEG一面
①针对微服务进行提问:
- 微服务架构
- 框架的实现
- 服务治理
- 分布式一致性
②日志监控系统:
- 考察架构、ELK相关知识,重点要描述ELK的一些架构原理,如倒排索引的原理等;
③消息队列:
- Kafka中消息可以被多个消费者消费吗?
- 选举机制
- HW机制
④数据库和Redis相关:
- 索引的原理
- 几种事务的区别
- 数据结构
- 延时队列如何实现
- 分布式锁原理
⑤其他开放问题:
- 开放问题,不过多描述,如项目中遇到的问题,如何解决的?描述生产过程中运行的问题,并描述排查问题。
腾讯TEG二面
- 说说为什么要选择腾讯?
- 你之前做过的项目说一下
- 针对项目的难点进行提问,如何解决的,在这个问题中有什么收获?怎么避免再次?
- 讲一下TCP有哪些机制可以完成可靠传输?
- TCP为什么有三次握手?
- 讲一下HTTPS通信的建立机制
- 虚拟内存的作用,知道吗?
- 讲一下程序编译的原理
- 讲一下MySQL 语句执行的过程
- MySQL 的缓存会失效吗?
- MySQL 前缀索引
- 假设建立联合索引(a, b, c)如果对字段 a 和 c 查询,会用到这个索引吗?
- MySQL 主从同步机制,如果同步失败会怎么样?
- 讲一下布隆过滤器的实现原理
- 网络安全相关 XSS ?
- 有了解哪些加密算法?
- 秒杀系统后台如何设计?
- 最近在学习什么?学了哪些?有哪些收获?
- Kafka 存储机制是怎样的?
- Kafka 发送消息是如何保证可靠性的?
- 你有没有什么想问的?
腾讯CSIG一面
- 项目中处理了哪些格式的数据类型?
- 数据传输过程用的什么加密?
- 对称加密和非对称加密的区别?
- http和https的区别?
- 为什么https使用混合加密的方式?
- 说一说JVM调优的思路及你是怎么样调优的。
- JVM常见的算法。
- 抽象类和接口的区别和应用场景? ( 挺新鲜的,第- -)次碰到 )
- 平时有没有用到什么设计模式?
- 看过什么源码没有?
- 什么是SpringAOP?
- AOP实现的原理。
- sql优化的思路。
- 索弓|实现原理。
- 有时候索引失效,为什么?
腾讯CSIG二面
- 自我介绍,然后开始聊项目。
- 数据采集的时候有没有对数据进行校验?
- 有没有做加密处理?
- 对称加密和非对称加密的区别?
- 如何保证数据不丢失呢? ( 对账)
- 你们项目中redis用来干什么了?
- redis常用的数据类型?
- redis持久化机制?
- 分布式锁的实现?
- 场景题:一个SQL的TOP N问题
- JVM参数调优及JVM内存结构。
- 常见的垃圾回收算法。
- dubbo整个调用过程。
- SpringMVC、Spring和SpringBoot的区别 ?
- 线程池实现原理。
- sql优化的思路。
- 索弓|实现原理。
- 聚簇索引和非聚簇索引的区别。
字节抖音一面:
①TCP相关的基础知识
- 问题一:请详细描述三次握手和四次挥手的过程(要求熟悉三次握手和四次挥手的机制,并画出状态图)
- 问题二:四次挥手中TIME_WAIT状态存在的目的是什么?(要求画出四次挥手的状态图,接着会引申问题,问到为什么四次挥手是四次不是二次?)
- 问题三:TCP是通过什么机制保障可靠性的?(这个问题简单,但要回答得比较全面。需要从四个方面作答,包括ACK确认机制、超时重传、滑动窗口以及流量控制,甚至详细讲出流量控制的机制。)
②语言相关的基础知识
- 字节跳动以Go为主,所以尽管是后端岗位,也会问你对Go了解多少,对其他语言掌握多少?
- Java语法基础
③网络编程相关基础
- 问题一:网络IO模型有哪些?(5种网络I/O模型,阻塞、非阻塞、I/O多路复用、信号驱动IO、异步I/O。从数据从I/O设备到内核态,内核态到进程用户态分别描述这5种的区别。)
- 问题二:I/O多路复用中select/poll/epoll的区别?(从select的机制,以及select的三个缺点,讲解epoll机制,以及epoll是如何解决select的三个缺点的。还会讲到epoll中水平触发和边沿触发的区别。)
④HTTP相关基础
- 问题一:客户端访问url到服务器,整个过程会经历哪些?(从七层网络模型,HTTP->TCP->IP->链路整个过程讲解报文的产生以及传递的过程)
- 问题二:描述HTTPS和HTTP的区别(从端口的区别,以及HTTPS是在SSL的基础上以及加密等方面说明)
- 问题三:HTTP协议的请求报文和响应报文格式(要非常清楚请求报文和响应报文的组成部分,要求在写具体案例。)
- 问题四:HTTP的状态码有哪些?(从2xx,3xx,4xx,5xx分别举例出常见的code,面试官会问301和302的区别,以及500/503/504分别在哪些场景出现。)
⑤缓存和数据库的基础知识
- 问题一:描述一下redis有哪些数据结构?(基础的数据结构有5种,高级数据结构4种。面试官还问了BloomFilter的原理以及Zset的实现原理,主要讲解跳跃表。)
- 问题二:MySQL场景题目(面试官提供场景,要求写出查询SQL,考察联合语句,如何分页以及复杂语句的优化。)
⑥裸写算法
- 树的非递归先序遍历。
字节企业服务部门一面:
- 常见的异常、错误
- StackOverFlow和OutoFmemery产生原因
- abc联合索引 a=?b= ?能击中联合索引么
- 抽象类与接口区别
- 项目中比较亮眼的点、list消费端你是阻塞读获取么
- 异常与Error区别
- 如果一条语句执行特别慢是为什么
- 你会用什么去查询数据库 的状态
- NoClassDefFoundError 和ClassNotFoundException 效果和原因
int [] a1
,int []b
,b[i] = (a[0]*a[1]*a[i]**a[n-1]) /a[i]
求b 数组 (n) 空间O(n)
shopee一面
- 盛水最多容器
- 进程与线程区别、
- 页缺失
- 页替换算法
- 块表和多级页表的机制和作用
- TCP 如何实现可靠性
- 进程之间通信
- 虚拟内存
- 发送端发送接收端没有recevice会怎样;
- TCP重试机制
- 如果一堆数据大于内存,如何拿到前面的数据
- hashmap 与 线程安全的concurrentHashmap
- msyql索引类型
- 为什么选择B+树
- mysql事务、mysql幻读是什么如何解决、事务原理、
shopee 二面
- 根据项目问了一些细节问题
- 说一下HashMap的数据结构
- 红黑树和AVL树有什么区别?
- 如何才能得到一个线程安全的HashMap?
- 讲一下JVM常用垃圾回收器
- redis分布式锁
- 再描述一下你之前的项目吧
- 你觉得这个项目的亮点在哪里呢?
- 你设计的数据库遵循的范式?
- 你有没有什么问题?
美团一面
- redis集群,为什么是16384?哨兵模式,选举过程,会有脑裂问题么?raft算法,优缺点
- JVM类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat类加载机制
- Tomcat热部署,热加载了解吗?怎么做到的?
- cms收集器过程,g1收集器原理,怎么实现可预测停顿的?region的大小,结构
- 内存溢出,内存泄漏遇到过吗?什么场景产生的?怎么解决的?
- 锁升级过程,轻量锁可以变成偏向锁么?偏向锁可以变成无锁么?自旋锁,对象头结构,锁状态变化过程
- kafka重平衡,重启服务怎么保证kafka不发生重平衡?有什么方案?
- 怎么理解分布式和微服务?为什么要拆分服务?会产生什么问题?怎么解决这些问题?
- 你们用的什么消息中间件?kafka,为什么用kafka?高吞吐量,怎么保证高吞吐量的?设计模型,零拷贝
- 算法1:给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
- 算法2:判断一个树是否是平衡二叉树
美团二面
- Innodb的结构了解么?磁盘页和缓存区是怎么配合,以及查找的?缓冲区和磁盘数据不一致怎么办?mysql突然宕机了会出现数据丢失么?
- redis字符串实现,sds和c区别,空间预分配
- redis有序集合怎么实现的?跳表是什么?往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树?红黑树有什么特点?左旋右旋操作
- io模型了解么?多路复用,selete,poll,epoll,epoll的结构,怎么注册事件,et和lt模式
- 怎么理解高可用?如何保证高可用?有什么弊端,熔断机制,怎么实现?
- 对于高并发怎么看,怎么算高并发,你们项目有吗?如果有会产生什么问题,怎么解决
- 项目介绍
- 算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点
网易一面
- ArrayList和LinkedList区别
- 进程和线程区别
- 你刚刚跟我说进程的切换比线程的切换更耗费资源你说说上下文切换是什么吧
- 进程在内存中的结构
- 说下一个URL输入后整个过程
- 网络协议的OSI 分层结构说下吧
- .HTTPS与HTTP区别
- HTTPS原理
- TCP三次握手是什么,为什么三次握手
- TCP四次挥手是什么,
- TCP四次挥手中客户端最后发送消息后等2MESL是因为什么
- TCP的拥塞控制与流量控制区别
- JVM内存结构都有些什么
- 堆内存结构?一定线程共享么?
- 垃圾回收器CMS和G1区别在哪
- 你觉得垃圾回收期现在不断的发展是处理优化那些问题
网易二面
- hashmap的put和get流程
- hashmap 与concurrenthashmap区别
- 说下其他并发包
- 说下Semphore cycricbarrier
- 垃圾回收算法都有什么
- redis都有什么数据结构
- redis 缓存 与数据库同步你是怎么做的
- redis缓存可能出现的问题,以及你是怎么解决的
- redis String 数据结构底层是什么
- 你项目中封装了orm框架模拟mybatis,你说说你的连接池怎么处理的,比mybatis有什么区别
- 你的消息队列是怎么实现的
- 你的 消息队列如何保证可靠性:不重复消费、消息不丢失
- redis中布隆过滤器原理
多场面试总结
大学如何准备:
春招时期我的压力很大,在3月末还没有收到大厂offer 时候我是很慌的,如果在没有任何大厂实习经历情况下去竞争极大的秋招是有很大的风险。加上我自己科班基础和算法非常弱(leetcode也就刷了100不到应付不了笔试) 所以春招是我进大厂最好的机会。
我是大二下的疫情期间才真正意义上开始做准备的,大一也就学了java基础;
期间其实走了很多弯路。太执着于java底层基础,对算法和科班基础没花时间,太在意想找什么实习;
如今我个人不建议学生大一大二急着找实习,先把基础打牢固。数据结构与算法、网络协议、操作系统是校招最重要的部分。
大三尝试找找日常,然后在这个难度不怎么高竞争不大的春招争取拿到大厂暑期实习offer;我现在所处的腾讯部门是转正率挺高的可以说是有机会避开秋招的神仙打架
当然鸡蛋不能放在一个篮子里,秋招肯定是要准备的
对于java的学生我认为需要掌握的知识如下:
1.算法:剑指offer(面试);动态规划、递归分治回溯(笔试);
2.操作系统:进程线程;内存管理;文件系统;
3.网络协议:HTTP协议(HTTPS、HTTP迭代版本);TCP协议;IP相关协议(ARP、ICMP、路由控制);网络分层模型
4.java基础(面向对象思想,包装类等等的语言基础尤其是hashmap集合)
5.jvm:jvm内存结构;垃圾回收(垃圾发现回收算法、调优思路、垃圾回收器尤其是G1和CMS);类加载(类加载器,类和对象加载流程,双亲委派和如何破坏)三大部分;最好学下性能监控工具和调优思路;
6.MySql: innodb引擎;索引;日志log;锁;事务;
7.多线程(synchronize 、volatile、ReecentLock 原理区别;线程调度方法;JMM内存模型;JUC并法包和原理AQS;线程池)
8.基础框架 :spring 、spirngmvc、mybatis
9.redis(会了的话特别加分)
10.设计模式
11.分布式(这块根据公司来如果是阿里会喜欢问问dubbo、zk这种框架;腾讯字节可能就是nginx 或者CAP原理啥的)
已整理成册《Java核心知识点合集》
推荐看的书
1.深入理解java虚拟机(看完主要章节处理大厂面试是够了)
2.Msyql技术内幕(初步掌握MySQL大部分基础知识)
3.高性能MySQL(我非常喜欢这本书,除了基础知识比较深入外还有很大偏实战的东西,比如查询优化,高可用等等)
4.java并发编程艺术(之前看过一本并发编程实战但是太过理论了,编程艺术基本涵盖了我目前所有的相关面试题);
5.疯狂java讲义(我的java入门书)
6.图解HTTP 和图解TCP (我学习网络协议,不看教科书太过理论了难以掌握;这两本图文结合非常不错)
7.Redis 深度历险:核心原理与应用实践(redis的第一本书能对redis大部分知识有广度和深度的理解)
已整理成文档《阅读书籍》
面试如何准备
1.建议可以多看看面试题,一是在时间不够掌握一部分知识情况下,能较短时间处理一些面试(可以说成是八股文)二是帮助你在全面学习知道什么部分知识是重点需要投入更多成本
2.简历上最好有项目或者实习经验吧,写好 个人信息、个人技能、项目实习经历三部分;
3.准备两版自我介绍一个给技术面试官一个给HR,技术面试官的自我介绍我主要说下自己的项目实习经验和自己的擅长的技术,面试官还是很愿意跟你聊你会的技术点的。
4.最好能提前根据公司部门技术做相应的准备,比如阿里基本java技术栈为主,字节腾讯面试可能部门不是做java的,如果你是学java的,会问你java基础但问的没那么深;
如何面试
1.一个问题面试官问了,先想想面试官想问什么,有的可能考深度有的可能考知识之间的串联;回答一个知识点 分三部分:是什么、这个技术原理怎样、基于这样的原理适用于什么样的业务或者技术的优缺点(举一反三);比如谈到LRU我就喜欢聊到msyql的内存淘汰和redis的内存淘汰的区别给面试官展示我不仅仅有一点知识的深度也有比较完善的知识网络
2.最后的你问面试官环节:可以问部门的信息部门涉及的技术栈、实习生入职之后学什么做什么、然后就是自己觉得没打好的问题(比如一些开放式的问题)问问面试官的想法;
最后关于送给未来有大厂梦的学弟学妹们几句话:校招是我们进大厂付出成本相对社招最少的时候一定要好好珍惜;好好沉淀自己不要被身边同学玩了些很炫酷的技术做项目或者进了实习所着急,自己的基础才是最最重要的;最后一定要好好的坚持做好每一次复盘,多问问进入大厂的学长学姐;
最后
程序员真的是需要将终生学习贯彻到底的职业,一旦停止学习,离被淘汰,也就不远了。
金九银十跳槽季,这是一个千年不变的话题,每到这个时候,很多人都会临阵磨枪,相信不快也光。于是,大家都会搜集一些面试题。
但其实,对于一些不跳槽的同学来说,真的也很有必要去研读一些大厂的面试题。了解一下最近的主流技术,看看大厂在意的点是什么,再在自己的工作中去完善,去总结。
于是,我花费了十几天的时间,整理出了最新的 Java 面试必考 300 题(附带详细答案)。
最后祝愿即将跳槽和已经在求职的大家都能找到一份好的工作。
以上是关于应届坎坷求职路,双非院校的学弟,前不久拿到了腾讯网易美团等大厂Offer,恭喜!的主要内容,如果未能解决你的问题,请参考以下文章
坎坷求职路:选择大于努力!一名六次反复经历失败的应届生,最后一刻跻身阿里如愿以偿