Java知识点
Java常用知识点
@controller和@restcontroller有什么区别
@RestController注解相当于 @ResponseBody + @Controller合在一起的作用
1) 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。 如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
hashmap和hashtable的区别
1.HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。
2.hashtable,类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
对外提供的接口不同
Hashtable比HashMap多提供了elments() 和contains() 两个方法。
arraylist和linkedlist的区别
1、数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。
2、效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
3、自由性不同
ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
4、主要控件开销不同
ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储节点信息以及节点指针。
autowired注解是干啥的
让spring完成bean自动装配的工作,Autowired默认是按照类去匹配,配合@Qualifier指定按照名称去装配bean,成员属性字段使用@Autowired无需字段的set方法。
@Autowired不是用于类的注解,而是用在:构造函数 setter方法 任意方法 字段。。总之各个地方都可以。
bean是否是线程安全的
union和union all的区别
union会删除重复记录,所有返回的行都是唯一的,并且采用默认排序;union all 不会删除重复记录,并且不重新排序
where和having的区别
where是一个约束声明,having是一个过滤声明
having 先分组后计算,where反之
having后面可以跟聚合函数
where不能使用聚合函数,having中可以使用聚合函数。where子句在聚合前先筛选记录,也就是说作用在group by子句和having子句前,而having子句在聚合后对组记录进行筛选。
左右链接的区别
建议使用左连接
left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录,右表不足的地方显示NULL。
right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录,左表不足的地方显示NULL。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
项目部署的流程
linux的常用命令 五个左右
linux常用命令
cd:切换目录
df:查看磁盘空间使用情况、剩余空间
rm:删除文件或目录
vim: 文本编辑
cat: 查看文件、合并文件
mv:移动文件、重命名
cp: 复制文件、目录
top:查看系统正在运行进程的相关信息
free: 查看系统内存使用情况
ioc是什么
ioc含义
aop的应用场景有哪些
aop应用场景
场景一: 记录日志
场景二: 监控方法运行时间 (监控性能)
场景三: 权限控制
场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )
场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )
说明:
jdk动态代理是接口的重写(适用于实现接口的类,spring aop的默认实现)
cglib动态代理是类的继承
提示:aop本质是动态对方法增强,避免代码入侵,优雅的实现横向扩展,是对oop的补充
索引用多了有啥坏处
#和$的区别
#是一个占位符,$是拼接符。
#的方式引用参数,mybatis会先对sql语句进行预编译,然后再引用值,能够有效防止sql注入,提高安全性。$的方式引用参数,sql语句不进行预编译。
什么是GC
说一下java基本数据类型
Java的基本数据类型有8种,分别是:byte(位)、short(短整数)、int(整数)、long(长整数)、float(单精度)、double(双精度)、char(字符)和boolean(布尔值)。
rabbitmq的特点?
消息队列的优缺点
消息队列优缺点
优点:解耦,异步,削峰
缺点:
分析:一个使用了MQ的项目,如果连这个问题都没有考虑过,就把MQ引进去了,那就给自己的项目带来了风险。我们引入一个技术,要对这个技术的弊端有充分的认识,才能做好预防。要记住,不要给公司挖坑!
回答:回答也很容易,从以下两个个角度来答
- 系统可用性降低:你想啊,本来其他系统只要运行好好的,那你的系统就是正常的。现在你非要加个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性降低
- 系统复杂性增加:要多考虑很多方面的问题,比如一致性问题、如何保证消息不被重复消费,如何保证保证消息可靠传输。因此,需要考虑的东西更多,系统复杂性增大。
springMVC的执行过程能说下吗?
参考:https://blog.csdn.net/faramita_of_mine/article/details/123909578
执行过程
面试:
1、用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获(捕获);
2、DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;(查找handler);
3、 DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller), Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象(执行handler);
4、DispatcherServlet 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver) (选择ViewResolver);
5、通过ViewResolver 结合Model和View,来渲染视图,DispatcherServlet 将渲染结果返回给客户端。(渲染返回);
快速记忆技巧:
核心控制器捕获请求、查找Handler、执行Handler、选择ViewResolver,通过ViewResolver渲染视图并返回;
dubbo和cloud有什么区别
对于有八百万的数据的表,怎么写sql执行更快
参考:https://blog.csdn.net/yi_zongjishi/article/details/124648857
如何解决POST请求中文乱码问题,GET的又如何处理呢
怎么样把ModelMap里面的数据放入Session里面
参考:springMVC面试题
可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代
一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。
mybatis-plus有了解过吗,在什么场景下使用它
mp阐释
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
threadlocal的使用原理(简单说明即可)
创建线程的几种方式
concurrenthashmap和hashmap有什么区别
(1)HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。
(2)ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在,那么在插入元素的时候就需要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行插入,而且这里还需要获取segment锁。
(3)ConcurrentHashMap让锁的粒度更精细一些,并发性能更好。
堆 栈 池的区别
为什么使用异常
InnoDB与MyISAM的区别
1、innodb支持事务,而myisam不支持事务。
2、innodb支持外键,而myisam不支持外键。
3、innodb是行锁,而myisam是表锁(每次更新增加删除都会锁住表)。
4、innodb和myisam的索引都是基于b+树,但他们具体实现不一样,innodb的b+树的叶子节点是存放数据的,myisam的b+树的叶子节点是存放指针的。
5、innodb是聚簇索引,必须要有主键,一定会基于主键查询,但是辅助索引就会查询两次,myisam是非聚簇索引,索引和数据是分离的,索引里保存的是数据地址的指针,主键索引和辅助索引是分开的。
6、innodb不存储表的行数,所以select count( * )的时候会全表查询,而myisam会存放表的行数,select count(*)的时候会查的很快。
总结:mysql默认使用innodb,如果要用事务和外键就使用innodb,如果这张表只用来查询,可以用myisam。如果更新删除增加频繁就使用innodb。
jvm 调优, 常用gc 收集器,常用gc算法(这三种常问)
强弱引用什么的
https://baijiahao.baidu.com/s?id=1670639651930088224&wfr=spider&for=pc
spring的AOP
spring的生命周期
spring的事物实现原理
mysql的优化
mysql为什么使用b+树
redis的一些使用场景
常用的设计模式
额外
robbin负债均衡算法有哪些 原理是啥
zk和redis区别 zk里面的节点
还有一个线程池延时队列原理
spring Bean的注入过程
set注入、构造器注入、实例工厂注入
java8的新特性
stream流操作对比foreach和基本的for循环
Synchronized和Lock锁底层实现原理
sync是JVM层面,Lock是jdk层面
CAS简单介绍下
比较并交换 compare and set
线程池说一下
三大方法 七大参数 四种拒绝策略 线程数设置 工作原理
拒绝策略jdk
- 直接丢弃
- 抛异常
- 由调用者在调用者线程执行
- 丢弃阻塞队列里面等待时间最长的线程
JVM调优步骤
线上cpu100%,应该怎么排查
mysql怎么优化查询
explain执行计划,查看各方面数据,是否用索引
mysql 索引有几种类型
索引类型
myisam和innodb区别
my是非聚簇索引,索引直接指向数据项。innodb是追溯索引,索引指向主键索引
innodb支持redo log日志,支持事务,支持行锁。myisam只支持表锁
(最多可以建16个索引)
redis和memcache选型对比
redis支持的数据类型丰富,5种类型3中特殊类型。memcache只有一种string
redis为什么这么快
执行单线程、非阻塞IO(NIO)多路复用,严格意义不算单线程
处理网络请求过程是单线程,其他模块是多线程
redis集群
三种架构:主从、哨兵、集群
主备同步,启动数据初始化,rewrite等等
redis持久化
rdb快照,每隔一段时间把内存快照写入硬盘
aof,每行命令写入文件
应急情况先用rdb恢复
缓存穿透和缓存击穿有没有了解
穿透:查询时缓存没有命中缓存层,直接打到数据库
击穿:一直访问热点key,突然失效,瞬间的压力击垮数据库
spring优点是什么
ioc,aop,控制反转,依赖注入,
了解哪些设计模式,除了单例和工厂
如何保证幂等
分布式锁怎么实现
主要是控制平时线程的一个共享资源的修改,使用redis setnx或者redission