java面试过程

202108最新

=================1=================
1.redis击穿,穿透,雪崩
击穿:单个key在缓存中查不到(且发生高并发)
	解决:设置value永不过期;DCL(双重检查锁机制);使用互斥锁(mutex key)
击透:恶意频繁查询缓存(并且数据库)中不存在的数据
  解决:将击透的key缓存起来,但是时间不能太长,下次进来是直接返回不存在;或使用布隆过滤器
雪崩:多个key查询并且出现高并发(key同时失效或者redis自己崩了)
  解决:做二级缓存,或者双缓存策略。A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。
2.各种情况下事务是否回滚
总结:导致事务不回滚的两个原因,一是Service类内部方法调用,二是try...catch异常。
https://www.cnblogs.com/wangdaqian/p/6929843.html
声明式事务和编程式事务
3.查询某个字段的重复数据
select count(字段) as a group by 字段 having a>1
4.数量,高并发情况下,放在redis中最好
5.联合索引的最左原则
6.字符串涉及到final修饰,再用==比较
7.mybatis的#{}和${}区别
8.静态类(工具类)中如何使用非静态类的非静态方法或者属性(config类中的属性)
9.redis同时set同一个key是啥结果
watch+MULTI : 监控+事务,按照先后顺序被放进一个队列当中
WATCH lock lock_times
MULTI
10.为什么事务不能在contrller控制:事务回滚相关,需要抛异常,而controller就有try catch了。
11.各个情况下的事务是不是同一个
例子:同一个类中,一个方法(无@Trasactional注解)调用另外一个有事务的方法:失效
百度到的Spring事务回滚规则:
  指示spring事务管理器回滚一个事务的推荐方法是在当前事务的上下文内抛出异常。spring事务管理器会捕捉任何未处理的异常,然后依据规则决定是否回滚抛出异常的事务。
  默认配置下,spring只有在抛出的异常为运行时unchecked异常时才回滚该事务,也就是抛出的异常为RuntimeException的子类(Errors也会导致事务回滚),而抛出checked异常则不会导致事务回滚。
可以明确的配置在抛出那些异常时回滚事务,包括checked异常。也可以明确定义那些异常抛出时不回滚事务。
  还可以编程性的通过setRollbackOnly()方法来指示一个事务必须回滚,在调用完setRollbackOnly()后你所能执行的唯一操作就是回滚。
12.order by是先排序还是先查询?加了order by之后sql执行就变慢很多,为什么,怎么解决。
执行顺序:from,where,group by,select,order by
慢的原因:复合索引没起排序作用,索引中各字段 asc 存储, order by 里 desc 和 asc(默认是 asc) 混用
解决order by加了之后变慢:
   order by 各个字段换为一致的 desc (最好保持一致,都是desc或者asc)
  以下是优化Order By的思路,仅供参考:
  1)ORDER BY的字段改到一种表、不要跨表(设计表结构时需注意这一点)
  2)OEDER BY字段建索引、多个字段时建联合索引(联合索引的字段顺序要与ORDER BY中的字段顺序一致)
  3)ORDER BY中字段中联合索引的所有字段DESC或ASC要统一,否则索引不起作用
  4)不要对TEXT字段或者CLOB字段进行排序

=================2=================
1.springboot常用注解
@SpringBootApplication,
@ImportAutoConfiguration。
@EnableAutoConfiguration(被第一个替代了)
@Configuration
@Scope....
2.spring boot自动注入原理
3.自定义注入(autowired2)注解有什么思路
简单点说:使用反射,遍历类中的属性,找出有没有自定义的autowired2注解,如果有,则给该属性赋值(同样是反射方式),先byType后byName啥的都行,去创建对象-->初始化-->代理-->Spring Bean
4.问了3后,紧接着问什么时候用到反射?不能回答框架中的

5.什么时候用到线程以及线程安全问题如何解决?
6.网非(Spring cloud Netflix)组件有哪些?五大组件
7.网关的作用?分发(请求),鉴权,限流
8.对接(公网)接口时想过安全问题吗?(保证数据安全,不是被篡改的数据)
  sign(双方提供一个双方公认的值加在sign里),
  加密
9.sql优化以及索引失效
下文中差不多提到了
10.springboot取配置文件中的值,除了@value,还有什么?一共四种
@Value太麻烦,@ConfigurationProperties
@PropertySource
https://blog.csdn.net/weixin_45631876/article/details/102644421
11.依赖注入用到了啥设计模式,好像是动态代理
  了解了一下Spring Bean创建的生命周期,确实是

================3====================
1.泛型的作用?约定类型和速率快
2.解释一下和熔断?
3.springboot搭建线程池
4.v-model怎么替换成其他指令?组件之间如何传参?
5.es6,新特性
6.jdk8新特性
7.怎么看九点半到十点的服务器日志?
8.innodb引擎的特点:
  事务,行级锁定。。。
  参考博客:innodb特点和调优
  https://www.cnblogs.com/Confusedren/p/11150258.html
9.Oracle和mysql区别?
10.联合索引失效问题
11.jvm调优

12.调用接口的技术
webservice和HttpClient
13.如何分表,分库?
  日期,字段值等
 14.spring boot 的静态类(工具类)中获取配置文件的值?
 使用第2、3个,
 @Configuration : 声明是配置类
@PropertySource("classpath:application-dev.properties")
@ConfigurationProperties(prefix = "font")

=======================4========================
1.mysql事务的实现原理:
引入了redo log来记录已成功提交事务的修改信息,
并且会把redo log持久化到磁盘,系统重启之后在读取redo log恢复最新数据。
结论:
redo log是用来恢复数据的 用于保障,已提交事务的持久化特性
undo log是用来回滚数据的 用于保障 未提交事务的原子性
2.事务的隔离级别有哪些?怎么实现的?
3.事务隔离级别,不是解决什么问题
4.线程池的几种拒绝方式
5.openfeign的几种负载均衡方式?好像是8种
6.docker映射端口,部署命令?
7.mysql和oracle的默认隔离级别
8.云原生:docker和k8s相关的
9.Map的put方法,jdk8之前的put,和jdk8的put区别:
前插入头部,后在尾部插入

==============================
1.索引类型,用途
2.redis类型和使用场景
3.最有成就的事情?缓存+mysql处理了高性能查询、处理热点数据
4.数据库100年后怎么处理的
5.jdk8新特性sream,lambda常用api(和ES6对数组的操作一起问)
list.stream().filter等:map,collet....
6.如何保证rabbitmq消息不丢?
第一种:消息持久化
RabbitMQ 的消息默认存放在内存上面,如果不特别声明设置,消息不会持久化保存到硬盘上面的,如果节点重启或者意外crash掉,消息就会丢失。
所以就要对消息进行持久化处理。如何持久化,下面具体说明下:
要想做到消息持久化,必须满足以下三个条件,缺一不可。
1) Exchange 设置持久化 durable=true
2)Queue 设置持久化 durable=true
3)Message持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息
https://www.cnblogs.com/flyrock/p/8859203.html
=============================
1.类加载过程
2.JAVA内存模型
3.垃圾回收算法 如何确定对象要被回收
4.自定义注解以及用途
5.hashtable,map,concurrent的区别
6.java堆设置:年轻代50M?
堆设置
-Xms:初始堆大小
-Xmx:最大堆大小
-XX:NewSize=n:设置年轻代大小
7.git分支的作用?为什么使用分支?
8.docker映射端口?
查看:
docker port CONTAINER_ID
映射:-p ip:端口:映射端口
docker run -it -d -p 127.0.0.1:5000:5000 docker.io/centos:latest /bin/bash
9.docker的容器和镜像的区别?
docker的整个生命周期有三部分组成:镜像(image)+容器(container)+仓库(repository);
镜像==》创建容器==》docker利用容器来运行应用==》
10.linux命令:
进程相关:查看进程,杀死进程
ps--查看正在运行中的进程
ps -ef --查看所有进程的详细信息
ps -ef|grep java 搜索java相关的进程
kill -9 进程号 -9代表强制停止并杀死进程
文件相关:查看,搜索,创建,删除
11.servlet有过滤器,和Spring的拦截器有什么区别?
12.mysql的innnodb和myisam的区别?
13.热点数据的定义?怎么判断是不是热点数据?访问次数保存在哪?
14.mybatis和mybatis plus的区别?
15.mybatis的动态sql有哪些?复杂的sql也是使用的注解吗?
16.mybatis执行过程?
17.解释一下IOC和AOP?
18.nginx配置文件中配置?
19.redis的集中类型?
20.基本数据类型以及占的字节?
21.你对面向对象特性特性的理解?封装、继承和多态
22.Spring注入的方式有哪些?
构造方法注入,setter注入,基于注解的注入(@Autowired、@Resource)
23.如何把ArrayList等集合转为线程安全的?
24.类的加载过程?


![在这里插入图片描述](https://img-blog.csdnimg.cn/45449ad5c57242f0b862f68df541b20a.png)

第一家公司

1.反射是什么?你在实际项目中哪里使用的反射?
(
JDBC...
用 IoC 来注入和组装 bean
动态代理、面向切面、bean 对象中的方法替换与增强,也使用了反射
定义的注解,也是通过反射查找
)
2.数据库连表操作会吧?
3.docker会打包项目吗?(各个微服务打包到docker容器内)
4.使用过redis做过缓存吗?怎么存储的?
   mongoDB了解多少?会写查询语句吗?(find出 name是xx,age>18的user的前四条记录)
5.做项目,首先需要考虑的三大问题:事务、异常、日志。任意选两个来说说(如何做的)。
6.rabbitMQ在微服务项目中的问题:如果里面的消息没有被消费,而rabbitMQ服务宕机了,该如何解决???
我提了一下集群,面试官说只有一个rabbitMQ服务。
(没回答上来,面试官又说了,听过ACK和持久化没?)
[持久化]:https://www.cnblogs.com/bigberg/p/8195622.html
![持久化总结](https://img-blog.csdnimg.cn/20200511083654731.png)
持久化需要持久化:队列和消息两个成分
ACK消息确认机制:https://www.cnblogs.com/biehongli/p/11789098.html
7.服务降级和熔断的区别?项目中如何实现的?
8.微服务网关问题:文件上传图片后,查看图片的请求需不需要经过网关?或者说我网关拦截所有请求,图片路径怎么处理放行?
9.文件上传怎么实现的?不用说前端的,说说用到了什么类?需要配置那些(文件大小等如何配置)?
10.controller默认是单例还是多例?(单例)
   此外,说说登录这个业务,能不能是单例的?为什么(不能)?
11.linux中的网络相关的命令有哪些?(ip、端口。。。)
12.最后,说说你在项目于中遇到的问题?怎么解决的?

第二家公司

1.使用过mybatis,那你知道动态sql的作用吗?
条件判断、内容处理、循环处理

在这里插入图片描述

2.mysql如何去重?
distinct,group by
3.spring IOC和AOP的个人理解?
4.redis主从复制怎么实现的?
相当于redis集群怎么实现。。。
建议先试试怎么实现redis集群。
为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。
参考博客:https://www.cnblogs.com/daofaziran/p/10978628.html
小结主从复制策略:
Redis主从同步策略 : 增量同步-->全量同步
主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
5.rabbitMQ等是什么,有什么作用?
即消息中间件在项目中的作用?
异步、解耦、流量削峰
6.说说spring cloud有哪些组件及其作用(定位)?
我只说了最原始的netflix的一套,其实也能满足答案了。
7.说说spring MVC的常用注解。又问,controller中的方法如果想拦截get请求应该怎么做?

第三家

1.常用的数据库有哪些?说说mysql和oracle哪些不同(函数或者语法)
(oracle在前,mysql在后)
部分函数不同:INSTR等于mysql的locate,SUBSTR和substring,length和char_length(),nvl(u.email_address, 10)和ISNULL(u.email_address, 10),DECODE(mysql无此函数,使用case when代替),TO_CHAR和date_format(或者time_format),to_date和STR_TO_DATE,
sql语法不同:
2. 存储过程了解吗?oracle和mysql的存储过程怎么写?
3. mysql如何创建索引?(INDEX 关键字)
4. redis用过吗?项目中用来做什么的?(缓存)
5. 说说你常用的框架?
6. mybatis是不是自己写的还是手动生成的mapper文件?
7. mybatis的动态sql常用标签(foreach,where等等)
8. springboot的配置文件有哪些?
(其实就是问你application.yml文件或者...不是问自动配置)
9.spring boot常用配置:yml常用配置
10.spring boot 常用注解
11.说说spring cloud各个组件及其简单说明(作用)?
12.vue了解过,你了解过vueX吗?
13.说说vue常用的指令:v-for,v-if,v-on,及其作用

第四家

1.canal监听数据库的作用?(监听增删改--》更新redis缓存。)以及如何实现?
2.postgre支持增删改吗?(update,insert,delete)能!
3.nginx如何限流?配置文件增加两行代码即可,参考我曾经的博客
4.( 系统管理:角色管理、权限管理、用户管理 )怎么设计的表?
5.TK mybatis会影响数据库事务吗?(个人认为直接在service层控制不好吗?)
6.其他的主要问项目相关问题。。。什么功能如何实现,需要用到的表的设计,项目支持的最大并发是多少?等。。

2021面试

索引失效:
1.条件中用or(使用or,又想索引生效,只能将or条件中的每个列都加上索引)
2.like的模糊查询以%开头,索引失效(%在后边不会)
3.都是and连接的条件,索引要写在最前面(多个索引必须连续写在前面不能断),否则就索引失效
4.不要在索引上做任何操作(计算、函数、自动/手动类型转换),不然会导致索引失效而转向全表扫描
5.索引列使用了<> 或者 !=,导致失效(=可以)


集合:List(ArrayList,LinkedList,Vector),Set(HashSet,TreeSet),Map(HashMap,TreeMap),Hashtable
二叉树求两节点间最大距离(编程)
二分查找和各个排序的时间复杂度

sql优化了解哪些?sql如何调试(比如一个select语句如何进行一步一步调试)
1.不要让索引失效
2.连表查询速度慢可以考虑:把where的条件 写到 连表on后面的条件
3.* 舍弃
4.记录多的作为主表
5.exsits代替in(in 替代 or)


在工作中让你觉得最有成就感的?
每天(或者说是每段时间)的工作流程?(做一个任务的过程)

Spring AOP理解运用?
理解:将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,
便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性
应用:Aop与缓存  Aop与日志

spring的controller默认是单例还是多例(登录不能使用单例:比如:登录操作很耗时间,另一个登录请求又过来就会卡住。已测试)
静态方法会不会被继承?私有的也无法被继承
feign和openfeign?
Feign和OpenFeign作用一样,都是进行远程调用的组件
区别:
feign: Restful的HTTP服务客户端,Feign内置了Ribbon()
OpenFeign:在feign的基础上 还 支持@RequestMapping("/demo/test")这种注解
	     如--@FeignClient("stores")+@RequestMapping(method = RequestMethod.GET, value = "/stores")
	     这样方便写controller接口,照着对应方法实现,在写调用的方法时候 只需要写定义即可。


ribbon负载均衡的算法有哪些?
1.RoundRobinRule 轮询
2.RandomRule 随机
3.RetryRule 在指定时间内尝试重试(轮询策略)
4.BestAvailableRule 选择并发量最小的服务
5.WeightedResponseTimeRule 权重策略(给每一个服务一个权重,响应时间越长,权重越小)。选权重最大的
6.AvailabilityFilteringRule 过滤掉 打开熔断的服务 或者 是高并发连接数量 的服务


JWT:token存放多久?有设置刷新时间吗(例子:如果用户填写表单,长时间未关闭,token过期了。点击里面的按钮时,怎么处理)?
redis除了存放token外,还有其他作用吗?(热点数据,做缓存,hash存储)
redis怎么保持数据一致性?(这里问的是保持与mysql中的数据如何保持一致,并非redis的持久化机制(RDB,AOF))

cloud的五大组件?
mybatis的结构和流程?
mybatis plus的方法是针对单表还是多表?单表,多表需要自己写sql
写一个springboot 做项目时 项目的架构(层次)?

fastDFS的两大核心:
Tracker: 跟踪器Tracker负责管理所有的Storage和group,每个Storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息
Storage:  存储节点  采用分卷[Volume](或分组[group])的组织方式,存储系统由一个或多个组组成,组与组之间的文件是相互独立的

linux常用命令:网络相关(curl等),文件相关(增删改查文件),docker/podman相关命令

sql优化部分:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值