学习心得-综合(后续修改更新)


一、JVM结构和GC

JVM结构:类装载器、执行引擎、内存区
GC:垃圾回收,第一,GC回收的只是未被引用的对象的存储空间,而不是对象本身;第二,GC有两种回收方法,引用计数法和可达性分析算法。引用计数法就是在对象内添加一个引用计数器,如果对象被引用,那就计数器加一。
但引用计数法有缺漏,比如我有两个对象a,b。两个对象之间相互引用,但是除此之外,没有和其他对象进行任何引用,那么这两个对象其实就是废对象,需要被回收的,但是引用计数法检测不出来,所以就有可达性分析算法,根据根集对象搜索不可达的对象,进行垃圾回收。

二、spring

1.spring

(spring->spring framework框架。包含两个核心部分:IOC控制反转和AOP面向切面编程)

  1. spring通过IOC容器来管理所有Java对象的实例化和初始化,控制对象间的依赖关系。
  2. 提前通过注释或者配置的方法来在xml中对Java对象进行定义,IOC容器会根据对象的定义把这些对象spring bean创建管理起来,如果使用者想使用某些bean,则需要通过IOC获取applicationcontext.getbean(),无需再次创建。但是一开始的使用者是主动调用创建,到spring中变成了被动接受IOC的创建,主从位置的改变被称为控制反转。
  3. IOC的存在是为了减少系统耦合度过高的问题,方便维护。通过工厂模式、Java反射机制、xml解析等技术进行降低耦合的操作。–在xml配置文件中对对象及各对象间的依赖关系进行配置,IOC试做工厂springbean作为产品,在容器启动时会加载和解析这些文件,并且得到提前设置好的依赖关系,IOC利用Java反射机制生成类名相同的对象,springbean并且将依赖关系注入到对象中。后续出现需要维护和修改时,只需要修改配置文件中的依赖关系和对象即可
  4. spring框架内的两种IOC容器:beanfactory和applicationcontext,beanfactory属于spring内部借口,一般不提供开发人员使用。applicationcontext含有两个常用接口classpathxmlapplicationcontext加载classpath路径下xml配置文件并完成applicationcontext实例化工作;filesystemxmlallicationcontext加载指定文件系统路径下的xml配置文件并完成实例化。
  5. spring属性注入方法:
    构造函数注入(有参,通过配置文件的bean里对函数内属性进行赋值)、注解注入、setter注入(无参,通过Java反射机制调用bean的set方法进行属性注入)。
  6. springbean的生命周期:将bean进行实例化和属性注入,引入bean.id和工厂化实例等处理,当bean可以被调用使用时,放入缓存池中,开发调用时则从缓存池中调用,使用完后进行销毁。
  7. requestmapping作用:注解,用来标识http请求地址和controller类的方法间的映射。

2.springMVC

spring MVC = model view control

控制层负责前台与后台的交互,数据模型层封装用户的输入/输出数据,视图层选择恰当的视图来显示最终的执行结果,这样的层次分明的软件开发和处理流程被称为 MVC 模式。

  1. model处理接受请求,view对处理结果进行视图渲染,control等同于servlet,用来控制前后台的交互以及请求调用处理。
    浏览器+实例化处理器(jsp+Javabean+servlet)+数据库
  2. MVC模式优点:松耦合、高可重用性、灵活度高、利于管理维护 缺点:原理复杂、视图对模型数据的访问效率太低,不适于小型项目,建立模型耗费代价太大,得不尝失。
  3. spring MVC优点:model view control 角色定位清晰、通过xml灵活配置文件、与spring框架无缝集成、提供了大量控制器借口和实现类,开发者可以自己实现控制器接口、真正做到与view层的实现无关

3.springboot

springboot :无需xml配置文件,内置配置文件和相关包,无需另附加载。
springboot默认两种全局配置文件:application.properties application.yml(YAML语言文件)
YAML一种人类可读数据序列化语言。优点:相对于其他的配置文件,YAML配置更加结构化、简洁明了,配置有序。但是不支持@propertysource注解导入自定义的yaml文件。


三、Mybatis

mybatis 相对于hibernate来说,封装性要低,但是性能优秀简洁,灵活,适用性强。和jdbc比,代码量减少了百分之五十,而且满足高并发和高响应的要求。

  1. mybatis和hibernate区别:
    两者都是当前主流的对象关系映射ORM框架,在sql优化,开发和缓存机制方面会有区别。
  2. mybatis三要素:核心接口和类、核心配置文件mybatis-config.xml、SQL映射文件mapper.xml
  3. #{}和¥{}区别
    #{}占位符赋值:不存在SQL注入情况,无需手动添加单引号,直接在占位符位置赋值需要参数
    ¥{}字符串拼接:存在SQL注入情况,需要手动拼接单引号,

四、.Tomcat

Tomcat是一个jsp/servlet容器。
分为独立servlet容器、进程内、进程外三种servlet工作模式;Tomcat则会作为应用程序的服务器或者是独立服务器来使用。
Tomcat在idea中可以把web项目放在webapps下,Tomcat会自动部署配置;eclipse中可以在server配置文件中配置context节点,设置相关属性即可;
通过Catalina来进行配置,进入localhost文件下创建xml文件,xml文件的名字就是站点名字。

  1. Tomcat的请求完整流程:首先请求被发送到本地8080端口,再传递到服务器进行管理操作,再将获得的请求递交到Tomcat本身附带虚拟主机host中,host查询请求对应context处理,映射对象到servlet中,再构造函数httpservletrequest和httpservletresponse调用参数回去,从servlet一路原路返回去。
  2. Tomcat如何创建servlet类实例的?
    当容器启动时,会读取在webAPP下所有web应用的web.xml文件,然后对文件进行解析,并读取servlet注册信息。然后对每个应用中注册的servlet类进行加载,反射方式完成实例化。

五、Nginx

主要功能:就是代理控制、负载均衡、动静分离。


六、Redis

五大数据结构:
String:Redis最基本的数据类型,一个键对应一个值,一个键值最大存储512MB
set:是String字符串类型的无序集合,也不可重复
zset:是String类型的有序集合,也不可重复。有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序
hash:hash是一个键值对的集合,是一个String类型的field和value的映射表,适合用于存储对象
list:是redis的简单的字符串列表,按插入顺序排序。

Redis的持久化机制、同步机制,一个字符串类型的值能存储最大容量是多少?(512)

  1. Redis的主从备份:在Redis的切换场景中,没有绝对的主从,只有初始化的主从,当主down下去的时候,从就变成了主。
  2. 主从备份的操作:在服务上修改redis.conf加入slaveof 127.0.0.1 6379,设置成功后,会进行主服务的set后,在从服务进行get key。但如果主服务宕机,则从服务也无法继续进行。

七、事务隔离级别

事务隔离级别:
@transactional-uncommited读取未提交数据,会出现脏读不可重复读;@transactional-commited读取已提交数据,不可重复读和幻读;@transactional-repeatable-read可重复读,会出现幻读;
@transactional-serializable串行化;

mysql默认事务隔离为可重复读transactional-repeatable-read;SqlServer默认为读取已提交数据transactional-committed


八、hashmap和hashtable

hashmap、hashtable 底层原理:

  1. hashmap本质是数组和链表的集合方式对数据进行存储,在jdk1.8后运用了高位hash算法,更改为数组+单链表+红黑树的形式,链表元素超过8时更改为红黑树。当hashmap的表进行扩张时,原本表内的数据所在位置会保持不变或者呈2的幂次进行移动。
  2. hashmap以key-value模式进行数据查找和插入,实现快速查找,1.8后快速存储。可以存储null键值或者value值。但是线程不安全,可能会导致hash冲突的发生。
  3. hash冲突:hash函数产生的hash值是有限的,当数据比较多的时候,可能会导致hash函数处理后会有不同的数据对应相同的索引值,就会导致hash冲突。
  4. hashtable和hashmap类似,最大的区别就是hashtable的线程安全,操作由锁保护。主要方法有get,put,remove,rehash等,与hashmap相同。

九、stringbuild和stringbuffer

  1. 线程:两者都是对字符串进行修改的,但是stringbuilder的方法不是线程安全的,无法进行同步访问。
  2. 缓冲区:stringbuffer每次获取toString都会直接使用缓存区的toStringCache的值构造一个字符串,而stringbuilder则是需要复制一次字符数组,再构造一个字符串。
  3. 相对于stringbuffer,stringbuilder的速度更快,所以一般情况在不要求线程安全的情况下,使用stringbuilder,或者是单线程下使用stringbuilder。

十、concurrenthashmap和copyonwritearraylist

map接口的两个实现是concurrenthashmapconcurrentskiplistmap,两者的key和value值都不可以为空,否则抛出异常。两者主要区别在concurrenthashmap的key是无序的,但是concurrentskiplistmap的key是有序的。

  1. concurrenthashmap和hashmap类似,在1.8之前是数组+单链表的形式,采用分段锁机制来降低阻塞,提高并发性;1.8是数组+单链表+红黑树,取消了分段锁机制,采用了CAS+sychronized方式改进并发。
  2. copyonwritearraylist是线程安全的ArrayList,所有copyonwritearraylist的读操作都是基于array成员变量指定的内部数组来进行的,因为读操作在内部数组的快照上工作,所以多个迭代器可以同时遍历而不会相互阻塞,非同步。。
    写操作是同步的,他们在备份数组的副本上工作,当写操作完成后,后背阵列将被替换成复制的阵列,并释放锁定。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值