- 博客(110)
- 资源 (1)
- 收藏
- 关注
转载 IO底层
本文转载:https://www.jianshu.com/p/24f544f639301、Java IO 读写原理无论是 Socket 的读写还是文件的读写,在 Java 层面的应用开发或者是 linux 系统底层开发,都属于输入 input 和输出 output 的处理,简称为 IO 读写。在原理上和处理流程上,都是一致的。区别在于参数的不同。用户程序进行 IO 的读写,基本上会用到 read&write 两大系统调用。可能不同操作系统,名称不完全一样,但是功能是一样的。先强调一个
2020-11-17 19:42:53
368
转载 NIO
本文转载https://blog.csdn.net/weixin_45676630/article/details/1057173811.Socket模拟通信通过一个案例来实现Socket模拟通信Servicepublic class ServerSocketClass { // 启动一个服务端 public static void main(String[] args) { final int DEFAULT_PORT = 8080; Se
2020-11-17 19:39:45
379
原创 java线程池简单提提
java线程池ThreadPoolExecutor是我们线程池核心类四大线程池newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool线程池原理监控线程执行状态你想监控某一个线程池的执行状态,线程池执行类ThreadPoolExecutor也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执行完成的线程数、总线程数等。...
2020-11-17 14:59:56
170
原创 java注解注意事项
java注解元注解1.@Target:描述当前注解能够作用的位置 ElementType.TYPE:可以作用在类上 ElementType.METHOD:可以作用在方法上 ElementType.FIELD:可以作用在成员变量上2.@Retention: 描述注解被保留到的阶段 SOURCE < CLASS < RUNTIME SOURCE:表示当前注解只在代码阶段有效 ...
2020-11-17 00:52:18
691
原创 final域、Atomic和ThreadLocal
解决并发2种方式对于并发工作,需要某种方式来防止两个任务同时访问相同的资源,至少在关键阶段不能出现这种冲突情况。资源被一个任务使用时,在其上加锁 根除对变量的共享。线程本地存储是一种自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储。因此,如果你有5个线程都要使用变量x所表示的对象,那线程本地存储就会生成5个用于x的不同的存储块。它使得你可以将状态与线程关联起来。创建和管理线程本地存储可以由java.lang.ThreadLocal类来实现。final对于final域,编译器和处
2020-11-17 00:49:06
937
原创 线程的本质
java并发一、线程是什么线程是操作系统能够进行运算调度的最小单位为什么出现在一个应用进程中,会存在多个同时执行的任务,如果其中一个任务被阻塞,将会引起不依赖该任务的任务也被阻塞。通过对不同任务创 建不同的线程去处理,可以提升程序处理的实时性怎么使用继承Thread 实现Runnable接口 实现Callable接口 通过拿到Future(Future提供了3种功能:(1)能够中断执行中的任务(2)判断任务是否执行完成(3)获取任务执行完成后额结果。)接口对象或Futu...
2020-11-16 23:50:55
720
转载 Java并发之Condition
Java并发之Condition在使用Lock之前,我们使用的最多的同步方式应该是synchronized关键字来实现同步方式了。配合Object的wait()、notify()系列方法可以实现等待/通知模式。Condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的。Object和Condition接口的一些对比。摘自《Java并发编程的艺术》一、Condition接口介绍和示例 首先...
2020-11-16 23:19:55
252
转载 锁分类和java锁机制
本文转载https://blog.csdn.net/qq_42022528/article/details/87880252一、什么是锁?在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。锁旨在强制实施互斥排他、并发控制策略。 锁通常需要硬件支持才能有效实施。这种支持通常采取一个或多个原子指令的形式,如"test-and-set", "fetch-and-add" or "compare-and-swap"”。这些指令允...
2020-11-16 23:01:25
206
转载 并发理论基础:并发问题产生的三大根源
本文转载:https://zhuanlan.zhihu.com/p/64988344并发理论基础:并发问题产生的三大根源问题根源之一:缓存导致的可见性问题CPU的执行操作数据的过程一般是这样的,CPU首先会从内存把数据拷贝到CPU缓存区。然后CPU再对缓存里面的数据进行更新等操作,最后CPU把缓存区里面的数据更新到内存。磁盘、内存、CPU缓存会按如下形式协作。缓存导致的可见性问题就是指我们在操作CPU缓存过程中,由于多个CPU缓存之间独立不可见的特性,导致共享变量的操作结.
2020-11-16 20:08:17
547
转载 单例模式详解--通过源码分析:反射及反序列化破坏单例原理及枚举式单例如果防止其破坏、readResolve()如何防止反序列化破坏单例以及spring容器式单例思想
本文转载:https://blog.csdn.net/weixin_49176063/article/details/107299195?utm_medium=distribute.wap_relevant.none-task-blog-title-6单例模式详解--通过源码分析:反射及反序列化破坏单例原理及枚举式单例如果防止其破坏、readResolve()如何防止反序列化破坏单例以及spring容器式单例思想写在前面本文从最基础的饿汉式及懒汉式demo进行引入,通过jdk源码分别分析了:反射
2020-11-14 09:37:25
505
转载 单例模式:基于反射和反序列化破解单例模式的漏洞及其解决方法
本文转载:https://blog.csdn.net/fly_as_tadpole/article/details/86655360单例模式:基于反射和反序列化破解单例模式的漏洞及其解决方法单例模式使得在创建类对象的时候只创建一个对象实例。上一节讲解了五种实现单例模式的方式。分别为:饿汉模式、懒汉模式、double check、静态内部类、枚举但是基于反射和反序列化可以破解单例模式的单一实例,在使用反射时可以通过调用setAccesible()直接调用私有构造器,创建新的实例;在反序列化的时
2020-11-14 09:29:31
199
转载 30张图带你彻底理解红黑树
本文转载https://www.jianshu.com/p/e136ec79235c30张图带你彻底理解红黑树写在前面当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑
2020-11-12 21:01:55
190
转载 java中的fail-fast(快速失败)机制
本文转载https://blog.csdn.net/zymx14/article/details/78394464java中的fail-fast(快速失败)机制引入在前面介绍ArrayList的扩容问题时对于modCount的操作没有详细说明,该变量的操作在add,remove等操作中都会发生改变。那么该变量到底有什么作用呢?简介fail-fast 机制,即快速失败机制,是java集合(Collection)中的一种错误检测机制。当在迭代集合的过程中该集合在结构上发生改变的时候,就有可.
2020-11-12 18:59:01
685
转载 浅谈ArrayList动态扩容
本文转载https://blog.csdn.net/zymx14/article/details/78324464浅谈ArrayList动态扩容环境:eclipse,jdk1.8简介ArrayList实现了List接口,继承了AbstractList,底层是数组实现的,一般我们把它认为是可以自增扩容的数组。它是非线程安全的,一般多用于单线程环境下(与Vector最大的区别就是,Vector是线程安全的,所以ArrayList 性能相对Vector 会好些),它实现了Serializable接
2020-11-12 18:56:34
212
转载 Spring系列之FactoryBean(二)
本文转载https://conan.blog.csdn.net/article/details/79588391?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.add_pa
2020-11-10 22:22:23
149
转载 Spring系列之FactoryBean(一)
本文转载https://conan.blog.csdn.net/article/details/79572387#comments_13341441在我们的开发工作中应该都见过或使用过FactoryBean这个类,也许你会看成了BeanFactory这个类。FactoryBean和BeanFactory虽然长的很像,但是他们的作用确实完全不像。这里你可以想象一下,你会在什么样的场景下使用FactoryBean这个接口?FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个
2020-11-10 22:19:44
180
原创 FactoryBean
参考FactoryBean(一)和FactoryBean(二),进行总结FactoryBean作用自定义Bean的创建过程定义public interface FactoryBean<T> { /** * Return an instance (possibly shared or independent) of the object * managed by this factory. * <p>As with a {@link BeanFac
2020-11-10 22:14:51
155
原创 Java并发(面试篇)
一、java包:JUC二、1. 线程创建(1)继承Thread类(2)实现Runable接口(3)创建Callable接口的实现类A,实现call();创建A的实例,使用FutureTask类或者Future接口包装Callable对象,得到对象b,把b作为Thread对象的target创建并启动线程;可以调用FutureTask对象的get()获得子线程执行后的返回值。FuturnTask与Future的区别方式三优点:可以获得线程执行后的结果2. 线程池的种类(参考)
2020-06-03 20:26:17
300
原创 CAS的简单介绍
CAS(compareAndSwap)无锁原子算法包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己可以成功完成操作CPU 实现原子指令有2种方式...
2020-06-03 20:23:57
616
原创 volatile原理和语义
CPU缓存导致一致性问题解决方案1.总线加锁(粒度太大)2.MESIa.读操作:不做任何事情,把Cache中的数据读到寄存器b.写操作:发出信号通知其他的CPU讲改变量的Cache line置为无效,其他的CPU要访问这个变量的时候,只能从内存中获取java内存模型主存中的数据所有线程都可以访问(共享数据) 每个线程都有自己的工作空间,(本地内存)(私有数...
2020-06-03 20:22:40
388
原创 synchronized的分类和原理
修饰对象分类同步方法非静态public synchronized void methodName(){}静态方法public synchronized static void methodName(){}同步代码块synchronized(this | object){}获取的锁来分类对象锁修饰非静态方法每个对象有个monitor对象,这个对象其实就是 ...
2020-06-03 17:59:07
501
原创 java基础(面试篇)
Java基础1. java基本数据类型:byte,char,short,long,int,float,double,boolean。String 不是对于基本数据类型,java有它的封装类,如:int ->Integer,为什么封装,因为java一切都对象,int初始值0,Integer初始值是null。其他区别:通过new生成的Integer变量永远是不相等的。Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true。非new生成的Integer变量和new Int.
2020-06-03 14:28:40
793
转载 重排序与内存屏障
Java内存模型深度解析:基础部分--转并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。同步是指程序用于控制不同线程之间
2020-06-03 12:32:35
701
原创 睡前记录
加载机制当出现方法接收的参数在代码中出现了参数类型的子类时,那么参数类型和子类,将会优先于方法所在类进行加载。当一个类的成员变量被赋值一个子类型时,该成员变量的类型和子类型将会优先于成员变量所在类进行加载。当一个类中包括的方法,返回的类型是形参的子类时,形参和返回参数的子类型将会提前加载。...
2020-06-03 00:33:08
134
原创 开始学习微服务(八)
1. Docker Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。要求:linux内核3.10及以上查看系统内核版本uname -rdocker ce开源docker ee不开源2. docker安装这里是centos7安装的卸载旧版本yum remove docker docker-...
2020-05-28 14:31:40
150
原创 开始学习微服务(七)
1. sleuth(分布式链路跟踪)trace、span、annotation(标注)trace可以理解为路线,span理解为站点。annotation用来定义请求的开始和结束(Client sent...)2. Zipkin帮助分析追踪数据,提供可视化使用:新建模块zipkin-server引入依赖在zipkin2.7.x以后便不支持自定义服务器需要使用官方的版本或者Docker 但是如果还是要使用的话就得加上这个配置,但不保证bug。<dependency&g
2020-05-27 21:22:17
235
原创 开始学习微服务(六)
1. HystrixDashbord功能:提供微服务调用状态的监控信息要求:spring-boot-actuator 模块一起使用测试 目的:有可视化页面监控微服务的信息(1)user中引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator&l.
2020-05-27 17:15:16
161
原创 开始学习微服务(五)
1. zuul功能:请求的路由和过滤场景:请求校验等2. zuul实现路由使用:加入依赖<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artif
2020-05-27 12:29:06
394
原创 开始学习微服务(三)
1. eureka与zookeeper区别eureka ap原则,即可用性,当有节点出现问题,依然可以用剩下节点提供注册与查询服务,注册可用(可用性),查询不是最新的信息(弱一致性),有自我保护机制zookeeper cp原则,即一致性。节点出现故障,剩余节点重新leader选举,但选举时间过长,而且期间集群不可用。2. ribbon(客户端)(1)作用:通过微服务名从注册中心调用微服务,客户端负载均衡,大概有7种负载均衡策略(轮询,随机等)(2)来源:和eureka(不会服务调用,只是
2020-05-27 10:21:08
196
原创 开始学习微服务(四)
1. Hystrix用来处理分布式延迟和容错,保证一个服务出错时不会导致整体服务失败2.超时和降级当一个服务响应时间过长,不能一直卡着方法:引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</
2020-05-27 10:20:42
233
原创 开始学习微服务(二)
Eureka1. 来源 Netflix公司开发,不是Spring公司2.组件EurekaServer(独立项目)用于定位服务,实现中间层服务器负载均衡和故障转移。EurekaClient(微服务)和Server交互,简化交互,通过服务标识符获得服务3. 关系用来实现服务的注册与发现,C-S架构(客户端和服务端)4. 使用小坑2.0之前依赖的名称不一样新版本的依赖如下:<artifactId>spring-cloud-starter-netfl...
2020-05-26 14:15:11
191
原创 开始学习微服务(一)
微服务模块拆分解耦,相当于一个项目一个模块,也相当于是不一样的线程,模块间无关联分布式将一个系统划分为多个模块,模块间有关系二者关系微服务是架构的一种,可以简单理解为分布式是微服务的一种现有可以使用微服务技术--spring clound小坑: 使用时spring clound 要与spring boot 版本对应,否则可能会报错。原因:spring clound是由很多中间件(还是叫组件)组合而成的,所以它的一个版本是那些中间件组合而成的版本,spring clound版本
2020-05-26 09:51:23
286
原创 git安装与理论
一、安装的一些选项的意思(1)Addition icons: 是否创建桌面快捷方式。(2)Windows Explorer integration: 是否使用bash 或者 GUI工具。(3)Associate .git*...是否配置默认的文本编辑器。(4)Associate .sh ...: 是否关联Bash命令行执行的脚本文件。(5)Use a TrueType编码...
2020-03-28 16:30:14
431
原创 JUC包的简单分析
悲观锁共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。比如数据库中的行锁,表锁等,读锁,写锁等,java中synchronized和ReentrantLock等独占锁乐观锁每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞...
2020-03-13 22:14:14
1436
原创 大致概括下zookeeper客户端和服务端交互过程
源码使用的一些技术小结:1.对连接地址进行解析:传进来的地址 以逗号截取,然后每一个地址再以":" 分号截取,封装到inetSocketAddressHolder类中,然后把inetSocketAddressHolder 放在一个ArrayList serverAddresses中2.shuffle(this.serverAddresses)这个方法是对多个服务器进行随机地址连接...
2020-03-12 14:48:40
900
原创 springAOP
部分流程用一个Map(如:map<String,Object>)自动注入可以放进多个实现该接口或抽象类的类注:动态设置一个类的属性implements ImportAware可以通过类名得到注解,得到注解里面的值注:为什么要放入bdmap,为了让这个类在spring中产生一个bean,不是所有后置处理器都要放到bdmap,后置处理器不一定要产生一个bean,因为后面...
2020-03-08 21:04:26
146
原创 spring的扩展点(一)
构造方法先调用父类的构造方法,再调用子类的构造方法spring的扩展点1.实现BeanPostProcessor插手实例化,外加实现PriorityOrdered可以让多个实现BeanPostProcessor排序执行,spring自己实现的实现BeanPostProcessor将会是自己set进去2.实现BeanFactoryPostProcessor3.Appl...
2020-03-08 00:25:32
878
原创 BeanFactory和FactoryBean
如果你的类实现了FactoryBean,那么spring容器当中存在两个对象,一个叫做getObject()返回的对象,还有一个是当前对象,getObject()得到的对象当前类指定的名字,如@Component(“daoFactoryBean”),当前对象是“&当前类的名字”AbstractBeanFactory#doGetBean()中beanName=transformeBe...
2020-03-07 23:23:57
114
原创 spring模拟
1.哪些类需要我来管理2.怎么告诉我这些类3.怎么维护依赖关系(setter,constructor)4.怎么体现setter,constructor注:xml中constructor-arg name=dao是UserDao dao中的dao,ref中的dao是另外的步骤实例化对象(可以用dom4j解析xml)维护依赖关系,看看这对象是否有依赖(判断是否有proper...
2020-03-07 21:56:40
178
原创 jdk和cglib代理
静态代理继承代理对象继承目标对象,重写需要增强的方法;缺点:类膨胀聚合目标对象和代理对象实现同一个接口,代理对象属性为目标对象。缺点:也会类膨胀,只不过比继承少动态代理简单思路不手动创建类文件,通过接口反射生成一个类文件,然后调用第三方的编译技术,动态编译这个产生的类文件成class文件,继而利用UrlclassLoader(因为这个动态产生的class不在工程...
2020-03-07 21:09:12
128
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅