
java
文章平均质量分 65
智欣悦
这个作者很懒,什么都没留下…
展开
-
java并发和高并发之线程池
一、二、线程池使用:原创 2020-03-12 00:07:59 · 345 阅读 · 0 评论 -
java并发和高并发之服务降级与熔断
服务降级和服务熔断都是从应用层面,或者说服务层面,一、服务降级指的是,通过页面、服务等有策略地进行服务降级,尽可能正确地响应大部分用户的请求。通俗来说,就是如果无法处理该问题时,给一个默认结果。1、常见的降级方案: 1)自动降级: 》超时:主要为配置好超时时间和超时重试次数,同时通过异步的方式探测回旋情况 》失败次数:常用于一些不稳定的api ...原创 2020-03-11 22:17:21 · 1833 阅读 · 0 评论 -
java并发和高并发之应用限流
一、限流,通俗说即限制请求访问的数量,防止某个时间点,或者短时间内,有大量的请求访问后台服务器或者数据库。比如常见的电商情景下的抢购、秒杀活动。如上图所示,直接的方案,就是不做任何限流处理时的情况,下方恒定速率指的即是经过限流后的效果。二、常见的限流方案有:限制总的并发数:限制瞬时并发数:限制时间窗口内的平均速率:三、常见的限流算法:计数器法:最简单、最易实现...原创 2020-03-11 19:27:08 · 570 阅读 · 0 评论 -
JVM内存管理
• 传统程序语言:由程序员手动内存管理 –C/C++,malloc申请内存和free释放内存 –由于程序员疏忽或程序异常,导致内存泄露 • 现代程序语言:自动内存管理 –Java/C#,采用内存自动管理 –程序员只需要申请使用,系统会检查无用的对象并回收内存 –系统统一管理内存,内存使用相对高效,但也会出现异常JVM内存(1) • 线程私有内存 –程序计数...原创 2020-02-03 22:37:03 · 250 阅读 · 0 评论 -
java设计模式之中介者模式
一、定义与类型:》定义一个封装一组对象如何交互的对象》通过使对象明确地相互引用来促进松散耦合,并允许独立地改变它们的交互;》类型:行为型二、适用场景:》系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱难以理解;》交互的公共行为,如果需要改变行为则可以增加新的中介者类。通常用于聊天室等三、优点:》将一对多转化成了一对一、降低程序复杂度》类之间解耦...原创 2019-09-01 00:08:16 · 217 阅读 · 0 评论 -
java设计模式之命令模式
一、定义与类型:》定义:将“请求”封装成对象,以便使用不同的请求把不同点请求封装成不同的请求对象,接收者都可以识别,执行不同的行为。比如老板给员工下不同的命令,员工都能接收并执行。》命令模式解决了应用程序中对象的职责以及它们之间的通信方式;老板只负责下命令,不关心如何实现。员工只需要知道执行什么工作就好。二、适用场景:》请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交...原创 2019-08-31 23:34:32 · 197 阅读 · 0 评论 -
java设计模式之备忘录模式
一、定义与类型:》定义:保存一个对象 的某个状态,以便在适当的时候恢复对象》后悔药》类型:行为型;二、适用场景:》保存及恢复数据相关业务场景;比如一个软件的保存撤退功能,主要用于工作流中。》后悔的时候,即想恢复到之前的状态;三、优点:》为用户提供一种可恢复机制;》存档消息的封装;四、缺点:》资源占用;五、相关设计模式:》备忘录模式和状态模式:备忘...原创 2019-08-31 17:59:35 · 189 阅读 · 0 评论 -
java设计模式之观察者模式
一、定义与类型:》定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新;微信朋友圈点赞之后,你就是观察者,微信的那条朋友圈就是被观察者;京东上,关注某个商品,当商品降价时,会收到通知。网络视频课,有人提出了一个问题,该课程的老师会收到相应通知等等。》类型:行为型二、适用场景:》关联行为场景...原创 2019-08-31 16:47:26 · 178 阅读 · 0 评论 -
java设计模式之——代理模式
一、定义与类型:》定义:为其他对象提供一种代理,以控制对这个对象的访问;》代理对象在客户端和目标对象之间起到中介的作用;例如:我们通过房产中介租房。》类型;结构型二、适用场景:》保护目标对象。比如不知道真实房东是谁》增强目标对象。控制客户端对目标对象的访问租房前草拟合同就相当于对目标对象进行增强,相当于spring AOP中的before租房子相当于目标对象而租...原创 2019-08-18 14:11:29 · 156 阅读 · 0 评论 -
java设计模式之桥接模式
一、桥接模式定义与类型:》定义:将抽象部分与它的具体实现部分分离,使他们都可以独立地变化》通过组合的方式建立两个类之间的关系,而不是继承》类型:结构型二、适用场景》抽象和具体实现之间增加更多的灵活性》一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展》不希望使用继承,或因为多层继承导致系统类的个数剧增。三、桥接优点:》分离抽象部...原创 2019-08-17 17:37:45 · 312 阅读 · 1 评论 -
java设计模式之解释器模式
一、定义与类型:》定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。》为了解释一种语言,二位语言创建的解释器。》类型:行为型二、适用场景:》某个特定类型问题发生频率足够高;一般使用开源包。三、解释器模式优点:》语法由很多类表示,容易改变及扩展此“语言”;四、缺点:》当语法规则数目太多时,增加了系统复杂度,现...原创 2019-08-25 14:24:55 · 203 阅读 · 0 评论 -
java设计模式之——策略模式
一、定义与类型:》定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。》大范围处理掉if...else...》类型:行为型二、适用场景:》系统有很多类,而它们的区别仅仅在于他们的行为不同;》一个系统需要动态地在几种算法中选择一种;三、策略模式优点:》开闭原则;》避免使用多重条件转移语句;》提高算法的保密性和安全性...原创 2019-08-25 14:18:33 · 187 阅读 · 0 评论 -
Java设计模式之简单总结回顾
今天回头看之前的单例设计模式的有关记录,在此简单在总结下:单例模式分为饿汉式和饱汉式(懒汉式),该两个方案在不考虑一些多线程、反射、序列化和反序列化的情况下,饱汉式易于理解和书写,如下:public class LazySingleton { /** * 初级懒汉式单例设计模式 * 线程不安全的,单线程时不会出问题,但是多线程时会出问题 * 假设...原创 2019-08-15 20:29:05 · 112 阅读 · 0 评论 -
java设计模式之——组合模式
一、定义与类型》定义:将对象组合成树形结构以表示“部分-整体”的层次结构》组合模式使客户端对单个对象和组合对象保持一致的方式处理》类型:结构型》二、组合——适用场景》希望客户端可以忽略组合对象与单个对象的差异时》处理一个树形结构时三、组合模式优点:》清楚地定义分层次的复杂对象,表示对象的全部或部分层次》让客户端忽略了层次的差异,方便对整个层次结构进行控制...原创 2019-08-11 23:47:24 · 222 阅读 · 0 评论 -
java设计模式——之享元模式
一、享元模式的定义与类型:》定义:提供了减少对象数量从而改善应用所需的对象结构的方式》运用共享,有效地支持大量细粒度的对象》类型:结构型》俗话解:减少对象的创建数量,降低内存消耗,节省运行时间等二、享元模式适用场景》常常应用于系统底层的开发,以便解决系统的性能问题。比如java中的string类型,就使用了享元模式。数据库的连接池也类似。如果需要获取对象,先确认是否有可...原创 2019-08-11 11:42:59 · 334 阅读 · 0 评论 -
java设计模式之迭代器模式
一、迭代器地定义与类型:》定义:提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示》比如一个箱子中有n台电脑,只是遍历其类型,并不暴露其他信息》类型:行为型二、适用场景:》访问一个集合对象的内容而无需暴露它的内部表示》为遍历不同的集合结构提供一个统一的接口三、优点:》分离了集合对象的遍历行为四、缺点:》类的个数成对增加五、迭代器模...原创 2019-08-18 23:25:22 · 158 阅读 · 0 评论 -
java设计模式之模板方法
一、模板方法定义定义与类型:》定义:定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现》模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤》类型:行为型二、适用场景:》一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。比如把大象装进冰箱这个场景 ,开冰箱门、放入大象、关冰箱门。对于如上三个步骤,一定是要有的,而对于具体如何开门?如何放...原创 2019-08-18 19:25:26 · 178 阅读 · 0 评论 -
java设计模式之适配器模式
一、定义与类型:》定义:将一个类的接口转换成客户期望的另一个接口 将一个类的接口,就是被适配者,另一个接口就是目标类型》使原本接口不兼容的类可以一起工作。比如手机或者电脑等一些电器的充电转换头。》类型:结构型 二、适用场景:》已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)(为了复用现有的一些类或者数据、行为都正确,但是接口不符合)》不是软件设...原创 2019-07-20 20:16:46 · 605 阅读 · 0 评论 -
java设计模式之装饰者模式
一、定义与类型:》定义:在不改变原有对象的基础之上,将功能附加到已有对象上》提供了比继承更有弹性的替代方案(扩展原有对象功能)》类型:结构型二、装饰者——使用场景生活场景,比如买礼品时,需要礼品和层层包装,包装可以自行选取后的总花销;买早饭,是肉夹馍还是一个肉夹馍再额外加蛋还是火腿时的售价计算;买蛋糕时,不同层次选择的配料不同,如何计算其价格等程序场景:扩展一个类的功能或给...原创 2019-07-20 14:56:27 · 416 阅读 · 0 评论 -
java 设计模式之责任链模式
一、定义与类型:》为请求创建一个接收此次请求对象的链。这个链条中,每个元素是一个对象。》类型:行为型;二、适用场景:》一个请求的处理需要多个对象当中的一个或几个协作处理。三、优点:》请求的发送者和接收者(请求的处理)解耦。》责任链可以动态组合。如果复杂一点,把责任链的顺序和是否需要这个责任链做成外部的配置,则责任链可以动态组合四、缺点:》责任链太长或者处理时间过...原创 2019-09-01 13:22:33 · 191 阅读 · 0 评论 -
java设计模式之访问者模式
一、定义与类型:》定义:封装作用于某数据结构(如List/Set/Map等)中的各元素的操作》可以在不改变各元素的类的前提下,定义作用于这些元素的操作。》使用概率较低》类型:行为型二、适用场景:》一个数据结构如(List/Set/Map等)包含很多类型对象;》数据结构与数据操作分离。数据是数据,对数据的操作是对数据的操作这种分离的场合时,比如数据加载和对数据的操作分...原创 2019-09-01 13:32:31 · 183 阅读 · 0 评论 -
java设计模式之状态模式
一、定义与类型:》定义:允许一个对象在其内部状态改变时,改变它的行为。也就是说一个对象的状态改变时,其行为会改变。或者说它的行为不跟者改变,而是状态之间的转化。用于解决当控制一个对象的状态转换的逻辑比较复杂时,这样就可以把状态判断的逻辑转移到表示不同状态的一系列类当中。比如在看视频时,可以开始、暂停、播放等多种形式。》类型:行为型;二、适用场景:》一个对象存在多个状态(不同状态...原创 2019-09-01 19:17:16 · 332 阅读 · 0 评论 -
java并发和高并发——J.U.C之AQS-CountDownLatch
一、1、简要介绍该类的使用原理图:CountDownLatch是一个同步辅助类,利用它可以完成类似于阻塞当前线程的功能。换句话说,就是一个或者几个线程一直等待,直到其它的线程运行完成。CountDown用了一个给定的计数器进行初始化,该计数器的操作是原子性的操作。同一个时刻只能有一个线程去操作该计数器。调用该类的await() 方法的线程会一直处于阻塞状态,直到其他线程通过调用coun...原创 2019-10-07 00:06:05 · 234 阅读 · 0 评论 -
java并发编程和高并发——J.U.C之AQS首要概述
一、J.U.C之AQS介绍:1、概述:J.U.C表示jdk中java.util.concurrente包里的内容,是从jdk6中引入的java并发包。J.U.C大大提高了java程序的并发性能。而AQS被认为是J.U.C的核心,指AbstractQueuedSynchronizer 的缩写。AbstractQueuedSynchronizer这个类提供了基于firstIn first...原创 2019-10-06 16:06:17 · 298 阅读 · 0 评论 -
java并发和高并发之线程安全——同步容器
一、同步容器1、同步容器出现原因: 因为ArrayList HashSet HashMap 这几个容器都是线程不安全的,但是使用频率又最为频繁。所以在使用多线程并发地访问这些容器时可能出现线程安全问题。因此要求开发人员在任何用到这些的地方需要做同步处理。如此导致使用时极为不便。对此,java中提供了一些相应的同步容器供使用。2、常见的同步容器举例:》ArrayList—...原创 2019-10-05 23:51:12 · 327 阅读 · 0 评论 -
java并发和高并发编程之线程不安全类与写法
一、线程不安全类与写法:1、相对于不可变对象和线程封闭带来的线程安全,什么是线程不安全类呢? 如果一个类的对象同时可以被多个线程访问,如果不做特殊的同步或者并发处理,那么它就很容易表现出线程不安全的现象。比如,抛出异常、逻辑处理错误等等。这种类被称为线程不安全类。2、最常见的一些线程不安全类:》StringBuilder(线程不安全) ——》StringBuffer(线程安全)...原创 2019-10-05 23:26:57 · 444 阅读 · 0 评论 -
java并发和高并发之线程封闭
一、线程封闭:1、概述;线程安全策略,除了不可变对象,还有一个简单的方法就是线程封闭。线程封闭其实就是把对象封装到一个线程里,只有这一个线程能看到这个对象,那么这个对象本身就算不是线程安全的,也不会出现任何线程安全问题,因为它只能出现在一个线程里。2、实现线程封闭的几个方法:》Ad-hoc 线程封闭:完全靠程序控制实现,非常脆弱,最糟糕,忽略;》堆栈封闭:局部变量,无并发问题。被使...原创 2019-10-05 21:16:32 · 287 阅读 · 0 评论 -
java并发编程和高并发之线程安全策略
一、不可变对象:1、有一种对象,发布时就是安全的,这个对象就是不可变对象。2、如果想创建一个不可变的类,可参考使用最多的String类。当满足以下三个条件时才会是不可变对象。 即不可变对象需要满足的条件: 》对象创建以后其状态就不能修改;——》声明为final 》对象所有域都是final类型; 》对象是正确创建的(在对象创建期间,this引用没有逸出)...原创 2019-10-05 18:26:38 · 276 阅读 · 0 评论 -
java开发编程入门与高并发之安全发布对象(八)
一、安全发布对象之发布与逸出:1、基本概念:》发布对象:使得一个对象能够被当前范围之外的代码所使用:》对象逸出:一种错误的发布。当一个对象还没有构造完成时,就使它被其他线程所见。2、实例演示:1)发布对象:如上例子的演示目的是:说明如上,这个类通过public 方法,发布了这个类的域,在类的任何外部的线程都能访问这些域,这样的发布对象其实是不安全的。因...原创 2019-10-05 00:17:21 · 213 阅读 · 0 评论 -
java并发和高并发之线程安全性——可见性
一、可见性:1、定义:线程对主内存的修改可以及时地被其他线程观察到;2、导致共享变量在线程间不可见的可能性原因:》线程交叉执行;》重排序结合线程交叉执行;》共享变量更新后的值没有在工作内存与主存间及时刷新;3、不同解决方案对可见性的处理:1)可见性——synchronizedJMM 关于synchronized的两条规定:》线程解锁前,必须把共享变量的最新值刷新...原创 2019-10-04 18:40:04 · 650 阅读 · 0 评论 -
java并发和高并发之线程安全性—原子性 2—synchronized
一、原子性——锁1、原子性就是提供了互斥访问,同一时刻只能有一个线程对它进行访问或者说操作.java中,除了jdk中的atomic包之外,还有锁。jjdk提供的锁主要有两种:》synchronized 关键字: 依赖jvm. 在作用对象的作用范围内,可以保证在同一时刻只能有一个线程访问。注意synchronized的作用对象的作用范围内。》Lock接口:依赖特殊的CPU指令,代码实现,...原创 2019-10-04 18:15:50 · 352 阅读 · 0 评论 -
java并发和高并发之 线程安全性——原子性-atomic-1
一、线程安全性1、基本概念:》定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进行将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。2、线程安全性的几个表现点:》原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作;》可见性:一个线程对主内存的操作可以及时地被其他线程观察到;》有序...原创 2019-10-04 00:25:23 · 453 阅读 · 1 评论 -
java并发和高并发之项目准备(三)
一、案例环境初始化:讲述了通过https://start.spring.io 这个网页,简单创建一个spring boot框架,然后将其放在由码云代码托管工具管理的一个项目中,由码云进行代码管理,再通过idea打开项目进行后期创作的过程。借助几个工具,将环境搭建起来。二、案例准备工作,其中提到的几点值得学习的地方:1、自定义注解,用于后期方便阅读,使用到了@Retention(Reten...原创 2019-10-03 23:16:48 · 888 阅读 · 0 评论 -
java并发和高并发之线程安全性——有序性
一、有序性:1、定义:java内存模型JMM中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。2、可以通过如下方案保证有序性:volatile 关键字:保证一定的有序性synchronized 和 Lock:保证每个时刻有一个线程执行同步代码,相当于让线程顺序执行同步代码。Lock :保证每个时刻有一个线程...原创 2019-10-04 19:07:17 · 533 阅读 · 0 评论 -
java并发编程和高并发(一)
一、课程特点:1、之相关知识体系包括:线程安全、线程封闭、线程调度、同步容器、并发容器、AQS、J.U.C等等;2、高并发解决思路与手段,包括:扩容:缓存:队列:拆分:服务降级与熔断:数据库切库:分库分表:等等;3、4、最简单的场景举例:实现一个计数功能,即将一个数字进行累加,如果是一个线程,没问题,但是多个线程,比如同时有200个线...原创 2019-10-01 21:27:26 · 419 阅读 · 0 评论 -
史上最傻java代码记录
1、记录下最傻的一次代码书写: 因为部分原因,今天竟然书写了一段最傻的代码:在get()方法中调用了set() 方法! 程序运行时,画面直接崩溃! 打下错误日志,只是见到在快速重复打出找到信息失败的日志, 里面最后终于打出一些找到问题之后发现的,有些暗示的东西:at java.io.FileOutputStream.open(Native Method)...原创 2019-09-25 20:57:18 · 683 阅读 · 0 评论 -
java并发基础(二)
一、CPU多级缓存:数据的读取和存储都经过高速缓存,CPU核心和高速缓存之间有一条快速通道,在上方简化的图中,主存和高速缓存都连接在系统总线上。缓存容量远远小于主存,一般二级缓存大于一级缓存容量,但速度比一级慢,三级缓存大于二级缓存,但是速度更慢。1、为什么需要CPU cache ? 答:CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,...原创 2019-10-01 23:40:05 · 185 阅读 · 0 评论 -
Java-Preferences用法-入门
Properties提供的应用程序解决方案主要存在两个问题:(1)配置文件不能放在主目录中,因为某些OS(如Win9X)没有主目录的概念;(2)没有标准的文件命名规则,存在文件名冲突的可能性。Java中的Preferences类可以解决这些问题。Preferences提供一个存储配置信息的中心知识库,与平台无关。在Windows系统中,它存储在注册表中,在Linux中存储在本地文件系统转载 2017-08-08 20:51:22 · 12913 阅读 · 0 评论 -
Java程序员应该知道的10个调试技巧
本图片是在首页看到的,但是是在简书上发表的,感觉不错,暂时先这么保存在这儿了转载 2017-08-20 18:51:38 · 236 阅读 · 0 评论 -
java 递归实现快速排序
快速排序的基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。先看一下这幅图: 把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和小的那端比,比它小不交换,比他大交换。这样循环往复,一趟转载 2017-08-13 21:42:17 · 3577 阅读 · 2 评论