一:Java基础
String 类能被继承吗,为什么
不能, String被final关键词修饰。
String, Stringbuffer, StringBuilder 的区别
String不可变,StringBuilder和StringBuffer都可变,前者线程不完全,后者线程完全。
讲讲JAVA8 的 ConcurrentHashMap
线程完全的HashMap
抽象类和接⼝的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么
Java只支持单继承,一个接口可以继承多个接口,一个类可以实现多个接口。
继承和聚合的区别在哪
描述动态代理理的⼏种实现方式,分别说出相应的优缺点
写出三种单例模式实现
error 和 exception 的区别, CheckedException, RuntimeException 的区别
有没有可能 2 个不相等的对象有相同的 hashcode
可能,Hash碰撞
Java 中的 HashSet 内部是如何工作的
HashSet存储。
什么是序列化,怎么序列列化,为什么序列化,反序列化会遇到什么问题,如何解决
序列化将一个对象映射为一个Byte数组,反序列就是将Byte数组还原为对象。
枚举类可以继承其他类吗?为什么
了解强引用,软引用,虚引用和幽灵引用吗?谈谈它们的⼀个使⽤场景
二:JVM知识
Jvm 包括那⼏大部分
什么情况下会发生栈内存溢出
JVM 的内存结构, Eden 和 Survivor ⽐例
JVM 内存为什么要分成新生代,⽼年代,持久代。新⽣代中为什么要分为 Eden 和Survivor
JVM 中一次完整的 GC 流程是怎样的,对象如何晋升到⽼年代
Jvm 什么情况下会回收⽅法区
你知道哪几种垃圾收集器,各⾃的优缺点,包括原理,流程,优缺点
详细介绍下 CMS 垃圾回收器
三: spring 和 mybatis
讲讲 Spring 事务的传播属性。
Spring 如何管理理事务的。
bean是单例的吗?为什么
mybatis #{} 和 ${} 区别,怎么实现分页
四:OS
⽤一行命令输出正在运行的 java 进程。
ps -ef | grep java
进程和线程的区别
多线程
多线程的⼏种实现方式,什么是线程安全
继承Thread类、实现Runnable接口,
volatile 的原理,作用,能代替锁么
画一个线程的⽣生命周期状态图
sleep 和 wait 的区别
所以sleep()和wait()方法的最大区别是:
sleep()睡眠时,保持对象锁,仍然占有该锁;其他线程无法访问
而wait()睡眠时,释放对象锁。其他线程可以访问
⽤过线程池吗,如果用过,请说明原理,并说说 newCache 和 newFixed 有什么区别,构造函数的各个参数的含义是什么,⽐如 coreSize, maxsize 等
CAS 机制是什么,如何解决 ABA 问题
网络:
TCP 三次握手和四次挥手的流程,为什什么断开连接要 4 次
TCP/IP 如何保证可靠性
TCP 可靠传输
1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
2、数据校验
3、数据合理分片和排序:
Http 和 https 有什么区别
http是明文传输,https是http加SSL加密传输
mysql:
Mysql MyIsam 和 InnoDB 引擎索引结构有什么区别
数据库隔离级别有哪些,各⾃的含义是什什么, MYSQL 默认的隔离级别是是什么
什么是幻读
MYSQL 有哪些存储引擎,各自优缺点
谈谈 explain 结果中⽐较关键的指标,以及指标的含义
redis:
Redis 的数据结构都有哪些,各⾃都适合什么样的场景
redis主从复制怎么完成的
redis有哪些优化的方式
算法题:
leetcode上的 3sum问题
二面主要聊项目
三面聊项目和软实力
一面(45min)
-
最近在做什么项目
-
网页跳转怎么实现,结合具体的场景
转发和重定向
-
301 和 302 什么区别?结合具体场景
301 redirect: 301 代表永久性转移(Permanently Moved)
302 redirect: 302 代表暂时性转移(Temporarily Moved )
-
504 什么意思?
504错误代表网关超时 (Gateway timeout),是指服务器作为网关或代理,但是没有及时从上游服务器收到请求。
-
怎么在前端实现网页跳转,用什么函数?
-
任务处理时间 100ms,服务器 4 核 8G 如何设计线程池达到 1000qps?任务是 90ms 在 IO,10ms 在计算的情况下怎么弄?全在计算呢?
-
10G 数据,1G 内存,如何快速找到重复出现的数据?
Hash
-
10G 数据,1G 内存,如何快速找到重复出现次数最多的数据?
MapReduce
-
算法题:判断两个对象是否有公共祖先
自我介绍
有过ACM经验吗,平时喜欢做题吗
手撕代码:最长不重复子串
Leetcode 双指针原题
手撕代码:矩阵中最长递减路径(这里和LeetCode的不一样,面试官规定了各元素不相同)
详细讲一下实习期间的任务
实习用了Flutter,底层实现了解吗
指针和引用有什么区别
指针是表示内存地址,引用是别名,C++ 中引用不能修改。
堆和栈有什么区别
Linux熟悉吗,如何查看特定进程的信息
ps -ef | greap xxx
给定日志记录(用户名,操作数),使用shell找出操作最多的用户
问我内存模型
垃圾回收机制
synchronized和lock区别
虚拟机内存分那些部分
问我osi七层模型
问我ip在第几层
网络层
Http请求
问项目
测开,奉上面经,求上岸,求offer
百度一面
1.自我介绍,项目介绍
2.java垃圾回收机制
3.hashmap底层介绍,怎么扩容
重新开辟一块空间,分配数组,重新计算元素放的位置,重新放元素
4.一致性hash
一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,在移除或者添加一个服务器时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对K/N 个关键字重新映射,其中K是关键字的数量,N是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。一致性哈希算法实现了为服务器和存储信息均实时变化的情况下较为合理地分配网络缓存。
5.DNS原理,解析过程
6.syn泛洪攻击原理,怎么预防
7.http介绍
8.进程和线程的区别。
9.进程间如何通信。
10.写一个小程序,多人抢红包
多线程访问共享资源
11.写一个程序,给一个字符串,去掉嵌套括号。
12.程序出kuo?没听说过的一个词语~哭唧唧
13.为什么选择测开
百度二面
1.介绍自己
2.数据库索引
3.mysql和postgresql的区别
4.cms垃圾回收器原理
5.内存泄露的情况,怎么查找内存泄露的对象
6.get和post区别
7.linux命令,递归查找文件中出现字符abc的文件
8.用Python 一行写出0-100中偶数
9.java多线程
10.go协程和java线程的区别
11.写一个程序,判断二叉树是否为镜像,并编写测试用例。
12.数据库1000万条数据,查找前100大的数据
13.数据库查找姓名重复的,且大于2的id
14.安卓四大组件
15.activity 生命周期
16.创建线程的几种方法
继承Thread类,实现Runnable接口
17.java中的容器
18.自己的缺点和优点
19.项目中如何和小组成员协调不一致的观点
百度三面
就是hr面,聊人生理想,规划。问了offer情况
智力题:
一分钟写出两种方案,怎么用一个3升的杯子和5升的杯子倒出4升的水。
Hr说十一之前会出结果~希望可以成功上岸
一面 约30min
算法:
1. 进制转换10进制转2进制
除k取余,二进制用字符串表示。
2. 10进制数转成A~Z表示,A表示1,Z表示26,,27表示为AA,输入为正整数
A的个数为n/26, 其他的字母是n%26
3. 有一个由0、1、2组成的数组,把0放在1前面,1放在2前面
荷兰国旗问题,三路快排
基础知识:
1. 网络7层模型,各层协议,HTTP和HTTPS区别
2. 忘了。。。
数学题:
1. 1000瓶水里一瓶是毒药,用老鼠实验,最少需要几只老鼠可以知道哪瓶是毒药
2. 有三扇门,其中一扇后面有奖品,你现在选定一扇门,然后会告诉你另外两扇门中的一扇门是空的,这时你选不选择换你所选定的门(概率题)
二面 约80min
聊了聊嵌入式开发的项目
算法:
1. 二维坐标系里给定4个点的标,判断是不是构成矩形(这个我给面试官详细解释并证明了我的三行代码的正确性)
这种计算几何的题目一般很少问
2. 给定一个query的字符串,一个test的字符串,要匹配test的字符串和query的最大公共子串(我直接当作经典的最长公共子串做了,基本没问题,可能有别的方法可以优化)
基础:
1. 线程和进程,死锁,解决方法
2. memcpy和strcpy的区别
3. 如何最精确的计算一个数的70%的值(就是0.7x如何精度高)
4. 程序内存里的堆和栈
5. LRU的实现(这个也是在面试官引导下一步步优化)
双向链表加HashMap
6. 类的理解,访问属性和继承
7. TCP和UDP
8. B树、B+树
9. 还有不少想不起来了,我真的健忘。。。
三面 约120min
项目、实习都先聊了聊
算法:
1. 求10万以内的所有素数,尽可能快(包括用到排除偶数和结尾为0和5 的数之类工程化的方法,当时我还提了另一个角度的,又讨论了一下)
基础:
1. 银行家算法具体
2. 纯虚函数、与虚函数对比,应用情景
3. 放弃了。。。我想不起来了
数学:
100个球,两人轮流取,每次取1~5个,取最后球的人获胜,先取的人取几个能赢
其他(至少1个小时):
1. 一个非技术的应用题(写计划书?策划书?一个组织方案?搞不清算哪种):上级(面试官)交给你一个任务,让你把某个小区的所有住户的窗户擦干净,你来计划好整个方案和细节。其中包括每个步骤该干啥,具体怎么干等等,反正这题至少说了半个小时,真的面试官会扣非常多的细节,小到雇人来擦玻璃,如果人家没有擦好,怎么样判定需要惩罚,脏了几块玻璃算做得不好,那多少钱来作为奖金,多少比例作为惩罚等等。。。(反正我也不知道为啥问这种问题)
2. 然后是学习经历、社团活动、项目中的困难和记忆点、三观、兴趣爱好、有没有想放弃却坚持下来的,有没有最后还是没坚持下去的,有没有记忆深刻的学习经历,什么是做过最大胆的事等等。。。真的无所不问
3. 最后是介绍自己部门和团队和反问
一面面试官加了微信,最后他帮我查了一下,说是过了,三面官给的反馈已经很直接了,所以今天真的超开心,本来抱着反正也过笔试了,试试不吃亏的态度来了,大概是前天被阿里鸽了之后攒的运气,一路很顺,也终于有进大厂的机会了!!激动??