面试总结

今天参加了一轮视频面试,很多专业问题。但是还是有很多不会的。记录一下(可能存在错误,欢迎批评指正)

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位,即可。

posted @ 2020-04-30 13:14  星际毁灭  阅读(158)  评论(1编辑  收藏  举报