面试:美团网美团点评后台开发Java一面面经自学计算机应聘秋招,结果挂了,但感觉收获还是颇丰的,结尾有总结,希望对各位小伙伴有帮助!
## 问项目项目中遇到的问题,怎么解决,怎么思考对于项目(新闻推荐)中用到的一些算法,为什么用这个算法,优缺点,主流的像今日头条、新浪微博用什么算法,了解与否?
*(考察分析问题,解决问题的能力)*## 计算机网络### TCP/IP协议TCP在OSI五层(应用、传输、网络、数据链路、物理)中的哪一层(传输层),IP在哪一层(网络层)TCP与UDP的区别(TCP面向连接,提供可靠的数据传输,UDP不需要连接,不保证可靠的数据传输)
### TCP连接过程三次握手,画图延伸:如果将三次握手改成“两次”(略去客户端最后发送ACK报文这一步),对客户端和服务端有什么影响?(答:对客户端无显著影响,但是服务端这边由于没有收到ACK确认,没有与客户端C建立唯一的连接,而假如当网络状况不良,导致某次客户端C发送的SYN没有及时收到相应而重发SYN,而服务端这边先后接受到了两个SYN,就会导致服务端要维持两个连接,而这就造成了不必要的资源浪费。如果有了最后的客户端发送的ACK,服务端就不会再理会相同来源的SYN包。)
### TCP提供可靠数据传输的原因滑动窗口以及拥塞控制机制。参考这里[TCP协议相关连接、窗口、拥塞控制全解]
## 操作系统
### 死锁死锁的概念(进程之间对互相正在占有的有限资源的申请无法达到而僵持)死锁的四个必要条件(资源的互斥性(同一个资源不同同时被两个进程使用),资源的不可抢占性(不能强行剥夺其中一个进程拥有的资源),占有且申请性(进程会在占据自己已有资源不放的情况下去申请其它资源),循环等待(如果资源没有申请到,则等待直至申请到))如何破坏死锁:破坏四个条件任何之一,死锁就无法出现。检验死锁是否会出现的方法是什么:银行家算法,具体怎么做的。
### 临界区是什么?发生冲突如何解决?(当时不了解“临界区”的概念,回来查的)!!!!!
## 数据库索引1.MySQL索引的实现结构B+树2.B数和B+树的区别3.索引最左前缀原理4.对于一个数据表添加了索引的三个列ABC,查询时使用了如判断条件where B=1,或者where B=1 and C=2,这时会调用索引吗?!!!!!
## Java知识
### HashMap1.HashMap的底层结构?数组链表2.负载因子(loadFactor)是指什么?HashMap已经存储的键值对数/HashMap容量(桶数,哈希表长度)3.默认容量为多少16(源码:2>>>3 //aka 16)参考[Java集合框架要点概括]
### volatile关键字的作用保证修饰变量的可见性,以保证并发程序的正常运行。参考[Java并发编程:volatile关键字解析]
### 线程池线程池构造函数有哪些参数```public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);```corePoolSize核心线程数,maximumPoolSize最大线程数,keepAliveTime线程存活时间,TimeUnit存活时间单位,workQueue任务队列,ThreadFactory线程的获取工厂,RejectedExecutionHandler超出线程池处理能力的任务拒绝策略。有哪些任务拒绝策略?- ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。- ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。- ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)- ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务参考[java-并发编程线程池的使用]
#java-并发编程线程池的使用)## 手写代码:将字符串转换为数字剑指offer的原题,大家可以去网上做一下。注意点:是转换为数字,那就有可能是负数,以及小数,各种情况都要考虑到。
## 机器学习(个人简历经历)因为简历上还有一些机器学习的经历,于是问了一下神经网络的知识,具体包括神经网络可以处理什么样的问题我答可以处理比如图像识别问题,面试官问大概过程:把图像的像素矩阵转换为列向量,将图像对应的事物类别做成标签(01列向量),输入神经网络进行训练,然后判别。神经网络的原理logistic分类器的多重组合(Coursera Andrew Ng Deep Learning课程1里有说过),实现复杂函数的拟合;误差逆传播训练纠正参数。
## 总结注重基础,因为我是后台开发,面试官说操作系统,数据结构和算法,计算机网络和数据库是最重要的四大基础。大家多看一下面经里的常考问题,然后一一弄懂(尽量不能有含糊的部分,面试官很容易抓住你说的不清楚的地方问)。我虽是金融的本科,但既然是要做这个技术的岗位,所以也会按照科班的要求来考量,所以挂得非常心服口服,因为中间有四五个问题确实没准备到,所以还是感觉自己需要继续查漏补缺!继续努力,不气馁!面试官还是挺好的,谢谢美团点评!各位招工的小伙伴加油!
面试感受:很好
面试难度:有难度
面试来源:校园招聘