1. 2021面试总结
J229公司及面试题
------------------------229------------------------
铭日芷星 14~18K
mysql主从同步什么原理
描述mysql中,索引,主键,唯一索引,联合索引的区别
简述MyISAM和InnoDB的有什么不同?
redis分布式所和同步锁在开发中怎么区分
redis存储的类型有哪些,使用场景有哪些
redis能存放的数据量有多大(记不清,反正问过这个题,关于redis的数据存储量的)
springCloud微服务都使用过哪些,都是为了解决什么问题
jwt实现签发的底层原理是什么?
书写人生 8~10k
先来就填表,根据你填的期望工资上机测试打代码,薪资不同做不同的题。 比如一个steam排序,去重,再封装vo,
多重for循环逻辑判断输出,多线程
线程和进程区别,
java8新特性,
集合ArrayList、hashmap底层,
redis的双写一致性,互斥锁。
还有些项目中使用的细节,反正项目细节要慢慢讲,他一直会怀疑你的经验那些有问题,介意别包装
德科信息技术有限公司 8k~12k
springmvc执行流程
有几种创建线程的方法
String,StringBuilder和SpringBuffer的区别和哪个是线程安全的
有哪些设计模式
你用过哪些消息中间件
集合有哪些,hashmap的底层是用什么实现的
怎么优化数据库(用索引)。索引什么情况下会失效
九恒星 7-12K
观察者监听者模式.
Servlet初始化和生命周期.
然后就是主要聊之前的项目.
金融项目优先.
对项目考察的多.
要多讲讲你对项目中技术的使用和遇到的问题.
他们用的Oracle数据库.如果有兴趣可以专项练习.
WEB MVC 里面的知识点多看看. 面试的好.10K可以拿
软通动力&平安金科&蚂蚁金服一面&三零 12K-18K
主要是项目业务介绍+少许基础
hashmap和concurrenthashmap底层区别,
synchronized在各个jdk版本中做过哪些优化,
日常开发中用过哪些JUC下的各种锁,
对于数据结构是否了解,
spring-aop是什么,是怎么通过代理实现切入,
日常开发中用过哪些设计模式,
了解过jvm中的垃圾回收算法吗?
讲一讲volatile关键字底层原理,
nacos怎么实现高可用,
生产中怎么查看日志,
了解过项目是怎么部署上线的吗?
项目部署在几台服务器上?
日常的访问量和峰值有多少?
平安科技 6-8K
技术组长开门见山直接问最近的项目
简述项目
然后项目难点在哪
是否应用了集群和分布式
项目数据量什么级别
是否应用了同步锁
各种锁 .
数据库的索引 ,
什么时候用索引
建伟科技 6-10k
流程:自我介绍->项目介绍->java基础题
重点问的项目,包括项目使用技术、项目大小、多大并发量、用户数量级别。
然后就是给你算法题,你口头解答
灵动信息技术有限公司6-8k
直接跳过项目
问题1:springBoot的自动装配机制?如何取消自动装配
问题2:spring创建的Bean和自己手动创建的bean的生命周期, 如何消亡?是否立即消亡?若要立即消亡如何操作?
问题3:IOC和DI 自己的理解?
问题4:Redis应用场景
问题5:hashtable和currentHashMap的区别?
文思海辉 8~12k
1、STRING 、STRINGBUFFER 、STRINGBUILD的区别
2、JAVA三大特性
3、继承的特性
4、JAVA的作用域
5、INT和INTEGER的区别
6、HASHMAP的底层
7、ARRAYLIST和LINKEDLIST的区别,哪个是线程安全的
8、STRING A = NEW STRING(“XX”)创建了几个对象,哪两个对象,这两个在哪
9、 为什么JAVA语言可以跨平台
10、== 是干什么的 如果两边是对象的话呢
11、会不会安装数据库
12、git的使用,遇见冲突怎么解决
13、maven的使用"
14.spring的注入方式有哪些?
15.Java的三大特性
16.继承是?
17.hashmap底层
18.==是干什么的?
19.Java jdk1.8新特性流对排序是怎么?
20.Servlet生命周期
21.mybatis框架一对多是如何实现的?
22.String、String buffer、String build的区别
23.什么是装箱和拆箱
24.能否通过编译float a = 3.4,为什么不能?float类型的能赋值给double类型的吗?double类型的能赋值给float类型吗
25.抽象类与接口的区别
26.hashmap和hash table,hash table的什么不能为空?
27.set的什么可以为空,有几个可以为空?"
28、字节流和字符流区别
29、怎么解决Springboot循环依赖
30.jwt是什么,它的组成是?"
31、字节流和字符流的使用场景
32、springMVC的使用原理
33、mybatis是怎样实现一对多查询的
34、linkedlist和hashlist的区别!!!坑,没有hashList
35、在本地是如何建立你的项目环境的
36、MySQL的安装过程中遇到了什么问题
J232公司及面试题
------------------------232------------------------
一、博彦科技有限公司
1. 谈一谈最近一个项目干了些什么
答:最近一个项目是医疗系统,我主要负责出院管理,对各表的数据进行处理。
2. 谈一谈数据库索引(查询速度快),然后为什么快。
答:主键、唯一、普通字段、复合(多个字段在一起生成一个索引)
如果在大量的数据中,直接判断一个值是否null,这样的性能极低,所以唯一索引性能低于主键索引
因为索引是B+数查找行为
前序循环
中序循环
后序循环 可以保证性能较高,为什么我们会选择主键索引,因为主键拥有唯一和非null的状态,可以再次提升索引性能
3. 举了两个实际场景,数据库应该怎么查。
答:1-查询一个公司中姓李的职员的有多少
select count(id)from zhi_yuan where password=‘123456’
扩展问:count(1) count(*) count(id) 哪一种性能高
区分 mysql5.5之前和之后
5.5之后 count(*)默认找主键索引,如果没有,则找普通字段(官方做了对应的优化处理,仅限于order主键的时候)
如果要求手写sql:尽可能不要出现like,不要出现null判断,不要出现or,不要出现in或者not in,order尽可能基于索引排序
INSERT into jue_se(jue_se_ming_cheng) select jue_se_ming_cheng from jue_se;
select id from jue_se where id>10 ORDER BY id limit 10;
select id from jue_se limit 200000,10;
select count(*) from user where username='' and password='' limit 1;
4. 联合查询,应该注意些什么(性能问题)
UNION关键字可以把来自多个SELECT的语句的结果组合到一个结果集中,这种查询方法称为并运算(UNION)或联合查询。合并时,多个SELECT子句中对应的字段数和数据类型必须相同。在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:查询1 UNION (查询2 UNION 查询3
2. springmvc&spring&myabtis
SpringMVC&Spring&Mybatis
什么是SSM?
企业中最主流的框架组合解决方案:SSM(Spring MVC、Spring、Mybatis) 整合方案
什么是SSH?
曾经企业中的主流框架组合:SSH(Struts、Spring、Hibernate)
学习框架的目的?
企业要求开发人员学会各种框架的目的,是为了提升开发效率和开发时间,对应降低企业成本,提升企业利润比
Springmvc替代了什么
SpringMVC替代了我们曾经的Servlet(JSTL+EL+JSP)
什么是耦合度
在代码中类与类之间或者对象与对象之间的依赖关系, 对象调用对象的层级越深,则依赖度越高,对应耦合度也就越高,反之则是耦合度低,0耦合指的是每一个类或对象之间都无依赖关系。而耦合度过高会导致维护成本越高
Idea中maven的核心就是pom.xml文件
中央仓库的作用
它会保存所有驱动包,当我们需要调用的时候,可以根据指定的地址进行引用,这样的好处在于多个工程可以重复使用相同的驱动包,而不是增加硬盘的压力 它可以根据不同的驱动版本进行保存,所以我们可以非常自由随时更换版本 它可以做到一个真正的驱动和版本统一
驱动包管理<dependencies>
<dependencies> <!-- 驱动依赖管理 --> <dependency> <!-- 每一个驱动包以 dependency标签为父标签 --> <groupId>junit</groupId> <!-- 分组的名称,必须唯一 --> <artifactId>junit</artifactId> <!-- 驱动的名称,必须唯一 --> <version>4.11</version> <!-- 驱动的版本号 --> <scope>test</scope> <!-- 执行域 前期可以不需要 --> </dependency>
</dependencies>
每一个驱动包以 dependency标签为父标签 当出现点的行为(com.gxa),就是两个目录,甚至更多的目录
不是一个dependency就肯定对应唯一一个jar包,而是一个dependency至少对应一个jar包
中央仓库的加载流程
1.我们首先配置dependency标签,加入指定的驱动包。并手动import更新pom文件2.这时候,idea工具会自动检查本地的中央仓库是否存在此驱动3.如果不存在,则从全球中央仓库自动下载,并且根据组名、驱动名、版本号保存本地中央仓库4.这时候检查lib驱动库是否存在此驱动
maven项目,一样可以通过WEB-INF/lib目录进行加载驱动
什么叫做断点续传
可以随时暂停下载。可以随时根据暂停点继续开始下载
中央仓库中驱动版本的选择
RELEASE版本号中,如果出现RELEASE代表最终版,一般在实际开发中,我们都会选择RELEASE版本BETA这个版本是测试版RC这个版本也是测试版,也可以称呼为临时版目前版本还会出现没有标示的,这种版本也是稳定版如果驱动标注了特殊单词的,那么找寻RELEASE版本,如果没有,则找寻没有字母版本的
Spring驱动版本统一性
所有Spring驱动的版本必须统一,所以,我们都会自定义一个spring版本管理的字段参数properties
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <spring.version>4.3.16.RELEASE</spring.version> </properties>
什么是脚手架
因为java工程的环境配置非常的繁琐,所以企业级项目提出一种新的概念,提前搭建好一个基础的环境,方便每一次新项目开发的时候直接引入基础搭建环境,这样的基础环境叫做脚手架(骨骼)
springmvc的核心就是DispatcherServlet
org.springframework.web.servlet.DispatcherServlet
resources目录存放的是什么
resources目录存放的全部是项目中的资源文件和配置文件(通常存放的文件后缀名都是 .xml .json .properties .yml)
springmvc基本的访问流程
(url地址->web.xml->springmvc.xml->controller->requestmapping->return)1. 用户输入一个地址 http://localhost:8080/hello2. 此地址会被springmvc截获,取出端口之后的请求地址,也就是 /hello3. 然后通过web.xml关联到指定springmvc.xml配置文件中4. 再通过springmvc.xml中的 <context:component-scan base-package="com.gxa.j259.controller" /> 标记,检查哪些一个包是需要扫描的5. 检查这些package中的拥有 @RestController 和 @Controller 类头注解的java文件6. 然后在每一个这样的java文件中,匹配每一个方法头上的注解@RequestMapping("/hello") 里面的路径是否匹配7. 如果匹配,则调用对应的方法返回,如果都没有匹配则抛出404错误
HTTP错误码
404 找不到指定地址的网页内容或者后台资源
500 在web工程中,如果出现java语法错误,则会抛出500异常
405 未重写HTTPServlet中的对应do方法,导致用户访问时,直接抛出系统内核代码的异常
200 请求响应成功
302 缓存
HTTP Status 415 – Unsupported Media Type
这样错误代表前端没有使用json的头文件格式(contentType)上传
HTTP Status 400 – Bad Request
当发生400错误,可能是前端没有把json对象转换成字符串
HTTP Status 400 – Bad Request
当使用form表单数据提交时,如果后台强制要求传递指定的参数,但是前端没有传递,则会抛出400错误
HTTP Status 400 – Bad Request
当springmvc自动转换数据类型时,发生错误,也会抛出400错误
HTTP Status 405
后端没有重写对应的请求模式方法
什么是SpringMVC?
SpringMVC是基于JAVA的,实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将WEB层进行职责解耦,把复杂的WEB应用分成逻辑清晰的几步化,简化开发,减少出错,方便组内开发人员之间的配合。
简述下SpringMVC的运行流程?
用户发送请求至前端控制器(DispatcherServlet).
前端控制器(DispatcherServlet)收到请求后,调用处理器映射器(HandlerMapping)
处理器映射器(HandlerMapping)根据请求的URL找到具体的处理器(Handler),生成处理器对象与处理器拦截器(如果有则生成)一并返回给前端控制器(DispatcherServlet)。
前端控制器(DispatcherServlet)通过处理器适配器(HandlerAdapter)调用处理器(Handler)。
开始执行处理器(Handler),常说的后端控制器(Controller)。
后端控制器(Controller)处理完成后返回@Response对应的json对象
ModelAndView。针对曾经的转发和转向
处理器适配器(HandlerAdapter)将Controller执行结果ModelAndView返回给前端控制器(DispatcherServlet)。
前端控制器(DispatcherServlet)会将ModelAndView传给视图解析器(ViewReslover)。
解析器(ViewReslover)完成解析后返回具体View。
前端控制器(DispatcherServlet)对View进行渲染视图,也就是将数据填充进视图中。
最后,响应用户请求。
SpringMVC的优点。
他支持多种视图技术,而不仅仅局限于JSP、JSTL、EL还有支持普通的HTML。
和Spring框架继承。
清晰的角色分配:前端控制器,处理器映射器,处理器适配器,视图解析器。
支持多种请求资源的映射策略。
Spring的映射策略有哪些?
按Bean名称映射请求,这也是SpringMVC默认的映射策略,他是通过BeanNameUrlHandleMapping这个对象来达到目的的。
可以理解为键值对映射关系,请求的url看做键,接着由键找到对应的处理器。
按控制器名成员映射请求,他是根据WEB引用程序上下文中声明的控制器的类名称,自动生成映射,他是通过ControllerClassNameHandleMapping对象来达到目的的。
用定制的映射定义来映射请求,这需要我们通过SimpleUrlHandleMapping来做到这一点。
SpringMVC的主要组件?
前端控制器。
接收请求,相应结果,主要作用是降低了其他组件之间的耦合度。
处理器映射器。
根据请求的URL来查找处理器。
处理器适配器。
根据映射器找到的处理器去处理相关的处理器。
视图解析器。
转载 https://www.yuque.com/zhanghongneng/oqxh5a/uzgpdt