在2020年1月15日左右找人内推简历,第二天收到HR面试邀请,约了2月上旬,面试岗位:Java后台研发实习(广告业务组)。
一面技术面(约60分钟)
- 简单自我介绍
- 关于项目介绍,期间提到并发多线程,所以面试官引出一个问题
- 写一个变量i++的代码,要求保证线程同步。
——类似于读写锁,楼主用Synchronized 给 object方法写了Lock() 和 UnLock()锁实现。
追问:锁的机制是如何实现的:object锁还是方法锁?
——回答的object锁,感觉面试官反馈不太对,也没有追问了。 - Http协议,详细介绍下浏览器输入www.baidu.com之后的过程
——DNS,GET, POST方法都涉及到了。
追问TCP/IP 三次握手过程,为什么需要三次?
—— 介绍TCP/IP过程,然后第三次保证信息同步,服务器需要知道客户端收到response的反馈
追问如果第三次握手丢包怎么办?
——服务器重新发送response一定次数,直到client回复,若超过次数则断开连接 - 为什么说TCP/IP是可靠传输?
——拥塞控制,超时重传,滑动窗口 - 介绍下Java GC机制
——计数器法,可达性算法
追问可达性算法
——GC root从跟节点树引用遍历,如果没有被引用的对象则被回收,
追问如何判断引用?
——举例创建一个object会添加一次引用
追问jvm如何知道什么时候回收?
——举例类似读写操作,可以调用System.gc()方法来触发; - 数据库相关,SQL语句熟不熟?出了一个双表查询算平均分的题
——楼主表示不太熟,马马虎虎写了一个select语句,面试官也没有追问了 - 数据库事务隔离机制
—— 未提交读,提交读,可重复读,序列化, 分别介绍了可能存在的问题依次是脏读,不可重复度,幻读
追问MySQL用的哪种?
——可重复读
追问如何实现的?
——不太清楚,某种读写锁?
追问MySQL索引怎么实现?
——B+ Tree
追问能否实现以下?
—— 实现B+树。。。放弃,说可以解释下原理,面试官直接说不用解释了。
算法题: ABC全排列,dfs+backtracking秒了,少许错误
二面技术面(约40分钟)
- 自我介绍
- 楼主之前搞安全的, 追问你知道哪些安全攻击,介绍下xss?
——表示某种注入攻击,具体不太熟,然后说 syn, dos, ddos可以
追问介绍下dos
——拒绝服务攻击,伪造报文向服务器发送大量请求,造成服务器过载,无法提供正常服务,ddos加分布式 - 介绍 https
——在http基础上添加了ssl ,对称秘钥加密体制,公钥加密,私钥解密,然后又介绍了下非对称加密 - 介绍下进程死锁
——4个条件:互斥,占有等待,非抢占,循环等待。分别解释了下 - 解释下Java创建一个object,如何创建的,内存怎么分配的?
——举例创建一个String,系统会给这个Object分配一个内存地址,然后加引用指针,然后存入value值。
追问equals 和 hashcode方法
——equals判断value是否相等,hashcode通过hash function计算,这里答的不太好… - 介绍信Java如何实现线程同步
—— synchronize, lock, volatile, atomic
追问解释下volatile
——从Java 内存开始解释,然后解释了可见性,原子性,有序性
追问乐观锁与悲观锁
——乐观锁可以挂起做其他事情,悲观锁一直等待
算法题: trap rain,留了20分钟,楼主15分钟不到bug free秒了,用two pointers.
三面BOSS面(约30分)
- 简单自我介绍
- 最近有看什么书啊?
- 为什么实习,之前的实习收获了什么,想从实习中学什么?
- 结束下浏览器是如何知道哪些客户的,与服务器怎么交互?
——cookie 和session解释了一通 - linux熟悉哪些指令?
- 关于业务有什么想问的?
算法题: permution 1234 -> 1243,先要求解释一下算法,大概用了8分钟,然后要求7分钟内写完代码。楼主只完成了一种case。。。
总体下来感觉还是比较难的,楼主面试美西时间22:00,直到凌晨0:20左右结束,三面考算法题的时候已经非常疲惫,体验一般。也是吃了一堑,后续面试都约到下午了。
字节是我准备回国实习后面试的第一家公司,没什么面试经验,准备也不太充分,整体表现也一般。