面试总结
今天参加了一轮视频面试,很多专业问题。但是还是有很多不会的。记录一下(可能存在错误,欢迎批评指正)
1.操作系统
(1)进程和线程是怎么通信的
进程通信:管道/信号/消息队列/共享内存/信号量/套接字
线程通信:信号量二进制信号量互斥信号量整数型信号量记录型信号量/消息消息队列消息邮箱/事件event
(2)死锁的解除
撤销/挂起进程
(3)分页和分段的区别
分页的作业地址空间是一维的,即单一的线性地址空间。 分段的作业地址空间是二维的 在标识一个地址时,即需给出段名,又需给出段内地址。
2.计算机网络
(1)http和https区别:一个是加密。
https是怎么保证安全的:HTTP先和SSL通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
状态码:1XX(正常可忽略) 2XX(正确) 3XX(重定向) 4XX(客户端错误) 5XX(服务器错误)
TCP/IP:四层模型 网络接口层, 网络层, 传输层,应用层
UDP报文长度:首部有8个字节 (源端口、目的端口、长度、检验和) ,伪首部12字节(计算机检验临时添加)
3.Java基础
(1)HaspMap数据结构和实现
是基于数组实现的,根据key的hashcod和数组长度确定位置。
(2)为什么重写equals还要重写hashcode
因为hashcode编码是根据内存中的地址来确定的。重载hashCode()是为了对同一个key,能得到相同的Hash Code。这样才能得到key对应的键值对。
(3)Java的迭代器
迭代器是一种模式、详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部。
4.编写sql
(1)having作用:where是过滤行用的,having过滤分组的。
sql思路:1.由于要求学生每门课都大于80.所以需要按照姓名分组。开始我认为是 select name from t where fenshu >80 group by name having fenshu >80
后来发现这么写是不对的,因为经过where过滤之后,低于80的课程已经被排除了,这样在用having就没意义了。
2.然后修改select name from t group by name having fenshu >80 。这么写sql报错,经过修改,在having中取最小分数>80,即可得到正确结果
SELECT name from testsql GROUP BY name HAVING min(fenshu)>80
(注,name是sql的关键字,所以使用时需要加上`name` 引用)
5.算法相关
(1)冒泡排序(求数组中第五大的数字)
今天用冒泡排序犯了一个很严重的错误,就是没有区分开外层循环和内层循环。导致在逻辑上出现了错误。而且在计算时间复杂度的时候,犯了错误。因为这个使用了两层for 循环。外层循环是k,即常数,内层是n。所以时间复杂度应该是On。而不是On²。
(2)算法题:生成6位随机数,至少包含一个重复数字且不相邻。
目前,还没想到好的解决方案。
解决方案:按顺序生产随机数,保证生成的每个数字与上一个不同。并且将生成的放进hashset 。生成完成之后检验hashset的长度,如果是6证明没有重复数字,此时,从前4个数字随机抽取一个放到第6位,即可。