23年校招Java开发同花顺、滴滴等面经
前言
已经工作近半年时间了,最近突然翻到这份面经,于是想整理一下一些面试的经验,大中小公司都有
青书一面 50min
数据库、java基础。
Cas机制。
Tcp/udp区别
堆排序介绍,答错了,弄成桶排序了,面完才想起java有个优先队列是用堆排序。
算法是二叉搜索树转双向链表,没写出来。
这是自秋招后春招第一场面试,八股什么的都没好好准备。
同花顺一面 40min
1、 项目介绍,如何实现,MQ在项目中的作用
2、 Redis集群、哨兵、内存淘汰策略
3、 Java锁的区别,锁的用法
4、 Spring里用到哪些设计模式,以及介绍。答单例模式、模板模式(容器refresh)、工厂模式、责任链模式、代理模式、观察者模式
5、 线程安全注意哪些问题、有序性、可见性、原子性介绍一下。
6、 用过哪些线程安全的类atomic、cyclicbarrier、countdownlatch、semaphore。
7、 Java多线程、进程理解(每个面试必问!
8、 算法是斐波那契数列
同花顺二面 40min
1、 画架构图,MQ的使用。为什么使用RocketMQ,rabbitMQ特点呢。20分钟
2、 场景设计题,设计股票搜索,在java本地设计,实现前后中部分内容输入的搜索。只想到字典树,说了字典树,面试官问实现和搜索,把字典树的实现讲了一下,搜索只想到用dfs进行深度遍历。这里面数字的话最终的数据都是存在树的最底层,如果是拼音的话在拼音缩写结束那一层节点需要补上数据。问我优化搜索,想不到。面试结束后想到,可以用map,如果是数字搜索,六位股票代码,那么树就是六层高,把每一层都放到一个map,然后key是数字,value是树的结点,其次每个value节点都要有最底层所有节点的指针,这样方便搜索的时候从当前层跳到最后一层拿出数据。如果是拼音的话同理,但是不用存最底层数据的指向。
3、 问我抓过tcp包没有,也没有使用socket编程,答没有抓过,只在计算机网络实验课干过,只写过demo。讲一下抓包的时候会看到什么。脑里只想到了计算机网络考试的时候抓包数据是16进制的格式,就说每个包都是16进制的数据,后来查证应该是包头数据是16进制。问我聊不了解stream流,介绍一下,说是http2.0为了实现多路复用。然后设计一下stream流。。。磕磕绊绊讲了一会,实在没啥思路
4、 问实习时间
5、 反问他字典树方案可行吗,他说可以,只是需要优化。
以为挂了,后面通知hr面了,hr面后排序挂
滴滴一面 55min
面试官好评,是个年轻小伙,全程都有引导并且和我一起探讨,个人感觉是我遇到过的面试体验最好的!
1、 介绍一下java锁、锁机制、锁种类
2、 介绍AQS。从AQS实现底层state/队列、公平、非公平、以及其实现类lock cyclicbarrier、countdownlatch、semaphore讲。
3、 如何实现多个线程执行,另外一个线程等待线程执行。答cyclicbarrier/join实现
4、 问我AQS缺点,想了想lock的话要显示解锁,他笑了和我说你不觉得他实现很复杂吗。
5、 说我们来讨论一下spring的ioc和aop,以及应用。我介绍了ioc,实现控制反转。他问底层实现,答bean单例、反射、依赖注入。再问了aop的应用,事务、日志、实现,答jdk动态代理和cglib动态代理。
6、 讲一下计算机网络吧。Tcp/udp特性、tcp拥塞控制如何实现。问三四次握手挥手过程,为什么要四次挥手。为什么要time_wait。
7、 好像还有线程池的运行,答先核心,后放队列,之后new新线程直到MAX,然后按abortpolicy处理,有discard(不会抛出异常)/discardOldest/callerRuner/abort(会抛出异常。
8、 还有些项目的题、同样是讲MQ、redis、MySQL、项目的架构
9、 40分钟了,叫我写个算法题。环形链表,很快解决
10、 反问。结束面试
滴滴二面 60min
一面十分钟后就通知通过了,约二面了。
1、 面试官是leader面,上来就问我没有实习吗,答没有。直接写算法题,第一道是最大子数组的和,并且写出初始下表和结尾下表。力扣原题,写出来了,但不知道怎么处理初始下表。
2、 换了一道题,叫我写移动0的位置,同样leetcode原题,写出来了,但是他一直在做谜语人,说我题都读不懂,看了半天,原来是写测试用例验证逻辑正确性,之前没接触过这个名词,下意识没有想那么多。心态有点崩了,我说我来补测试用例像用junit那样子,他说不用了,你都知道了就没用了。然后又问我你不觉得这个代码有什么问题吗。我说没有。然后叫我用语文议论文的方式,用论点+论据来论证如何优化代码的方法,我说了时间复杂度和代码可读性。然后又问我如何优化,我说改变量名,然后他说还有吗,我说没有。结束的时候跟我说你没有把方法拿在main外面。。。诶,我以为只要输出结果正确就好了这种题,上个面试官直接叫我写在main里面就行了,有点无语,而且很多面试的时候,面试官都没那么多要求,一般写main函数里面就好了。
3、 给了道数据库设计题和写sql语句,太久没有写了,语法有点问题,但是写出来了。他看了后问你确定这样就好了吗,我说是。我没有给字段建索引,以为单单是建表出来就行了,结束的时候才意识到问题,在结束的时候也跟他讲了优化。
4、 就三道题。他说他一直在纠结要不要让我通过这次面试。我balabala了说机会很难得,自己也准备了很多,然后他想了想说,让我去小厂历练两年再来滴滴。说我这没有实习,基础不扎实,他自己说我可能也确实是因为我转专业这种情况导致没实习,说这也没办法。最后把我挂了
总结就是谜语人,中间还问我高考语文分数多少,质疑我的理解能力。
确实是挺可惜的,距离大厂第一次这么近。
天纵游戏技术面 20min
1、 java类加载机制
2、 spring注解的使用
3、 如何看待spring封装给新手带来的利弊。
4、 Redis简单问题、Mysql简单问题。
5、 为什么要有多线程、进程。
一家游戏技术面 60min
1、 bio/nio是什么,nio是buffer/channel/selector,一个线程轮询,通过channel传输数据,数据在缓冲区进行交换
2、 如何查找java死锁,不会。答案是jstack指令看线程状态。Jstat可以查看Jvm内存状态,垃圾处理状态
3、 感觉也没有什么值得记录的问题。996 有时候还9117 小公司不值得。
小天才安卓一面 30min
你确定你要安卓,前面几个面试的人都说是java后端,反复确认后他们放弃了这次安卓面试,你确定你要吗,我说确认。问java基础
1、 进程、多线程区别——线程是用栈内存,每个线程单独一个栈帧
2、 Java一般你如何使用锁、aqs/synchroninzed区别
3、 Tcp/udp区别
4、 https、http区别、https过程(客户端发起请求、携带支持的加密方式,服务器回应数字证书和选一个非对称加密、客户都验证证书,选一个随机数字,就是会话密钥,用公钥非对称加密,发给服务器,服务器解密,拿出密钥,这时候就跟客户开始建立对称加密。用密钥加密并且hash,发送给客户都。客户都解密,并hash验证hash值是否一样,一样则安全,之后进行对称加密通过。
非对称加密有RSA、对称加密有DES。
某上市公司:
1、 socket和http编程的区别
2、 路由器和交换机
3、 继承、多态、封装?静态多态、动态多态?
4、 创建线程池的方式
5、 介绍堆排序?插入、删除时间复杂度? nlogn
6、 怎么找出top10数据?
7、 频繁某个ip访问?攻击。加拦截器orFilter?
创业公司:
1、 抽象类。接口差别,为什么要这么设计
三星广州研究院:
1、 最长连续递增子序列。
2、 多个有序数组,对他们进行合并
3、 平衡二叉树、搜索二叉树、满二叉树、完全二叉树
4、 Topk数值?
面试通过了,但是需要线下笔试,且岗位是安卓,于是后面拒了。三星是WLB,入职就有第一年是12年假,满一年14,加班费周中1.5倍,周末双倍。