招聘要求:
面试大概不到两小时……
乐观锁,悲观锁,行锁,表锁
ACID是衡量事务的四个特性:
按照索引列值的唯一性,索引可分为唯一索引和非唯一索引
MVCC 分布式版本控制
加锁
死锁产生的4个必要条件?
产生死锁的必要条件:
互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。
最近最久未使用(LRU)算法
先进先出置换算法(FIFO)
聊项目……聊未来,谈人生理想……
总结:数据存储的为题为主,关系型数据库和内存数据库redis
一面:
io为什么会阻塞。
nio的底层实现原理
NIO的特点:
应用程序的线程需要不断的进行 I/O 系统调用,轮询数据是否已经准备好,如果没有准备好,继续轮询,直到完成系统调用为止。
NIO的优点:每次发起的 IO 系统调用,在内核的等待数据过程中可以立即返回。用户线程不会阻塞,实时性较好。
NIO的缺点:需要不断的重复发起IO系统调用,这种不断的轮询,将会不断地询问内核,这将占用大量的 CPU 时间,系统资源利用率较低。
总之,NIO模型在高并发场景下,也是不可用的。一般 Web 服务器不使用这种 IO 模型。一般很少直接使用这种模型,而是在其他IO模型中使用非阻塞IO这一特性。java的实际开发中,也不会涉及这种IO模型。
再次说明,Java NIO(New IO) 不是IO模型中的NIO模型,而是另外的一种模型,叫做IO多路复用模型( IO multiplexing )。
nio 为什么是非阻塞的,如果selector有数据了,如何通知channel
用select/epoll的优势在于,它可以同时处理成千上万个连接(connection)。与一条线程维护一个连接相比,I/O多路复用技术的最大优势是:系统不必创建线程,也不必维护这些线程,从而大大减小了系统的开销。
Java的NIO(new IO)技术,使用的就是IO多路复用模型。在linux系统上,使用的是epoll系统调用。
多路复用IO的缺点:
本质上,select/epoll系统调用,属于同步IO,也是阻塞IO。都需要在读写事件就绪后,自己负责进行读写,也就是说这个读写过程是阻塞的。
如何充分的解除线程的阻塞呢?那就是异步IO模型。
tcp三次握手
为什么tcp是三次而不是两次。
死锁的概念(用一个场景来模拟死锁)
死锁如何避免的
如果发生了死锁怎么办
ArrayList 跟LinkedList
arrayList如何动态扩展
hashmap内部原理
hashmap是不是线程安全的
如何保证hashmap线程安全。
concurrentHashmap的内部结构
static关键字
static关键字修饰的方法和属性什么时候加载
gc发生的时间
gc root节点的种类
两道算法题
将数组中的重复元素删除
[1,1,1,2,3,4,5,5,5,6,6]
[1,2,3,4,5,6]
双指针
求两个数的最小公倍数
二面
讲项目
tcp四次挥手
手撸单例模式
数据库的四大隔离,解决的问题
redis中zset 结构
第二,第三范式
算法:给一个0,1构成的二维数组,上下左右相连的1,构成一个岛,求岛面积
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]];
1. 数组跟链表的区别
2. 并发跟并行的区别
3. osi七层
4. 判断一个字符串是不是回文字符串
5. 求两个字符串的最长公共子串
6. 测试一个手机端的登录界面
7. 问问题环节
写在前面:
研究生前期主要从事机器视觉方向。18年下半年由于项目需求开始学习Java,包括Java基础,JVM,并发,Spring,Springboot,Mybatis,redis,MQ等等,同时也间歇性地刷题。秋招投递了大约20家公司,其中面试开始时间为19年9月中旬,话不多说,面经奉上!
小米:
一面:
1、String,Stringbuffer,StringBuilder的区别,为什么被final修饰就不能被继承。
2、讲一下volitale关键字,说一下为什么不保证原子性。
3、抽象类和接口的区别。
4、用没有用过多线程?讲一下多线程的实现方式,call和run的区别。
5、讲一下线程池的执行步骤,以及参数设置。
6、将数组里面非0的元素移到前面,0元素移到后面(不改变相对位置)。
冒泡排序思路
二面:
1、 用两个栈实现一个队列。
2、 对你之前写的代码进行一些修改,写成泛型。
3、 对1中的方法进行线程安全的改造。
4、 Synchronized用法,锁。
5、 数据结构,树的遍历,排序算法复杂度分析。
6、 TCP,UDP,Http,Http请求头,Https。
7、 项目细节,思考。
有赞:
一面:
1、 项目。
2、 HashMap(头插,扩容为什么是2,成环,转红黑树节点数目为什么是8)。
3、 开放性,HashMap不用同步/并发容器,实现线程安全。
4、 JVM运行时内存,高并发环境如何避免OOM。
5、 类加载机制,不同加载器之间的关系。
6、 GC,不同收集器区别。
7、 线程池,如果服务下线如何处理线程池。
8、 谈谈对Spring里面IOC和AOP的理解,Spring如何解决循环依赖。
9、 平时对python的使用,和Java对比区别。
10、学习习惯。
顺丰科技:
一面:
1、 项目中的算法实现。
2、 网络7层模型有哪些,wifi属于哪一层。
属于数据链路层和物理层
3、 随机数产生算法。
4、 索引原理,索引失效,索引优化。
5、 死锁
6、 不借助中间变量交换2个数。
新浪微博:
一面:
1、 20个有序数组,找出其中最大的10个数。
2、 URL请求过程,DNS端口,三次握手,四次挥手,拥塞控制。
3、 HashMap源码。
4、 新建一个对象的流程。(从类加载开始讲)
5、 Java内存模型和线程安全,讲一讲volatile。
6、 Java线程池。
7、 JVM内存和GC。
8、 项目算法实现,如何自定义数据库连接池,如何保证连接存活,意义是什么。
二面:
1、 项目细节,实现原理。
2、 JVM与GC,如果大访问量,哪部分可能会OOM,如何处理。
3、 索引原理,索引失效。
HR:
浙江大华:
一面:
有同学发过了,我就不发了
二面:
1、 项目介绍。
2、 Redis基本数据类型,持久化方式。
3、 RabbitMQ如何保证消息可靠。
4、 SpringMVC执行流程。
5、 Spring中IOC的实现。
6、 Spring事务以及传播机制。
7、 Mybatis中“#”和“$”的区别。
HR面:
贝贝:
一面:
1、 项目介绍,项目中的算法设计,解决问题。
2、 JVM内存和GC。
3、 Java内存模型。
4、 Synchronized和reentrantLock的区别。
5、 Sleep和wait的区别。
6、 MQ的幂等性。
二面:
基本就怼项目,你项目为什么不做成集群版本?主要是基于兴趣吗?
HR面:
中兴:
一面:
1、 项目介绍。
2、 Java面向对象介绍。
3、 List和Set区别。
4、 Get和Post区别。
5、 HTTPs请求建立过程。
6、 DDOS攻击。
7、 数据加密。
HR面:
百世:
一面:
1、 项目介绍。
2、 http建立连接的过程,如何释放,发生异常了怎么办。
3、 TCP连接建立,释放。
4、 事务,隔离级别,隔离级别的实现,读写锁配合。
5、 索引原理,建索引需要注意什么。
6、 java synchronized和reentrantLock的区别,底层实现,AQS,Monitor,CAS。
7、 Java内存模型,线程安全。
8、 JVM和GC。
9、 1、)翻转二叉树的左右子树;2)、二叉树的层次遍历。
二面:
1、 写一个单例模式,锁住的那个类用的什么类加载器。
2、 面向对象设计银行取号系统。
3、 霍夫变换,条形码检测。
4、 平时看什么书,问了问微积分。
HR:
头条:
一面:
1、 具体场景,索引分析,索引失效。
2、 threadLocal原理。
3、 进程和线程的区别。
4、 做题:leetcode
华为:
一面:
1、 做题:选择填空题,编程题(数组里面的每一个元素,找到该元素后面第一个比他大的数)
2、 项目介绍。
3、 JVM内存和GC。
4、 类加载机制。
5、 Java多线程。
二面:
1、 做题:翻译,编程题(不大于n的数中1的个数)。
2、 HTTPs。
3、 SSL。
4、 TCP,UDP。
5、 Java性能调优。
6、 Linux基本操作。
HR面:
美团:
一面:
1、 final关键字。
2、 重写equals,hashcode。
3、 线程池。
4、 JVM内存与GC。
5、 MQ选型对比。
6、 Redis基本数据类型以及持久化方式,Redis底层数据结构,Redis淘汰策略。
7、 Mysql事务,不可重复读和幻读的区别,可重复读底层实现。
8、 Redis,数据库同步,Mysql优化。
9、 编程:实现2个线程循环打印。
二面:
1、 项目细节,难点。
2、 Synchronized和reentrantLock实现区别。
3、 Spring中IOC的实现。
4、 Bean的生命周期。
5、 场景题:如何采集10个商铺的商品信息。
6、 常用数据结构以及应用。
7、 常用算法以及应用(贪心,dp,分治,回溯,分支限界)。
三面:
1、 项目实现。
2、 MQ对比,项目思考,反思中间件。
3、 实现字符串的字典序排序(编码风格规范)。
4、 面向对象改造。
5、 将长URL变为固定长度的短URL。
6、 微服务理解,如何划分。
7、 讲一讲常用数据结构。
HR面:
简历挂:
vivo
1、 笔试挂:
网易,滴滴,携程,360,wps,海康(后4个挂的莫名其妙)
2、 一面挂:
有赞,顺丰科技,字节跳动,招银网络
3、 面完了不给挂:
小米,中兴
最终拿到offer的有:美团,华为,微博,大华,百世,贝贝
给师弟师妹们的建议就是尽早投递,广撒网(虽然我都没做到)!祝大家offer多多!