10.6:面试准备

发布时间 2023-10-07 00:19:53作者: 思考与感悟

边学边找工作了,怕什么!路在脚下;

谈谈你工作中的开发流程和日常是什么?

0、项目成员【3个后端、1个前段、1个UI、1个测试、产品经理】
1、周一至周五早上项目成员讲述自己任务进行的情况以及分配接下来的任务,周四下午会开一个项目总结会议;
2、产品经理会会对第一期项目进行模块的划分,UI和技术leader根据产品经理提供的原型图进行UI设计和项目框架的搭建和数据库表的设计从而确定架构和需要使用的工具软件;
3、前段会根据UI提供的PSD图进行切割成HTML和app页面;后端提供接口和接口文档开始对接工作;
4、技术leader会搭建测试、开发、生产环境;
5、最后就是测试人员进行测试将bug提交给对应的项目组成员,然后进行问题修复;

你项目开发多久?

我目前做过的项目大多都是3个月左右,这个具体要看产品经理对模块的设计以及技术的难易情况;

你网站日活是多少在线用户和tps是多少?

我们主要针对的是企业是属于B2B模式,其实在线用户量并不是很大,日活高峰大约3000人,同时在线的话大约200-400人;

1.项目线下运行,如何做到不停服务进行发布和部署?

使用Nginx 和 集群方式进行发布和部署【其实这块是技术leader和测试运维团队来完成,我主要就是协助发布和部署】;
原理:使用Nginx对Tomact进行集群化,Tomcat有3个节点,轮着停服启动。也可使用一些容器化技术比如【docker和k8s进行发布和部署】

2.谈谈你对项目框架Spring/Springmvc/Springboot/Mybatis的认识和理解,或者运行原理?

Spring:

1、Spring是Java企业级的开源开发框架,用于简化Java企业级应用的开发;
2、SpringIOC: 控制反转是一种思想【上层控制下层】;
3、SpringDI: 是一种实现方式,依赖注入就是把底层类作为参数传递给上层类,实现上层对下层的【控制】;注入方式有:Setter注入、接口注入、构造方法注入、注解注入
4、Ioc容器:避免在各处使用new来创建类,IOC自动创建对象进行注入,并且可以做到统一维护;

5、Spring的BeanDefinition:
扫描Bean的配置生成Bean的初始设置模型放到BeanDefinitionMap中然后生成Bean;
6、Spring如何解决Bean的循环依赖:

SpringBoot

1、你对SpringBoot的理解?
简化配置、约定大于配置,
2、SpringBoot的自动装配原理?

1.7的HashMap和1.8的HashMap有什么区别:

类加载机制:

双亲委派机制:一个类收到了类加载请求,首先他不会尝试自己去加载这个类,而是把请求委派给父类去完成,因此所有的加载请求都应该传送到启动类加载中,只有父类加载器无法完成这个请求【加载路径下没有找到所需加载的Class】,子类加载器才会尝试自己去加载;
优点:避免类的重复加载防止核心API库被随意篡改;

JVM内存区域:

线程私有:栈【运行时创建存储声明的变量,生命周期和线程相同】、程序计数器【当前线程所执行的行号指示器】、
线程公用:堆【虚拟机启动时创建的对象实例,垃圾回收GC】、方法区【类的信息、常量、静态变量;很少发生GC】

讲一下垃圾回收:

垃圾回收是:JVM在后台自动回收中不再使用的内存【对象的地址没有变量引用时】从而提高编程效率;
垃圾回收前会主动调用对象的finalize()方法,也可以手动通过System.gc()或者Runtime.getRuntime().gc()告诉系统进行垃圾回收【但系统不一定执行】

讲一下垃圾回收算法:

1、引用计数法:对象没有任何关联引用则计数为0,可以被回收;
2、可达性分析:对象和GCroot是否存在一个可达路径【二次确认后】,标记为可回收对象;
3、标记清除法:标记无用内存并清除【缺点:内存碎片化严重,无法存放大对象问题】
3、标记复制算法:总内存分为2块,其中一块内存满了后将有用该内存复制到另一块内存上去,解决了内存碎片化问题【缺点:但是可用内存被压缩了一半,当存在大量可用内存的话效率很低】
4、标记整理算法:将存活的对象移向内存的一侧,然后清除内存外侧的对象;将垃圾整理出来,然后一块扔掉
5、分代收集算法:老生代【每次垃圾回收只有少量对象被回收】,新生代每次垃圾回收只有少量对象被回收。

java引用:

1、强引用:最常见,把一个对象赋值给引用变量,永远不会被GC回收,是导致内存泄漏的主要原因【OutOfMemoryError】
2、软引用:使用SoftReference类实现,内存不足时被回收;
3、弱引用:使用WeakReference类实现,只要GC运行就会把弱引用回收;
4、虚引用:使用PhantomReference类来实现,不能单独使用,必须和引用队列联合使用,跟踪对象被垃圾回收的状态;

java数据类型:

基本数据类型:byte,short,int,long,float,double,boolean,char【1,2,4,8,4,8,1,2】;
其他都是引用类型,龙;

将项目添加到版本控制:

git上面新建一个仓库,然后在本地初始化这个仓库并push一次到远程仓库进行同步;
然后把项目放到这个仓库中。

并发和并行是什么意思?

并行:多个事件在同一时刻发生,对CPU资源没有抢占、等待行为;
并发:多个任务在同一时间段交替执行,对CPU资源进行抢占,并发操作系统会根据任务调度系统给线程分配线程的CPU执行时间,线程的执行会切换;

MySql

线程问题

1、线程状态有哪些?

2、创建线程的方式?

3、

基础【集合框架底层源码】 - 广度【使用和基本原理】 - 深度

JUC问题Synchomized、偏向锁、轻量级锁、重量级锁、锁升级流程、ReentrantLock、AQS、CAS【暂不去了解】