深圳开思时代科技有限公司社招Java工程师(三面)

介绍和寒暄略……

  1. 谈谈你对JVM的了解?-------相当于一台运行Java代码的计算机,其结构包括:字节码指令集、寄存器、栈、垃圾回收、堆和存储方法域,运行在操作系统之上。其代码的执行是编译成class文件,装载到类加载器编译执行……
  2. JVM内存区域?--------上一个问题的延续,画个图一块一块地阐述下即可。计数器,每个线程都需要一个独立的计数器来标记字节码执行的行号指示……。虚拟机栈,线程私有的,存放方法执行的局部变量表、操作数栈、动态链接、方法出口等信息,方法的调用与执行,代表着栈帧在虚拟机栈出栈入栈。本地方法栈为Native方法服务与虚拟机栈类似的服务。Java堆,所有线程共享的区域,存放实例对象,也是GC管控的主要区域。方法区,所有线程共享的区域,存放类信息、常量、静态变量等(永久代)。常量池,属于方法区的一部分,存放编译期存放的各种字面量和符号引用……
  3. 垃圾收集算法?--------标记清除算法,见名思义标记所需要回收的对象后,统一回收,但是会产生不连续的内存碎片。复制算法,将可用内存分成两个大小相等的空间,每次只使用其中一块,当一块使用完将存活的对象复制到另一块,然后GC清理使用过的这一块。标记整理算法,同清除一样,先标记然后将存货的整理到一端,直接清理另一端。分代收集算法,就是根据不同的区域进行对应的算法选择,新生代由于存活对象远远小于死亡对象所以用复制算法,老年代对象存活率比较高,所以用标记整理算法……
  4. 你了解哪些垃圾收集器?------G1收集器,JKD7升级的并行并发,分代收集,可预测停顿……
  5. 创建线程的方式?-----------固定长度:newFixedThreadPool(参数为固定长度);缓存的线程池:newCachedThreadPool();……这种背API问题有点low,不知道要考察的是什么,总不能对计算机开发行业的考察记忆力吧。。。
  6. 怎么保证多线程的运行安全性?--------互斥性,可见性,有序性……
  7. 关于多线程锁的升级原理?--------只知道级别由低到高:无状态锁,偏向锁,轻量级锁和重量级锁(只许升级不许降级),至于原理实在不清楚。。。。
  8. HTTPS原理,以及安全的概念是怎样理解的?---------- 画个草图解释浏览器和客户端的数据传输和证书验证……客户端发送请求给服务器,服务器返回证书和公钥,客户端判断其合法性,如果合法及向下执行生成随机数,通过公钥加密随机数传输给服务器,服务器通过私钥解密随机数,通过传入随机数的对称加密传输给客户端,客户端根据本地存储的随机数进行解密。至于安全方面,涉及到中间人劫持的攻击,个人也不太了解……
  9. MySQL数据库的事务以及事务的特性?-------------所谓事务就是对数据库一系列操作的集合,集合中的每一个操作要么全部成功,只要有一个失败就回退到事务发生之前的状态。其特性为ACID,即原子性,就是前面操作集合的完整性;一致性,只包含成功事务提交的结果,就说数据库从一个一致性状态变到另一个一致性状态;隔离性,一个事务的执行不被其他事务干扰;持久性,提交后的事务对数据库的数据改变是永久的……
  10. MySQL的隔离级别?------读取未提交的数据,会产生脏读数据,因为另一个事务可能会回滚;读取提交数据;可重复读,默认事务隔离级别,产生幻读;可串行化,强制事务按序执行,但会导致大量的超时现象和锁竞争……
  11. 谈谈你对SpringBoot的了解?---------属于Spring系列的框架之一,简化了原来Spring应用程序的配置和部署。比较独立的Spring应用程序,内嵌了tomcat容器,通过maven依赖简化了原来的包依赖、配置依赖……
  12. SpringBoot是如何工作的?--------SpringBoot会根据使用@EnableAutoConfiguration批注添加到项目中的依赖项自动配置应用程序。@SpringBootApplication注释和main为应用程序的入口点。@ComponentScan自动扫描项目中包含的所有组件。spring-boot-starter-*的形式引入依赖。(一般在main类中@SpringBootApplication直接包含了其他注解)……
  13. 聊项目,特别其中的项目架构设计模式?--------注意:不是代码设计模式!刚开始也以为是代码(单例、工厂等)设计模式。——实际就是从单体架构的一系列发展,每次遇到某方面的瓶颈,就引入对应的技术或者增加硬件机器的方式。比如单体架构中,一台服务器中的web容器和数据库有资源的竞争,则数据库和web容器分开部署,随着业务访问人数的大量增加,数据库又成了瓶颈问题,那就增加缓存(redis或memcached)第一次访问数据库,后续访问缓存。如果并发请求持续增加web容器的压力有上来了,那就增加web服务器,通过Nginx将请求分担到各个web容器……以此分库分表,微服务抽离……

总结:数据库和底层JVM,以及项目的一些经验为主,其他的问题感觉相当没有意义……



#社招##面经##Java工程师#
全部评论
大部分了解过,但还是觉得好难,一看是社招。校招应该不至于这么难
点赞 回复
分享
发布于 2021-03-09 15:53

相关推荐

头像
03-18 09:09
Java
点赞 评论 收藏
转发
13 39 评论
分享
牛客网
牛客企业服务