一、JAVA基础
1、HashMap、HashTable、LinkedHashMap、TreeMap的区别
HashMap : 非线程安全,允许一条Key为null,允许多条value为null,无序,线程安全可使用 Collections的synchronized或者用concurrentHashMap
HashMap原理:通过哈希表,实质就是数组+链表,存储位置通过键值对的key的hash值对数组长度取模获得,取模结果一致的,即通过next指向
HashTable : 线程安全,不允许任何为null
LinkedHashMap:有序的
TreeMap:有序的,默认按照key值升序,线程安全
2、Collections
二、数据库
1、数据库优化
1.1数据库分库分表
1.1.1 垂直分库 多个数据库服务器,按照业务逻辑,分成不同的模块
1.1.2 垂直分表 大表拆成小表
1.1.3 水平分表 不同数据行存到不同表中,但仍在同一个数据库,降低单表数据量,优化查询
1.2跨库join
全局表、字段冗余、数据同步、系统层组装、简单的列表查询情况
2、redis
2.1.1 数据类型 String 自增 INCR 增加指定量 INCRBY 自减 DECR 减少指定量 DECRBY
hash HMSET 新增 HGETALL 遍历 HSET 更改
list 底层为链表 LPUSH RPUSH LRANGE
set sadd smembers遍历 sismember是否包含 sunion 求并集
sorted set zadd zrange遍历
2.1.2 持久化方式
RDB(Redis DataBase) 存储的数据生成快照存储到介质中
AOF(Append Only File) 记录redis执行过的指令,该入口在redis.conf中配置
2.1.3 事务指令 MULTI 组装 EXEC 执行 DISCARD取消 WATCH 监控
2.1.4 主从同步原理
3、oracle
3.1 分页
直接对rownum进行判断,只能从rownum=1开始,将rownum建成新的列,从而取任意行
不能对ROWNUM使用>(大于1的数值)、>=(大于或等于1的数值)、=(大于或等于1的数值),否则无结果
所以直接用只能从1开始
rownum >10 没有记录,因为第一条不满足去掉的话,第二条的rownum又成了1,所以永远没有满足条件的记录。
select * from student where rownum>=1;
--如果想要用rownum不从1开始,需按下面方法使用
select a1.* from (select student.*,rownum rn from student) a1 where rn >5;
--分页查询一
select * from (select a1.*,rownum rn from (select * from student) a1 where rownum <=5) where rn>=2;
--分页查询二
select a1.* from (select student.*,rownum rn from student where rownum <=5) a1 where rn >=3;
--分页查询三
select a1.* from (select student.*,rownum rn from student) a1 where rn between 3 and 5;
3.2 递归
4、mysql
4.1分页
4.2递归
5、sqlserver
5.1 分页
5.2 递归
三、JVM
1、执行程序的过程
加载.class文件、管理并分配内存、执行垃圾收集
2、内存分区
https://www.cnblogs.com/dolphin0520/p/3613043.html
四、框架
1、IOC和AOP
IOC:依赖注入的思想是通过反射机制来实现的,在实例化一个类时,通过反射调用类中的set方法将事先保存在HashMap中的类属性注入到类中。传统的对象创建方式都是由调用者来
创建被调用者的实例,而spring中由Spring来完成,然后注入调用者,即所谓的依赖注入或者控制反转,此举降低了组件间的耦合,更方便管理对象。
AOP:OOP的特点是封装继承和多态,是一种纵向的模式,AOP是对OOP的一种补充,面向切面,即横向。实现AOP的技术,主要分为两大类,一类是动态代理技术,二是采用静态织入
的方式,Spring实现AOP是采用JDK动态代理和CGLIB代理,JDK动态代理是创建一个接口的实现类来完成对目标对象的代理,核心的两个类是InvocationHandler和proxy.CGLIB代理原理类似,
但是生成的代理对象是目标对象的扩展类。
2、SpringMVC工作原理
用户发送请求到前端控制器(dispatchservlet),前端控制器请求处理映射器(HandlerMapping)去查找处理器(handler),找到以后返回执行链(HandlerExecutionChain)给前端控制器,
前端调用处理适配器(HandlerAdapter)去执行处理器(Handler),处理完成后,返回ModelAndView,前端控制器请求视图解析器(viewResolver)解析视图,返回view,前端控制器进行渲染并向
用户响应结果。
springmvc是框架,是项目中实际运行的代码,而springboot只是辅助工具,减少项目搭建的难度。
3、hibernate工作原理
核心接口: Configuration接口:负责配置并启动Hibernate
SessionFactory接口:负责初始化hibernate
Session接口: 负责持久化对象的CRUD操作
Transaction接口: 负责事务
Query接口和Criteria接口:负责执行各种数据库操作
运行过程:1.通过Configuration().configure(),读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<MappingResource=".../.hbm.xml"/>读取并解析映射信息
3.通过config.buildSessionFactory();创建sessionfactory
4.session.openSession()
5.session.beginTransaction()打开事务
6.persistent operate 持久化操作
7.session.getTransaction().commit()提交事务
8.关闭session,关闭sessionfactory
4.mybatis工作原理
核心接口:
1、Configuration : MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
2、SqlSession: 表示和数据库交互是的会话,完成必要的数据库增删改查功能
3、Executor: myBatis执行器,是myBatis调度的核心,负责SQL语句的生成和查询缓存的维护
4、StatementHandler: 封装了JDBC Statement操作,负责对JDBC Statement的操作,如设置参数等
5、ParameterHandler: 负责对用户传递的参数转换成JDBC Statement所对应的数据类型
6、ResultSetHandler: 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
7、TypeHandler: 负责java数据类型和JDBC数据类型的映射和相互转换
8、MappedStatement: mAPPEDsTATEMENT维护一条<select|update|delete|insert>节点的封装
9、SqlSource: 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
10、BoundSql :表示动态生成的SQL语句以及相应的参数信息
五、分布式
1、DUBBO
原文地址:https://www.cnblogs.com/twicesana/p/9944742.html