深圳强时科技有限公司(一面)
招聘简章技术栈要求:
- 熟练掌握Spring、Spring Cloud、MyBatis、Mongodb、RabbitMQ、Redis、ElasticSearch等常用组件。
- Java基础扎实,具备JVM诊断性能优化技巧,对JVM运行原理比较熟悉。
- 了解常见设计模式,熟悉微服务的架构模式,熟悉敏捷开发的开发模式
- 熟悉linux操作系统基本原理、熟练掌握基础命令
- 了解DevOps相关知识,对Docker有一定项目实践者优先
- 熟练掌握MySql以及NOSQL、熟悉SQL基本规范、索引等基本概念
- 自我介绍----------------略,毕竟先参考了招聘简章要求的简历……心里有个底。
- 聊项目,项目技术栈---------考察的是项目经验……略
- JVM的了解?----------运行时的那几个数据区(画图阐述)内存模型……每次面试都是类似的发问,所以轻车熟路了。
- JVM对象分代划分--------(画图阐述)Eden Space用于存放新创建的对象,From区和To区都是准备空间;当Eden区满时,JVM执行垃圾回收GC,垃圾收集器暂停应用程序,并会将Eden Space还存活的对象复制到当前的From空间,一旦当前的From救助空间充满,此区的存活对象将被复制到另外一个To区,当To区也满了的时候,从From区复制过来并且依然存活的对象复制到Old区,从而From和To救助空间互换角色,维持活动的对象将在救助空间不断复制,直到最终转入Old域。
- 你所了解的垃圾收集器有哪些?----------Serial收集器单线程收集器,在垃圾收集时会暂停其他工作线程。ParNew收集器属于serial的多线程版本。CMS收集器,G1收集器……(不知道问这些有什么用?感觉现在一些企业招聘都是为了面试而面试,不算是真正的招聘)
- jvm性能调优?------------------一些调优参数,-XX: ……,……(性能调优的一些参数规定,其实我也不太了解更深入的概念,有时间再看看相关资料)
- 你了解的JVM性能监测工具?-----------------jps虚拟机进程状态工具,jstack虚拟机栈空间的查看工具……,……
- synchronized关键字的了解?-------并发中,对于共享资源的修改进行的同步操作,必须配合锁来使用,synchronized修饰的内部代码具有原子性,CPU必须执行完代码块里所有的操作才能进行线程的切换……
- synchronized的用法?---------手写伪代码表述:synchronized修饰方法,方法内部的变量操作是同步的;修饰静态方法;同步代码块(参数为监视器对象);静态方法中的同步代码块;……
- synchronized不同的修饰用法?-------是对上一个问题的延伸发问。假设按照上面的不同修饰分下类:staic+synchronized方法、synchronized(*.class)称为类锁;synchronized方法、synchronized(this)称为对象锁;通过一个私有属性作为synchronized的参数称为私有锁。
- 同步方法和同步代码块的优劣怎么理解?-------实际开发中使用同步代码块更好。同步代码块更具有针对性,对需要的操作原子性进行操控,而同步方法有时会被无关的方法也当作了原子性的同步操作。而且同步代码块可以灵活选择锁……
- 线程之间的通信方法,wait/notify/nitifyAll等方法?---------说白了就是在一个线程中可以对另一个线程的停/行做出通知。以上三个方法属于Object类中的,一旦一个线程调用了wait方法,则线程转为停止状态,直到另一个线程调用了同一个对象的notify进行唤醒方可继续执行,前提是synchronized代码块参数为同一个对象……
- 聊项目,主要是项目架构的设计和应用的技术栈?------前端的过滤、拦截,并发请求消息中间件,数据库方面的一些(包括内存数据库),没有侧重某个技术栈知识点,主要是项目的业务需求架构……
总结:上午的面试偏重于JVM的了解以及JVM的调优,多线程并发同步的理解……