一. 一面
Java集合框架: HashMap, HashTable, 二者区别, ConcurrentHashMap
并发包: 阻塞队列(这个我没用过, 直接说不太知道)
用java实现一个stack数据结构, 包括它的push和pop方法(这个比较简单);
写迷宫最短路径(输入是二维数组, 给出起点终点, 没写出来, 只写了一个找可行路径的程序(用了stack)), 后来他说这个其实有一个算法叫A-star. 我表示弱鸟真不知道...
网络:三次握手,四次挥手; 四次挥手容易写错, 应该是
A->B: FIN=1, seq=u
B->A: ACK=1, seq=v, ack=u+1 //收到
B->A: FIN=1, ACK=1, seq=w, ack=u+1
A->B: ACK=1, seq=u+1, ack=w+1
关于三次握手, 四次挥手参考https://github.com/jawil/blog/issues/14
TIME_WAIT是什么意思: 我当时说不知道
知识点:
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FINWAIT1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(主动方)
ARP: Address Resolution Protocol, 转换IP和MAC地址. 主机A和主机B要通信只知道对方的IP地址是不够的, 还需要知道MAC地址, 因此主机A可能在局域网中广播ARP消息, 请大家检查自己的IP地址是否满足是主机A在找的, 找到B之后, B会回复给A. A中会建立其ARP缓存, 也就是一张IP->MAC地址的表.
子网掩码计算: 和CIDR
CIDR: Classless Inter-Domain Routing
这个不太难. 标记1的部分是网络段, 标记0的部分是主机号码段
Python学的怎么样? 能用, 但是具体底层没怎么看过.
熟悉linux嘛? 入门
讲讲内存管理? CPU, cache, 内存, 硬盘的关系, 虚拟内存, 分页, 换页, LRU方法.
二. 二面
用Python和Java写读取文件, 保留第一相和最后一项, 且去重, 再按行输出.
一颗多叉树, 找两个结点的公共父节点
数据库的优化: 使用内存型数据库, 使用缓存服务器, DB建立索引, 查询语句逻辑优化;
数据库崩溃的话应该注意什么?
数据安全性, 因此要多备份; 立刻恢复服务的可用性, 因此要有备份机.
你在百度图片实习过吗? 那如何用工程师的方法去提高图片搜索结果的质量?
三. 三面
设计图书馆的数据库表: 这里写的时候要注意满足数据库的第一范式和第二范式即可, 也就是说字段不可拆分, 字段不要有冗余.
如果图书同一个名字的书有好几个副本, 要怎么修改表: 降低冗余, 再把抽象书和具体书实例拆分出两个表.
你感兴趣的方面是什么?
最后三面面试官说他来自平台测试部.
网友评论