收获很大的现场面试经历

        一个刚上大学的小妹妹让我帮她录高考加油视频,突然觉得时间好快,现在的我正在担心硕士开题的事情。Maybe,当下正在经历的挫折、面临的困境,等经历过后,回头看看,会觉得并不是很难,正如现在的我看待高考,看待保研,也如明年的我看待今天。

面试总结一:

一面:

  1. 单向链表中倒数第k个节点;
  2. Static函数的特点(可以在不创建对象的情况下直接调用,比如单例模式中获得唯一对象就是通过静态方法,还比如main函数)
  3. HashMap的原理,我主要回答了put操作的原理,且他不是线程安全的。那么,如果多个线程对其同时读写会出现什么异常情况:key链表的循环访问。扩容之后rehash。
  4. 访问一个网站的过程:域名解析,TCP连接,HTTP请求,前端浏览器解析网页,如果有动态表单,怎么与数据库、服务器交互?
  5. kafka高并发,快如何实现:消息持久化至磁盘,顺序读写,零拷贝技术;
  6. 永久代的作用:好吧,永久代就是方法区,当时没有反应过来,说了垃圾分代回收中老年代的作用;
  7. 一个正在运行的java进程,如何查看其日志文件在哪里,或者配置信息:我用ps -aux | grep找到了这个进程,可以看到一部分信息,之后请教面试官,应该是jinfo命令,好吧。一个博客链接,学习:JVM问题诊断常用命令:jinfo,jmap,jstack

二面:

  1. 手写代码:有序数组中重复数字出现的次数:注意特殊测试用例,如果整个数组只包含一个数字,如何优化?
  2. 概率题:每一次只能向左走或者向右走,n步之后回到原点的概率;

面试总结二:

一面:

  1. HashMap的工作原理,垃圾回收算法有哪些;
  2. 打印n行n列的蛇形数组:写完之后设计测试用例,注意分析总结,比如奇数和偶数时,最后一圈的不同;
  3. 有序数组中,打印所有组合,他们的和为指定值:两个指针,分别向前向后移动。
    1. 特殊情况:数组中存在大量重复的数据,例如[1,1,1,1,8,8,8,8,8,8],target=9,要求输出所有的组合,怎么处理?
    2. 判断两个值之和等于target之后,加一下内层循环,并记录此时的j,在内层的while循环中找到所有满足条件的组合,循环结束后,i++,j变为之前的值,以进行和新i的配对;
  4. 整数数组中,元素递增,找到缺失的那个值;
    1. 求和,期望和和实际和的差值;
    2. 数组有序,所以每一个元素依次和之后相邻的元素进行比较,是否差值为1,时间复杂度O(N);
    3. 更优的方法:对比每个元素值和下标的关系,其差值,可以发现缺失之前的元素差值为nums[0],缺失只有的为nums[0]+1;所以可以用二分查找,找到第一个差值为nums[0]+1的位置,就知道缺失的元素位置及其值;
    4. 更优的方法:借鉴数组中只有一个数字出现一次的的思想:将该数组与完整的无缺失元素的数组合并,那么只有缺失的元素只存在一次,用抑或进行运算即可;面试官好牛!
  5. 如果,数组是无需的,元素依然递增,寻找缺失的值:
    1. 将元素交换至其本应在的位置,指针可以向后移动的条件是,当前位置已经放置了正确的元素,或者是最大值;
    2. 那么最大值没有相应的位置,所以遍历整个数组后,最大值所在的位置,就是缺失的元素;
虽然由于实习时间问题没有拿到offer,但是收获很大。

你可能感兴趣的:(工作总结)