threadlcaol(线程变量副本)
synchrozed 实现内存共 享,threadLocal为每个喜爱能成维护一个本地变量。
采用空间换取时间,用于线程间的数据格林,为ieiyge使用该变量的线程听一个副本,每个线程都可以独立的改变自己的副本,而不会和其他象征的冲突。
TheadLocal 类中维护一个Map,用于存储每一个线程的变量副本,map 中元素的数字简直为线程对象,而数值为对应的线程变量副本。
threadLocal 在sprin g中发挥这巨大的作用个,在管理request,bean,实务管理,认读调度,aop 模块中都出现了他的声音。
spring 中绝大部分bean 可以按照生命Singleton 作用于的,采用ThreadLocal进行封装,因此有张天的bean,就所以singleton 方式在
多线程中的方式工作了。
java 内存模型:
java 虚拟机的规范中的将Java运行时数据分别6中,程序计数器的
java 虚拟机模型将java 运行时数据分裂为6中
1,程序计数器L是一个数据结构,用于八寸担心正常执行的内部地址,java 多线程就是通过县城轮的切换的并分噢诶世家你啊来实现的,为了线程切换后能
恢复到正确的位置,每个线程都你能独立的程序计数器的,互补影响,该区域为线程私有的。
java 虚拟机站:
线程私有的,与线程生命周期的相同,用于存储变量,操作站,方法返回数值,局部变量放着几本书类型,还有对象引用。
本地方法的章: 跟虚拟机的很想不过是为虚拟机的用到native 方法,
java堆的方法 所有线程共享的一块内存取悦,存储存储积极嘉兴市凡人类信息,静态两次那,编译后的代码。
运行时常量池: 代表运行时,每个class 文件中的 长量表,包括集中方法刚发变异是的数字常量,方法,或者与的引用关系。
1.新生代有一个edegen 去个跨不过哥survivir 区域的,授信啊将对吸纳该方法egen 区域的内部,如果空间不足额吉祥
其中的一个survivior 方法不放弃,如果任然不放弃的就会阴影一次发生在新生代的minor GC ,将存货的对象的放入一个素色额虐中。‘
’然后情况edge 和之前的survivor 区的内存,在某次GC国臣各种,如果发现的任然有放不下的对象,就将这些对象的放入老年低了。
2.大对象以及长期存储的对象额直接进入老年去,
3.当每次执行MinorGC的时候该用实际到开的对吸纳进行分析,如果靠你俺去的兑现的超过了老年去的剩余大小,,那么执行依稀FULLGC 尽可能的获得老年去的复活的对象。
GC roots: 迅疾的章的引用的对象 3,方法区警惕爱属性音译的对象 3,jni 引用的对象
synchrozned ied 与Lock 都是课重入的,同一个吸纳新恶搞再次激怒同一个同步带啊块儿是偶到时候哦,可以使用已经获取的东东额锁。
synchroied 是悲观锁机制,独占所。locks.ReetrantLock 是每次枷锁的后而是假设是有冲突,而去完成某项操作。
如果因为冲突失败就充实,知道成功为止。ReettrantLock 使用场景。
1.某个线程在凳子一个锁的控制权的这段时间需要哦终端
2.需要分开处理一些wait-notify,RenenttrantLock 里面的contition 里面。
3.具有公平所哦功能,每个到来的线程豆浆排队等候。
StringBUffer 是线程安全的,每次操作字符串,String是会生成新一个新的对象,而Stringbuffer 不会,
StringBUilder 是非线程安全的。
volatine和 synchroinized 四个不同点:
1.力度不通,前者针对变量,后者针对锁和兑现个类
2.syn 阻塞,volatile 线程不阻塞
3.syn 保证三大特性,volatile 不保证远近自行
4.syn 编译器优化,volatile 不游湖,volatile 具备两种特性。
1.保证此变量对所有线程的可见细腻,之一条此案城修改了这个变量的数值,新的数值对饮其他线程来说是可见的,但不是不死多此案城安全的,
2,禁止指令重排序优化
volatile 如何保证内有优化:
1.当写yieldvolatile 变量时,JMMM就把线程对于你的本地呢村中的共享变量刷新到哦驻村中。
2.当读一个volatile 变量时,jmm 就会把线程对应的本地内存职位无效,线程接下来从中驻村中读取共享变量。
同步: 就是yield任务的完成需要依赖一个任务,只有等待被依赖的任务完成胡,依赖任务才能完成。
异步: 不需嗯需要考虑看要的等待的任务完成,只要通过被伊莱恩热任务要哦完成任务,只要,异步的特点就是通知
阻塞: CPU 停下俩等一个慢的操作草完成呢以后,才会完成其他操作。
非阻塞:会造成线程切换增加,增加CPU的使用时间,能不能不长刺痛的去恶化。
CAS(compare and swap):
CAS是乐观锁技术,当多个线程尝试,其中只有一个一个线程能更新下变量的数值,而其他线程的都失败,失败的线程并不会骨气,而是被告知在其静候能汇总失败,并可以阿紫次尝试,
CAS有3个操作,内存数值V,就的与其数值A,要需要的新的数值B。当且精当与其数值A和内存V相同时,将内存数值V修改为B,否则什么也不做。。
鲜橙汁的作用: 在程序启动的时候就一次按个了嗦嘎基础来乡音处理,她们被称为线程池,里面的线程就做工作小城。
1.相抵的资源消耗,谈过重复利用一斤茶币的线程祥地底下那个城创建和销毁的造成的消耗e
2.提高响应的速度读,当任务打到大 ,任务单额不可以不需要的创建就能离职执行。
3.提高线程的可管理型。
常用的鲜橙汁: executeServcei, execute.newsingleTreadPool(),newFixedTHreadPool(),w
new cacedThreadpOOl();
类加载机制:
1.装载: 将Java二进制的到那么导入JVM中,生成class.
2.连接: 2)校验:检查额载入的calss 文件正确性,
b)给类的静态变量,分配存储空间,
c)初始化:对垒的静态的变量,静态方法和静态戴拿夸之心初始化工作。
3.初始化: 对类的静态的变量,静态方法,和惊呆代码执行初始值工作,
双亲委派模型:类加载器收到类家爱妻请求,首先强请求委托给父类的加载后应用程序的加载器,扩展类加载器, 启动的类记载其。
一致性合适:
memcaced 缓存
使用方法: get,put 等方法,
redis 数据结构:String=字符串
hash-字段()redis 的合适的结构可以使你的在数据库的更新下属性,只修改的某偶一个该的属性数值。
List-列表:实现的消息的队列
Set-集合 :利用唯一性
Sorted Set:有序集合,可以进行排序,可是实现数据持久化。
B+,B-,全文索引
MySQL的搜因是一个数据结构,侄子数据库高效的查找数据, 常用 的数据结构是B+,每个叶子节点不但存放了间的相关信息爱,
形成了带有的顺序的访问指针的B+ 树,做这个优化的木耳是提高,不同区间的访问性能。
什么时候索引:
1.经常的出现在group by,order by,和distinceit 关键字的后面的字段
2。 经常与其他二表进行连接的表,在连接字段上应该建立的索引
3。经常的出现在where 子句中的字段
4。经常出现查询的选择的字段
spring ioc (控制反转,依赖注入)
spring 支持三种依赖注入的方法是, 分别是依赖,(属性) setter 注入,构造注入和接口注入。
spinng 的IOC 通过发射机制的实例化bean,并建立的bean 之间的依赖关系。
spring bean 的作用域:
singleton:spring ioc 容易的只有一个共享的bean,实例,一般都是singleton 作用域。
Prototype: 没一个请求,会长生一个新的bean的实例
request: 每一次的http 请求的会长生新的bean实例。
代理的优点:
一万五里诶的只需要哦业务逻辑的本证,保证了业务的累的额重用性,
java 静态动力:
代理对象和目标对象时乐享了相同的接口,目标对象作为代理的对象的一个属性,具体接口方法。
Java动态代理:
一个列的实现invovation喊的人解耦,重写invalieke 方法,在invoke方法可以曾江处理的 逻辑编写。
这个公共代理类在运行时才能明月自己要代理的对象,同时,可以实现被代理ide方法的实现,然后子啊实现类的时候的可以增强的增处理。
JDK和CGLIB 生成动态代理:
JDK 动态代理只能针对实习了接口的类生成代理(实例化一个类)
参考资料:
https://www.cnblogs.com/java1024/p/7685400.html
jdk 动态代理的只能针对实现了介绍的类生成代理,(实例化一个类),
CGLib 之类 的只能战队实现了接口的类,生成代理(实力哈一个类)。
spring aop 应用场景:
性能检测,访问控制,log 管理,事务等,
springMVC 运行原理:
1. 客户端的请求提交到dispatchSrevelt
2.由conrlloer 调用的业务逻辑的吃力返回的modeladAndView
3.Controoleer 调用的处理出后,返沪ModelAndView
4.DispatchServlet 查询yield活多个ViewResolorer 视图解析。找到ModelAndView 制定的视图
5.视图负责的将结果显示到客户端
----------------
一个http 请求:
DNS 域名邱庆区,发起tcp三次握手,简历tcp 连接发起 http 请求,-》服务器的响应的http请求,浏览器的得到html 中。
浏览器的戒心html 中,并清酒html 中资源的-》浏览器渲染给用户。
session 与cooking de:
cookines 可以让服务端跟踪每个客户端的方法,范式每次客户端的访问 传回这些cookie,如果cookies 很多,则五星的的增加了客户端了与服务器的
数据的创数量。
而session 则很傲哦的解决了这个问题,同一个客户度阿奴每个和服务店交互将数据存在的副武器店,不是灭磁串货从开课时,而是串货igeID,没此第一次的
访问的生成的唯一DI,
session和Cookies的超市问题,COKIE是的安全问题。
分布式session框架:
1.配置的服务器的,zookererpler 汲取中的管理的可以管理的同意刮开的所偶的服务器配合文件。
2.共享的这些session存在一个分布式缓存中,可以随时写入和读取的而且性能要好,如memcached,tair
3.封装一个类的继承httpSession,将session存入的到则个类中的再存储如的分布式缓存中。
4.由于cookies 不能跨域访问,要实现session同步,要同步sessionID 写到不通于明霞。
适配器模式:
将一个接口的是配到的另一个解耦,Java IO 中的InputStreamer 将是 配到InputStream,从而实现了字节流到字符流绿绿绿留就得准换。
装饰者模式:保持原来的接口,增强原来的有的功能,
FileInputStream 实现了INoutStream 的所有接口,BUfferedInoutStream继承FileInputStream 是具体的装饰器实现者。
将InputStream 读取的内容的在内存中,而读取的性能能。
装饰者模式:保持原来的接口,增强原来的有的功能。
FileInputStream 实现了InputStream 的有所接口,BufferedInputStream继承来自于FileInputStreamshi
s是具体的实现着,将InputStream读取的内容的保存相似内存中,而读取的性能。
spring 实物配置方法:
1.切点信息: 用于定位事实食物切面的业务网类方法
2.空值事务行为的事务属性,这些属性包括食物隔离了属性级别,食物传播行为,超时时间,回滚规则,
spring 实物配置方法;
1.切点的信息,用于的定位事实是无穷恶化额业务类的方法
2.空值事务的行为的事务属性,这些属性的格林级别,食物传播行为。
spring 通过的aop/tx schema 民命空间见和@Transcacation 注解技术额的来生命是食物配置。
mybatis
每一个Mybatis 的阴阳程序都已一个sqlsessionFactory 对象的为核心。首先用字节流将配置文件读入,然后将
sqlsessionfactoryBUilder().build方法创建的sqlSessionFactory,然后再通过的sqlSesssionFactory
.openSesssion()方法创建一个sqlSesssion为每一个数据库食物服务。
经历了mybatis 初始化--》创建的sqlsession->运行的SQL语句
Server联通和filter 的区别
真的流程:Fiter 对用户的请求进行预处理,接着讲请求交给servlet 进行处理斌生成响应,最后fiter 在对的服务器的响应后处理。
1.Filter 在web度武器的生命周期
2.如果某个servlet 配置了1,该serverl 也是在tomcat 启动事初始化
3.如果某个serve利润 配置了1,该serlvlet 也不会在tomcat 到来时初始化。
4.每次请求,request,都会被初始化,响应请吼吼,请求被销毁
5.serevlet 初始化后,将不会UI这请求的结束而朱少
6,关于tomcat, servlet ,filter 一次的被注销。
===========================hashMaph允许在ashTable的区别
1,hasMap 是非线程的安全的,hashTables是线程安全的
2.hashMap 的主键,erhashTable 则不行。
3.因为线程安全问题,hashMap 效率比hashTable 药膏。。
igeentry[]ihashMap的实现的机制:
1.维护了一个每个元素的事宜个链表的数组,而且连的中额的每个节点是数据偶该结构。
2.实现了数组+链表的特性的,查找快,插入删除也快
3.没对每个key,他的对应的数组的索引下表的是int i=hash(key.hahscode) &(len -1);
4.每个新加入的节点的放在脸收,然后在新加入的芥蒂娜执行原里埃博阿
hashMap,Concurrenh与linkedhashMap的区别
1.concurrentHashpam 是使用了锁酚酸技术来保证此案城安全的,
锁分段技术: 首先将数据的分成一段一段的存储,然后将没一段疏忽配一把锁,当一个进程占用锁访问其中
一个段数据 的时候,其他算的数据也能被空想
2.ConcurrenthashMap实在每个段红线程安全的
3.LinkedhashMap 维护 一个双链表,可以将里面的数据安写的吸入的数序杜小虎
维护一个双链表,可以将里面的数据按照写入的数序暑促
concurrentHashMap 引需要所终整个容器,自徐奥随着用场景;
1.concurrnetHashMap额应用场景是高并发,但是不不能保证线层安全,而同步的hashMaohe hashMap
是锁住整个容器后,而枷锁之后concurrent哈市Map对I方的segement 就好了,可以包含着那个高并发同步访问,提升了效率。
2.可以多线程写
ConcurrentHashMap 把hashMap 分成segment
1.get 时候,不加锁,先idingewidoa是入门套然后在头芥蒂娜进行杜旭操作,而value,
voliate 所以在保证在竞争田间下U的谁的如果读到的是Null,在可能横在修改。
2.put 加锁时,一律ianjiadaohash连额头部。
copyOnwriteArrayList : 写时枷锁,当添加一个元素额时候,将原来的容器的inxng
COP安远大小写操作额Y的,付支出一个新的容器,然后在新的容器里面,写完之后再将与昂的引用的小hi子那个新的
容器而读的时候读就的数据,所以可以并发的读。
使用场景:
CopyOnwriteArrayList 适合在读曹邹场景里,比如缓存,
linux 常用命令cd,cp,mv,rm,rm,ps,tar,cat,chm,chmod,vim,find,ls
死锁额必要条件:
1.互斥的 L至少有一个条件只有的资源的非共享的状态
2.战友并等待
3.非抢占
4.循环等待
解决死锁:第一个是死锁预防,就是不让上面的4个条件同事成立,
2.合理的分配资源
3.使用银行家算法
如果该进程请求的资源曹邹系统声音连可以满足,那么久分配。
进程间的通信方法:
1.管道
管道是一种半双工的通信方法,数据单向流动,通常是斧子的进程。
2.有名管道
也是半双工的通信方式,但是他徐云的无沁园关系的的通信。
3.信号量
信号量是一个计数器,用来控制多个进程的对共享资源的方法,他作为一种锁机制。
防止某进程正在访问共享资源,其他进程也方位该资源,因此,主要作为进程间的统一个今晨国内的同步手段,
4.消息队列
消息队列是消息的链标识一一 表,内村子啊内核消费的标识符
6.信号; 信号是一种比较复杂的通信方式,用于通知接受的某个事情已经发生。
6,共享内存,
共享内存,就是映射有一段能被进程访问的内存,有一个进程闯进大,是多个今晨个都亏访问。共享内存是最快的IPC方式
7.套接字
也是一种进程间的通信机制,与其他机子的不听的是的,他可用于不通机制之间的进程通信,
书库的食物而是作为单个逻辑单元大执行的以系统里的操作:
未提交read uncommmit 可能 可能
已经提交读 不可能呢 可能
可重复读 不肯能 不可能
可创兴华 不可能 不可能
hinernate的以及魂村是有session 提供的,因此他方只存在不session的生命周期中,当程序调用save(),update (),saveorUpdate() 等方法。
hinetmate 的一级村韩是session 所内置的,不能卸载的,也不能任何配置的换红的是key-value,和map 实现,在缓存实体对象时,对象的主官架子ID是Map的key.
hinatenate 二级缓存:把获得的所有对象数据根据ID放入到第二缓存中,hinate 中 二级缓存策略。是很对的ID查询的缓存策略,更新,增加,数据的时候,同事更新缓存。
多进程是指操作系统能同时运行多个任务(程序)。
多线程实在在同一个程序有多个数序留在执行。
在java 中同一个程序有多个数序流在执行。
object 有哪些公用方法:
方法equals 测试的是两个对象是否相等,
方法clone 进行对象copy
方法getClass() 返回的和当前额相关的class 对象
方法:notify,notifyAll(),wait() 都是用来对给定的对象的济宁线程同步。
Java 的四种引用: 强弱软虚
利用软引用和若引用姐姐oom 问题 用一个hashMap 来保存图片的路径和响应的图片的之间额软引用,之间的映射关系,在内存不足时,JVM 不足时,JVM会自动个回收这些换辊图片和张勇的空间,
从而有效的避免了Oomph 问题。
强:
如果一个对象强引用的,他举不会即使当前内存不足,JVM也不会会是他,而是爆出了OutofMemoryErrror错误,
使得程序异常终止。如果想终端引用和对象之前的关联,显示的复制为的null,这样的依赖的JVM在合适的时间的就会的回收该对象。
d.软引用的:在使用软引用时,如果内存的空间那足够时,软引用是,就能继续呗使用,而不会被垃圾回收的,只有在内存不足时,软引用才会被垃圾回收期回收。
e: 弱引用: 具有弱引用的独享拥有的生命周期更段振宁,因为当JVM进行垃圾回收,一旦发现若引用的无论当前的内存空间是否充足,
都会讲弱的引用回收,不过由于的垃圾回收的是一个低有心计的脚底的线程。
f:虚引用:
顾名思义: 形容你个形同虚设,如果一个对象持有需持用难免相当于与没有有用。
java 中堆和站的区别说下Java的内存机制
a.基本数据类型是鼻梁和对象的引用偶在杂种的分配的
b.堆内存的用来存在有new创建的对象和数组,
c,类变脸当你使用Javanew的时iruianlian候,系统在z
d: 实力变量:当你使用java 关键字new的时候的退货总的
e.局部变量: 有生命方法在某方法,活欧代码呆三年里比如for 循环,执行到达大战中的开辟内存的,当聚聚便来你个的一旦脱离作用域,
内存立即释放。
java 多态的实现原理:
a. 抽象来说,多提的意思是好事同一个消息可以恩举个法相对象的不通的而才去的不同哦的行为方法。
b.实现的原理是:动态胖丁,程序在嗲偶偶给你的发给你在运行戏曲才动态帕丁,jvm 痛殴过自动转型来找到哦合适的方法。