深圳开思时代科技有限公司社招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

相关推荐

一面 1.自我介绍,为什么学习前端,平时用哪些AI,怎么用,感觉用ai有什么好处,了解ai幻觉吗,平时有没有遇到过,如何解决。了解prompt吗,如果ai表现不好会怎么做2.实现两栏布局 答了flex grid 和绝对定位,问flex具体如何实现3.浏览器访问网页的过程4.普通函数中在定时器里输出this指向5.关于项目的提问,如何实现弹幕滚动,动画什么实现(rAF),和定时器比较优势在哪,ts使用有什么好处,如果不符合ts类型会在哪里发生错误(编译时还是运行时)前后端字段不统一会在哪里发生错误6.包管理工具哪个用的多(pnmp),有什么优势package.lock有什么作用,为什么会发生包安装了不可用或冲突7.使用哪个框架多,为什么组合式api和options比较有什么优势什么时候需要使用ref使用框架实现一个功能点的流程,组合式api如何使用?(记不太清了)8.如何实现路由鉴权token前端有加密吗(没)http和HTTPS区别,详细解释非对称加密9.手撕 买卖股票的最佳时机③ 有效的括号 手写eventEmitter(选做)二面:拷打项目,如何通过token辨别是哪个用户,jwt原理,反转对象键值对,如何区分对象和数组,辨别数组方法,遍历二叉树最大值非递归,promise的输出new promise(resolve,reject)=>{log(1)resolve(true)log(2)throw new err(‘err’)log(3)reject(false)}.catch(err=>log(err)).then(res=>log(res))二面太紧张了,简单题没打上来😭还是基础不够扎实,感觉准备充分点还是有机会的
发面经攒人品
点赞 评论 收藏
分享
评论
13
39
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务