2018 一些个人面试经验和一些 java 面试笔记

2018 一些个人面试经验和一些 java 面试笔记

我是2018届毕业生,在大学快结束(还剩一学期)的时候,准备转行软件,就毅然决然辞去了手上的硬件工作,但是这个时候开始转行确实太难了,我不断地学习,想用着一学期的时间来把软件基础补起来,结果很一般,开始了解软件之后才发现,原来软件的东西比硬件多的多得多,一直在学习但是总是学不够(扯得有点远了)。好了,其实很早就想写一些记录,可是因为一直没找到合心意的工作,所以一直放着。现在终于有时间来好好写写,也算是一点总结。内容包括了一些我认为含金量较高的面试经历,及我个人在准备面试期间的一些知识点的概括总结。(看完的话应该会收获不少)

首先来说一下面试经历吧

  • 有赞电话一面

    我投的是2019届校招的java开发工程师,这个当时就想试试,毕竟人家招的是2019届的。没想到过了一段时间看到邮件发送过来,简历通过初筛,等待沟通。。。当时心里那个激动啊,下午就接到了有赞面试官的电话,和我约了晚上8点的电话面试。当时想着回去后好好准备一下。

    面试开始,有赞的面试官是我遇到过最好的面试官,很耐心,很细节,会从多方面考察你的能力,而不会以偏概全。

    • 一开始还是自我介绍,这个我做的很不好,后来去网上查了一下最好这个格式(姓名,毕业学校,家乡,主要学习的语言和怎么使用它们/技术栈是什么、自己对技术的一些想法/对自己的评价)
    • 简单说一下HTTP协议,当时听到是懵逼的,不知道该怎么说,我就问他具体指什么,然后他就换了一个方式问(get,post。。。区别及解释)
    • 了解DNS吗,简单说一下DNS作用(这个应该都知道,域名解析嘛)
    • java的基本类型及包装类,包装类和基本类型的关系(基础的基础,送分题)
    • 接下来是 Mysql ,给了一个 Student 类,该怎么建索引,需要建几个。(这个感觉是一个开放题,字段全部自己定,我定了id,name,sex。id是主键,直接就是索引就好了,这个也是个送分题,就是当时理解不了,怎么问的这么宽泛,然后就墨迹了很久)
    • 面试官说了一下他们的项目及他们需要维护的东西(这里我很纳闷)
    • 又回到 sql ,问怎么优化慢查询。怎么调优(这个答的不是很好,不是就说了一些基本的 sql 查询的优化)
    • 最后是一个开放题,真的感觉面试官太好了,看我之前是做爬虫的,直接给我设计了一题:怎么设计一个高可用高效率的爬虫系统(这里我从头到尾,分析了一下,从数据库,到分布式,到消息队列,到缓存,到数据清洗都说了,说的过程面试官很耐心听我讲,也有记录,都没打断我,等我说完后他做了一个总结,和他问题一一对应我是否有涉及到他考察的点。)
    • 期间还有问道一个springboot的问题,忘记是什么了

    这样就结束了有赞电话面试第一面。他说等通知吧

  • 有赞电话二面

    二面的话是在国庆后了,在家喝侄子晚了几天后,回到杭州开始准备面试。之前我以为有赞的面试已经凉了,在8号晚上七点多,突然来了电话,说有赞的电话二面,没办法只好硬着头皮上。

    • 还是自我介绍
    • 毕竟二面了,面试官也不含糊,上来把我的项目经验都看了一下。完了之后说,我看你之前都是做爬虫的,简单介绍一下你的项目吧(我就大概说了一下,爬虫的项目真的没什么技术含量,无非是翻页,解析,模拟登录等等)
    • 说完后,我看你模拟登录有对加密的密码破解,你遇到的都是什么加密方式啊(我说了一下非对称加密RSA),接着追问,这个是非对称加密,那对称加密是怎么样的,和非对称加密的区别是什么(模糊的知道对称加密好像破解比较容易,但是不确定,当时就回复了不知道。结束后查了,对称加密加密和解密用的秘钥相同,加密速度快,解密难度相对于非对称加密难度小)
    • 接着问,你做爬虫,对http了解吧,https呢,https和http有什么不同,https的加密方式是对称加密还是非对称加密(怪自己只会了解表面,知道https加密,但不知道怎么加密及加密方式是什么,查了一下https加密方式有对称加密和非对称加密)
    • TCP 三次握手知道吗,简单说一下过程(必会吧),那 TCP 是属于 OSI 五层或七层的哪一层,先说一下 OSI 五层模型吧,(应用层,传输层,网络层,数据链路层,物理层),TCP/IP ,在哪一层?(送命题,TCP 属于传输层,IP属于网络层)。知道 Socket 吗?它在建立连接的时候 accept ,成功连接后是建立了什么连接,会返回一个什么对象(由于对 java 的 socket 编程不了解,问的时候就不是很清楚了,都说了不知道,结束后查了,socket 连接建立的是TCP 连接( UDP 无连接),在传输层建立, accept 返回的是一个 Socket 对象)
    • 简单说一下 TCP / UDP 的区别吧(必会),它们各有什么问题,怎么解决(我就说了一个 TCP 的一个粘包问题,定长解决,UDP 会丢包)
    • 看你接触过 ZK ,说说你们怎么使用的啊,使用原生的 API 吗?(是的,主要做了一个任务分发,用了watch机制),那问一下 如果我有三台机器,我坏了几台整个系统就不能用了,(这个没答上来,因为 ZK 用了很久了,而且没有仔细去研究,只是把他简单用上了。结束后查了一下,ZK 系统一般宕机一半以上就不能用了,一定要保证存活半数以上,选举机制的保证),ZK 的内存模型怎么样(面试官提示的是树)
    • Redis 用过。它是单线程还是多线程的(单),那为什么呢( Redis 在内存中存取数据,速度本来就很快快,若用多线程,上下文切换的时间消耗十分巨大,效率还不如单线程)。Redis 是单线程的,那它存在并发问题吗(脑子竟然绕不过来,并发问题简单的可以用 i++ 这个来验证,其实 Redis 是存在并发问题的),面试官看我没反应过来,那或者换个方式问,知道CAS吗,(compare and swap 乐观锁,然后我说了一下知道的),面试官看我没反应过来应该很失望吧(CAS 可以用来解决Redis并发问题啊,也就是说 Redis 存在并发问题阿)。然后又问了一个怎么用 Redis 来做选举(当时 Redis 这块准备的不充分,分布式锁这一块都没去看,也就没答出来,但是说可以用 Redis 的 list 来做,每次检查长度,这个肯定不是答案,也不知道该怎么答。后来倒是看了 ZK 的选举机制,1.全新集群选举(机器id,开机顺序)2.非全新集群选举(逻辑时钟 -> 数据id -> 机器id))
    • 接下来问了 Spring ,了解spring,说一下 Spring IOC 的初始化过程吧(真的打脸,这个都没去看过还敢说自己了解 Spring ,没答出来),追问那 BeanPostProcessor 这个接口知道吗(也不知道。。好了 Spring 问完了。。。。)
    • 问了 Hashmap 是不是线程安全,加在方法上的 synchronized 锁实际是加在哪的(实例对象上),那什么map是线程安全的(说了 ConcurrentHashmap ,感觉自己在挑战权威), 那 ConcurrentHashmap是强一致性还是弱一致性的,为什么(瞬间懵逼,没听说过这个概念,后查到是弱一致性的,因为get无锁,可能不能马上拿到新插入的值)
    • 说说 Tomcat 内部结构吧(当时说的很乱,结束后了解清楚,这个也要必须会),servlet是单例是还多例。

    差不多就问完了,问完我也就觉得凉凉了,结果第二天就收到通知没通过,心里也很难受,不多让我知道了自己远远不足。

  • 玛瑙湾

    这家公司的面试很风趣,主要是面试官,他是支付宝出来的,问的问题可以很深入,看你简历怎么写

    • 还是问了一下基本的情况

    • 快排原理(双轴快排,三向切分快排),说了第一个其他连个都不知道,归并排序(知道,不知道其过程,这个是要不得的,回来后好好把这个看了一下)

    • 小顶堆,有向无环图,小顶堆说了一下,后面的不知道,回来简单了解了一下也不是很懂。

    • 设计模式,了解单例,没有系统去看,设计模式分为哪三大类(创建型,行为型,结构性)

    • 给了一个简单的关联表 sql 查询,竟然没写出来,不知道是因为啥,脑子坏掉了吗

    • 说说 int a = 1; 在虚拟机中的执行过程(先生成常量1,放入方法区,将a变量压入线程栈,将a指向1)

    • RFC2616协议了解吗? RFC1945(一脸懵逼,其实就是http1.1 和http1.0),ETAG了解吗(关于缓存的,一个标识,服务端会将客户端传过来的ETAG和服务端进行对比,若相同,则标识客户端缓存的数据都是可以用,未更新。若不相同,服务端会重新发送已更新的数据)

以上就是我认为比较有含金量的两次面试,可以学到很多东西

一些简单的总结

  1. 面向对象的特征
  2. final,finally,finalize
  3. 重写,重载
  4. 抽象和接口的区别
  5. 内存泄漏和内存溢出区别
  6. 反射原理
  7. GET POST区别
  8. session和cookie区别
  9. session分布式处理
  10. JDBC操作
  11. equals和==区别
  12. 集合set
  13. list
  14. Hashmap(重点)
  15. ConcurrentHashmap(重点)
  16. 创建线程的方式
  17. 说说sleep,wait,join,yield
  18. sleep(0) 的作用
  19. CAS 原理
  20. Redis内存模型
  21. volatile 原理作用,可否代替 synchronized
  22. 线程的生命周期的几种状态
  23. 偏向锁,轻量级锁,自旋锁,锁消除,synchronized可重入,公平锁,非公平锁
  24. 线程池,一些参数,用的什么队列
  25. 原子类
  26. spring默认是单例还是多例
  27. wait,notify使用
  28. 隔离级别,会造成什么问题
  29. mysql储存引擎,分别的特点
  30. 高并发修改一行数据,推荐乐观锁还是悲观锁,原因
  31. innodb 标准的行级锁是什么,简单说一下怎么使用
  32. innodb 和myisam索引的原理,区别。聚集索引和非聚集索引区别
  33. 简单说一下innodb索引的数据结构
  34. 数据库的MVCC
  35. Redis 的缓存击穿,缓存雪崩,缓存穿透,分别是什么
  36. Redis 几种内存淘汰策略是什么,默认淘汰策略是什么。当数据库中有一部分数据用到的非常频繁,应该选用怎么策略。当数据库数据数据的使用比较平均怎么选择。
  37. mysql 产生死锁的情况及分析
  38. 正想索引和反向索引
  39. 一个类中不能被序列化的变量有哪些
  40. final修饰的引用变量指向的对象的内容可以修改吗
  41. spring IOC 初始化流程
  42. 简单说一下AOP
  43. SpringMVC的流程
  44. JVM的内存模型
  45. 垃圾回收机制
  46. 二叉堆
  47. object中公用方法有哪些
  48. Native修饰的函数是什么
  49. String类为什么设计成final
  50. String,StringBuilder,StringBuffer区别
  51. ThreadLocal 原理
  52. java泛型
  53. java 通配符“?”,解决了设么问题,怎么使用
  54. 手写单列(懒汉式,饿汉式)
  55. 一个对象被创建的过程(jvm中)
  56. OSI模型
  57. TCP/IP
  58. socket
  59. 什么是异步

后期会补充知识点的简要解答,文中若有不对的地方,请大家指出

猜你喜欢

转载自blog.csdn.net/qq_36486573/article/details/83548379
今日推荐