自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码农架构

专注于系统架构、高可用、高性能、高并发类技术分享

  • 博客(230)
  • 资源 (73)
  • 论坛 (3)
  • 收藏
  • 关注

原创 没有源码调试!生产环境如何排除和优化 JVM?

生产环境中直接排查 JVM 的话,最简单的做法就是使用 JDK 自带的 6 个非常实用的命令行工具来排查。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可以使用命令行工具直接运行,其目录如下图所示:接下来我们来看看这些工具的具体使用。jps(虚拟机进程状况工具)jps(JVM Process Status tool,虚拟机进程状况工具)它的功能和 Linux 中的 ps 命令比较类似,用于列出正在运行的 JV.

2021-01-17 11:50:42 23 1

原创 阿里技术专员技术分享

希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开环大笑的路,加油。 如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。 最高级的自律,享受孤独说明:视频个人录制,更新较慢,还请见谅!

2020-11-09 22:14:56 172 2

原创 终于讲清楚了!为什么说堆排序没有快速排序快?

我们今天讲另外一种特殊的树,“堆”(Heap)。堆这种数据结构的应用场景非常多,最经典的莫过于堆排序了。堆排序是一种原地的、时间复杂度为 O(nlogn) 的排序算法。前面我们学过快速排序,平均情况下,它的时间复杂度为 O(nlogn)。尽管这两种排序算法的时间复杂度都是 O(nlogn),甚至堆排序比快速排序的时间复杂度还要稳定,但是,在实际的软件开发中,快速排序的性能要比堆排序好,这是为什么呢?现在,你可能还无法回答,甚至对问题本身还有点疑惑。没关系,带着这个问题,我们来学习今天的内容。等你学完

2021-01-19 22:37:55 2

原创 Nginx 最常用的两个功能:负载均衡和缓存

负载均衡和缓存功能是 Nginx 最常用的两个功能,这两个功能都属于高性能的调优手段,也和后端人员的关系比较密切,只有了解并会使用它们才能更好地调试和运行自己的项目。针对Nginx 负载均衡模式先前有整理过:Nginx 的负载均衡模式有哪些?它的实现原理是什么?。本篇主要围绕负载均衡和缓存功能和配置做归纳总结Nginx 健康监测被代理的服务器出现宕机的情况,如果被 Nginx 发现,那么 Nginx 就会将其自动标识为不可用,并且在一段时间内会禁止入站的请求访问到该服务器上。而这个发现服务器宕机

2021-01-19 14:45:38 6

原创 Nginx 的负载均衡模式有哪些?它的实现原理是什么?

Nginx 是后端工程师和运维工程师,以及前端工程师必须要掌握的必备技能,尤其在分布式系统应用越来越广泛的今天,Nginx 已经占据了 Web 服务器的大壁江山,并且还在不断地增长,比如国内的 BATJ、网易、新浪等公司都可以看到它的身影。Nginx 的负载均衡模式有哪些?它的实现原理是什么?什么是Nginx?Nginx 是一款开源的高性能轻量级 Web 服务器(也叫 HTTP 服务器),它主要提供的功能是:反向代理、负载均衡和HTTP 缓存。它于 2004 年首次公开发布,2011 年成立同名公司

2021-01-15 14:32:31 18 1

原创 数组阻塞队列(ArrayBlockingQueue)源码解读与分析

生产者消费者模式最核心的部分是生产者与消费者之间的特殊容器,而阻塞队列是特殊容器最常见的实现。JDK中定义了阻塞队列接口BlockingQueue,JDK通过该接口为我们提供了很多种阻塞队列的实现,其中包括本节的主角ArrayBlockingQueue,该类位于java.util.concurrent.ArrayBlockingQueue.java。该类需要实现的核心方法如下,下面我们详细分析ArrayBlockingQueue的实现原理。从名字可以看出它的存储结构就是一个数组,即基于数组实现了一个

2021-01-15 10:36:06 16 2

原创 为什么建议没事不要随便用工厂模式创建对象?

一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。所以,我们今天讲解的重点是前两种工厂模式。对于抽象工厂,稍微了解一下即可。除此之外,这里重点也不是原理和实现,因为这些都很简单,重点还是搞清楚应用场景:什么时候该用工厂模式?相对于直接 new 来创建对象,用工厂模式来创建究竟有什么好处呢?简单工厂模式 (Simple Factory)

2021-01-14 15:01:25 145 4

原创 如何利用策略模式避免冗长的 if-else/switch 分支判断代码?

策略模式。在实际的项目开发中,这个模式也比较常用。最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。对于策略模式。本篇我们讲解策略模式的原理和实现,以及如何用它来避免分支判断逻辑。后续我会通过一个具体的例子,来详细讲解策略模式的应用场景以及真正的设计意图。话不多说,进入主题策略模式的原理与实现策略模式可以使算法的变化独立于使用它们的客户端(这里的客户端代指使用算法的代码)。我们知道,工厂模式是解

2021-01-14 14:14:28 19 3

原创 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?

我在之前两讲介绍了Java集合框架的典型容器类,它们绝大部分都不是线程安全的,仅有的线程安全实现,比如Vector、Stack,在性能方面也远不尽如人意。幸好Java语言提供了并发包(java.util.concurrent),为高度并发需求提供了更加全面的工具支持。今天我要问你的问题是,如何保证容器是线程安全的?ConcurrentHashMap如何实现高效地线程安全?典型回答Java提供了不同层面的线程安全支持。在传统集合框架内部,除了Hashtable等同步容器,还提供了所谓的同步包装器(

2021-01-13 18:11:31 30 3

原创 动态代理是基于什么原理?

编程语言通常有各种不同的分类角度,动态类型和静态类型就是其中一种分类角度,简单区分就是语言类型信息是在运行时检查,还是编译期检查。与其近似的还有一个对比,就是所谓强类型和弱类型,就是不同类型变量赋值时,是否需要显式地(强制)进行类型转换。那么,如何分类Java语言呢?通常认为,Java是静态的强类型语言,但是因为提供了类似反射等机制,也具备了部分动态类型语言的能力。言归正传,今天我要问你的问题是,谈谈Java反射机制,动态代理是基于什么原理;典型回答反射机制是Java语言提供的一种基础功

2021-01-13 18:03:20 33 2

原创 强引用、软引用、弱引用、幻象引用有什么区别?

今天我要问你的问题是,强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?典型回答不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还''活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为null,就是可以被垃圾收集的了,当然具体回收时机还是要

2021-01-13 17:56:04 24 1

原创 谈谈final、finally、 finalize有什么不同?

Java 语言有很多看起来很相似,但是用途却完全不同的语言要素,这些内容往往容易成为面试官考察你知识掌握程度的切入点。今天,我要问你的是一个经典的Java基础题目,谈谈final、finally、finalize有什么不同?典型回答final可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不可以继承扩展,final的变量是不可以修改的,而final的方法也是不可以重写的(override)。finally则是Java保证重点代码一定要被执行的一种机制。我们可以使用

2021-01-13 17:50:52 28 2

原创 Exception和Error有什么区别?

世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。Java 语言在设计之初就提供了相对完善的异常处理机制,这也是 Java 得以大行其道的原因之一,因为这种机制大大降低了编写和维护可靠程序的门槛。如今,异常处理机制已经成为现代编程语言的标配。今天我要问你的问题是,请对比Exception和Error,另外,运行时异常与一般异常有什么区别?典型回答Exception 和 Erro

2021-01-13 17:46:31 34 2

原创 Java 并发编程:多线程并发控制工具 CountDownLatch,实现原理及案例

闭锁(CountDownLatch)是Java多线程并发中的一种同步器,它是JDK内置的同步器。通过它可以定义一个倒计数器,当倒计数器的值大于0时,所有调用await方法的线程都会等待。而调用countDown方法则可以让倒计数器的值减一,当倒计数器值为0时所有等待的线程都将继续往下执行。闭锁的主要应用场景是让某个或某些线程在某个运行节点上等待N个条件都满足后才让所有线程继续往下执行,其中倒计数器的值为N,每满足一个条件倒计数器就减一。比如下图中,倒计数器初始值为3,然后三个线程调用await方法后都在

2021-01-07 14:37:00 23 2

原创 Java 并发编程:多线程并发控制工具信号量Semaphore,实现原理及案例

信号量(Semaphore)是Java多线程兵法中的一种JDK内置同步器,通过它可以实现多线程对公共资源的并发访问控制。一个线程在进入公共资源时需要先获取一个许可,如果获取不到许可则要等待其它线程释放许可,每个线程在离开公共资源时都会释放许可。其实可以将Semaphore看成一个计数器,当计数器的值小于许可最大值时,所有调用acquire方法的线程都可以得到一个许可从而往下执行。而调用release方法则可以让计数器的值减一。信号量的主要应用场景是控制最多N个线程同时地访问资源,其中计数器的最大值即是许

2021-01-07 13:46:32 24 1

原创 Java 并发编程:AQS 的公平性

所谓公平是指所有线程对临界资源申请访问权限的成功率都一样,它不会让某些线程拥有优先权。通过几篇文章的分析我们知道了JDK的AQS的锁是基于CLH锁进行优化的,而其中使用了FIFO队列,也就是说等待队列是一个先进先出的队列。那是否就可以说每条线程获取锁时就是公平的呢?关于公平性,严格来说应该分成三个点来看:入队阶段、唤醒阶段以及闯入策略。友情链接:什么是JDK内置并发框架AQSAQS的原子性如何保证AQS对CLH锁的优化入队阶段唤醒阶段当线程节点成功加入等待队列后便成为等

2021-01-05 15:44:21 16 1

原创 Java 并发底层知识,锁获取超时机制知多少?

当我们在使用Java进行网络编程时经常会遇到很多超时的概念,比如一个浏览器请求过程就可能会产生很多超时的地方,当我们在浏览器发起一个请求后,网络socket读写可能会超时,web服务器响应可能会超时,数据库查询可能会超时。而对于Java并发来说,与超时相关的内容主要是线程等待超时和获取锁超时,比如调用Object.wait(long)就会使线程进入等待状并在指定时间后等待超时。此篇主要讲解Java内置锁的获取操作的超时机制。当大量线程对某一锁竞争时可能导致某些线程在很长一段时间都获取不了锁,在

2020-12-27 17:37:34 37 1

原创 Java 并发编程:AQS 的自旋锁

互斥锁在AQS的互斥锁与共享锁中已经做了详细介绍,一个锁一次只能由一个线程持有,其它线程则无法获得,除非已持有锁的线程释放了该锁。这里为什么提互斥锁呢?其实互斥锁和自旋锁都是实现同步的方案,最终实现的效果都是相同的,但它们对未获得锁的线程的处理方式却是不同的。对于互斥锁,当某个线程占有锁后,另外一个线程将进入阻塞状态。与互斥锁类似,自旋锁保证了公共数据在任意时刻最多只能由一条线程获取使用,不同的是在获取锁失败后自旋锁会采取自旋的处理方式。自旋锁自旋锁是一种非阻塞锁,它的核心机制就在自旋两

2020-12-24 16:38:13 64 1

原创 Java 并发编程:AQS 的互斥锁与共享锁

我们知道现代机器处理器几乎都是多核多线程的,引入多核多线程机制是为了尽可能提升机器整体处理性能。但是多核多线程也会带来很多并发问题,其中很重要的一个问题是数据竞争,数据竞争即多个线程同时访问共享数据而导致了数据冲突(不正确)。数据竞争如果没处理好则意味着整个业务逻辑可能出错,所以在高并发环境中我们要特别注意这点。数据竞争产生的条件存在数据竞争的场景必须满足以下几个条件:多个线程对某个共享数据进行访问。 这些线程同时地进行访问。 访问即是读或写数据操作。 至少有一个线程是执行写数据操作。

2020-12-22 11:21:09 32 1

原创 Java 并发编程:AQS 的原子性如何保证

当我们研究AQS框架时(对于AQS不太熟知可以先阅读《什么是JDK内置并发框架AQS》,会发现AbstractQueuedSynchronizer这个类很多地方都使用了CAS操作。在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性。我们知道Java被隔离在硬件之上,硬件级别的操作明显力不从心。这时为了能够执行操作系统层面的操作,就必须要通过用C++编写的native本地方法来扩展实现。一般可以通过JNI方式实现Java代码调用C++代码Unsafe调用JDK提供了一个类来满足CA

2020-12-21 11:02:21 23 1

原创 Java并发编程:深入理解Synchronized的悲观并发策略

互斥锁我们知道volatile它不足以保证数据同步,那么就必须要引入锁来确保。互斥锁是最常见的同步手段,在并发过程中,当多条线程对同一个共享数据竞争时,它能保证共享数据同一时刻只能被一条线程使用,而其他线程只有等到锁释放后才能重新进行竞争。对于Java开发人员,我们最熟悉的肯定就是用synchronized关键词来完成锁功能。在涉及到多线程并发时,针对某些变量,你应该会毫不犹豫地加上synchronized去保证变量的同步性。关于synchronized在C/C++语言中,我们可以直接使用.

2020-12-17 19:03:30 31 1

原创 Java并发编程:volatile能否保证数据的同步

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。关于存储介质作为Java开发我们都了解Java内存模型,JMM为了提高执行性能引入了工作内存和主存两个概念。在继续讨论之前必须先搞清四种存储介质:寄存器、高级缓存、RAM和ROM。RAM与ROM大家都比较熟悉了,可以看成是我们经常说的内存与硬盘。寄存器属于处理器里面的一部分,而高级缓存cach

2020-12-17 18:08:17 39 1

原创 Java 并发编程:如何防止在线程阻塞与唤醒时死锁

Java并发编程:多线程如何实现阻塞与唤醒说到suspend与resume组合有死锁倾向,一不小心将导致很多问题,甚至导致整个系统崩溃。接着看另外一种解决方案,我们可以使用以对象为目标的阻塞,即利用Object类的wait()和notify()方法实现线程阻塞。当线程到达监控对象时,通过wait方法会使线程进入到等待队列中。而当其它线程调用notify时则可以使线程重新回到执行队列中,得以继续执行思维不同针对对象的阻塞编程思维需要我们稍微转变下思维,它与面向线程阻塞思维有较大差异。如前面的sus..

2020-12-17 00:31:26 121 1

原创 Java 并发编程:多线程如何实现阻塞与唤醒

线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题。如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节。Java为我们提供了多种API来对线程进行阻塞和唤醒操作,比如suspend与resume、sleep、wait与notify以及park与unpark等等。睡眠控制线程阻塞与唤醒的最简单方式就是sleep了,Java通过sleep(n)方法能让线程进入到阻塞等待状态,直到休眠时间达到指定值后自动唤醒

2020-12-16 00:35:00 38 1

原创 Java 并发编程:任务执行器 Executor 接口

任务执行器(Executor)是一个接口,位于java.util.concurrent包下,它的作用主要是为我们提供任务与执行机制(包括线程使用和调度细节)之间的解耦。比如我们定义了一个任务,我们是通过线程池来执行该任务,还是直接创线程来执行该任务呢?通过Executor就能为任务提供不同的执行机制。执行器的实现方式各种各样,常见的包括同步执行器、一对一执行器、线程池执行器、串行执行器等等。下面我们将分别介绍这四种执行器,以帮助我们来理解执行器概念。同步执行器同步执行器是最简单的执行器,提交给它的.

2020-12-15 11:33:16 41 1

原创 Java 并发编程:多线程并发内存模型

多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。如果不希望处理器在大部分时间里都处于等待其他资源的状态,就必须使用一些手段去把处理器的运算能力“压榨”出来,否则就会造成很大的浪费,而让计算机同时处理几项任务则是最容易想到、也被证明是非常有效的“压榨”手段关于可见性在多核多线程环境中.

2020-12-14 10:25:47 32 1

原创 Java并发编程:并发中死锁的形成条件及处理

死锁是一种无限的互相等待的状态,两个或两个以上的线程或进程构成一个互相等待的环状。以两个线程为例,线程一持有A锁同时在等待B锁,而线程二持有B锁同时在等待A锁,这就导致两个线程互相等待无法往下执行。现实生活中一个经典的死锁情形就是四辆汽车通过没有红绿灯的十字路口,假如四辆车同时到达中心的,那么它们将形成一个死锁状态。每辆车拥有自己车道上的使用权,但同时也在等另外一辆汽车让出另外一条道的使用权死锁的例子该例子中一共有lock1和lock2两个锁。线程一启动后先尝试获取lock1锁,成功获取lock

2020-12-13 12:54:43 36 1

原创 Java并发编程:Java 序列化的工作机制

JDK内置同步器的实现类经常会看到java.io.Serializable接口,这个接口即是Java序列化操作,这样看来序列化也是同步器的一种机制。关于序列化本文主要分析Java中的序列化机制,并看看AQS同步器的序列化,掌握序列化机制才能完整理解JDK内置的同步工具的实现。在程序中为了能直接以Java对象的形式进行保存,然后再重新得到该Java对象,我们需要序列化能力。序列化其实可以看成是一种机制,即按照一定的格式将Java对象的状态转成介质可接受的形式,以方便存储或传输。Java中进行序列.

2020-12-11 17:03:56 28 1

原创 Java并发编程:进程、线程、并行与并发

一谈到Java并发编程,我们一般就会联想起进程、线程、并行、并发等等概念。那么这些概念都代表什么呢?进程与线程有什么关系?并发与并行又是什么关系呢?进程与线程进程是指程序的一次动态执行过程,通常我们说计算机中正在执行的程序就是进程,每个程序都会对应着一个进程。一个进程包含了从代码加载到执行完成的一个完整过程,它是操作系统资源分配最小单元。而线程则是比进程更小的执行单位,是CPU调度和分派的基本单位。每个进程至少有一个线程,反过来一个线程只能属于一个进程,线程可以对进程所有的资源进行调度和运算。.

2020-12-09 22:09:52 36 1

原创 Redis 持久化方式 -RDB

针对Redis的话题估计有些读者已经开始反感了,昨天还是有一些读者困惑,这就具体讲述下Redis持久化方式-RDB的实现方式~触发时机手动触发: save: 阻塞当前 Redis 服务器, 直到 RDB 过程完成为止, 对于内存比较大的实例会造成长时间阻塞, 线上环境不建议使用 bgsave: Redis 进程执行 fork 操作创建子进程, RDB 持久化过程由子进程负责, 完成后自动结束。阻塞只发生在 fork 阶段, 一般时间很短 自动触发 RDB 的持久化机制, .

2020-12-08 22:49:06 24 1

原创 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念

PO(persistant object) 持久对象在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合。 PO 中应该不包含任何对数据库的操作。DO(Domain Object)领域对象就是从现实世界中抽象出来的有形或无形的业务实体。一般和数据中的表结构对应。TO(Tran

2020-12-03 09:56:36 43 1

原创 领域驱动设计的基础知识总结

1. 什么是领域(Domain)我们所做的软件系统的目的都是来解决一系列问题,例如做一个电商系统来在线销售自己企业的产品;做一个灰度发布平台来提升服务的质量和稳定性。任何一个系统都会属于某个特定的领域,例如:论坛是一个领域:要做一个论坛,那这个论坛的核心业务是确定的:比如用户发帖、回帖等核心基本功能; 电商系统是一个领域:只要是电商领域的系统,那核心业务就是:商品浏览、购物车、下单、减库存、付款交易等核心环节;同一个领域的系统都具有相同的核心业务,因为他们要解决的问题的本质是类似的。因此可以推断

2020-12-03 09:47:19 27 1

原创 浅谈我对DDD领域驱动设计的理解

从遇到问题开始当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决。比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品。所以,自然而然就想到要做一个普通电商系统,用于实现在线销售自己企业产品的目的。再比如,我是一家互联网公司,公司有很多系统对外提供服务,面向很多客户端设备。但是最近由于各种原因,导致服务经常出故障。所以,我们希望通过各种措施提高服务的质量和稳定性。其中的一个措施就是希望能做一个灰度发布的平台,这个平台可

2020-12-03 09:45:16 95 1

原创 架构之重构的12条军规!送给自己的礼物~

对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子。在遍地 App 的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴。但是,随着应用的不断发展,最初的架构往往面临着各种问题,比如无法满足客户的需求、无法实现应用的扩展、无法实现新的特性等等。在这种情况下,我们如何避免一些坑,尽量比较成功地实现架构的重构,是很多开发者和架构师亟需解决的问题。在这里,跟大家分享一下 Uber 的工程主管 Raffi Krikorian 的 12 条规则,并附上.

2020-12-01 14:35:18 32 1

翻译 关于架构优化和设计,架构师必须知道的事情

概述你可以叫它 SOA 的新玩法、微服务、或者任意其它酷炫的名字。近几年来随着互联网的飞速发展,新的架构实践方式不断涌现,但是有一件事情是永恒不变的,那就是-“架构之道”;关于如何设计出灵活、高可用性以及能够快速适应变化的系统架构,我们依旧还有很大的发挥空间。本文会介绍关于如何构建前沿的、易维护的、安全的架构的几个要点,同时你也可以把它当作系统设计的准则或者用它来验证现有的架构是否合理。就像我们经常所说的:没有最好的架构,只有最合适的架构。一个好的架构师,可以根据具体的需求、所拥有的资源等因素综合考

2020-12-01 14:23:31 57 1

原创 JDK15 正式发布,新增功能预览!

JDK 15 在 2020 年 9 月 15 号正式发布了,这次发布的主要功能有: JEP 339:EdDSA 数字签名算法 JEP 360:密封类(预览) JEP 371:隐藏类 JEP 372:删除 Nashorn JavaScript 引擎 JEP 373:重新实现 Legacy DatagramSocket API JEP 374:重新实现 DatagramSocket API JEP 375:实例模式匹配(第二次预览) J

2020-11-29 14:41:07 43

原创 访问者模式(VisitorPattern)

定义被访问对象放开胸怀,接受不同的访问者进行访问,且访问者对被访者数据进行处理。结构图角色与理解访问者模式共分为五种角色: Visitor(抽象访问者):内部声明一个对每一个具体元素进行访问的操作。 Concrete Visitor(具体访问者):继承抽象访问者,实现对所有具体元素的一种访问操作。 Element(抽象元素):声明accept()方法,以抽象访问者作为参数,供访问者访问。 Concrete Element(具体元素):实现accept()方法,调用访.

2020-11-29 13:18:55 25

原创 模板方法模式(StrategyPattern)

定义将一系列方法中的固定方法提取到抽象层,完成代码的复用,且通过子类的重写行为改变类的模板方法的功能的改变。结构图角色与理解模板方法模式共分为两种角色: Abstract Class(抽象类):抽象类,提供默认实现的具体方法与供子类实现的抽象方法。 Concrete Class(具体子类):实现父类声明的抽象方法,重写父类的逻辑。 抽象类提供模板方法(包含基本方法的执行顺序,可被重写),里边包含具体方法(子类的通用方法),抽象方法(供子类重写的方法),钩子方法(供子类重.

2020-11-29 13:16:38 26

原创 策略模式(StrategyPattern)

定义定义一系列算法,并将这些算法封装起来,并让他们能够相互替换,也称为政策模式(Policy)。结构图角色与理解策略模式共分为三种角色: Context(上下文环境):持有抽象策略类,调用策略方法。 Strategy(抽象策略类):声明策略方法。 Concrete Strategy(具体策略类):实现策略方法。 Context持有State的引用,完成对ConcreteStrategy中策略方法的调用。核心代码抽象策略类public interface .

2020-11-29 13:15:06 67

原创 状态模式(StatePattern)

定义复杂对象不同状态下的行为封装与状态转换。结构图角色与理解状态模式共分为三种角色: Context(上下文环境):将自身的状态与行为分离出去,封装成状态类,持有抽象状态类的引用,根据自身属性变换更换具体状态类。 State(抽象状态类):具体状态类的抽象,可以持有上下文环境的引用来更换状态。 Concrete State(具体状态类):实现不同状态下的不同行为。 上下文环境引用抽象状态类完成行为的调用,状态类的状态变化可以有上下文环境处理,也可以由状态类处理。 .

2020-11-29 13:08:40 19 1

微信小程序源码-合集1.rar

【微信小程序-源码合集】该合集主要整理 包含交友互动、节日祝福、金融行业、旅游行业、论坛系列、美容行业!

2020-09-04

微信小程序源码-合集5.rar

微信小程序源码,包含:豆瓣、微信、论坛、停车、房贷计算、股票、蜗牛生活、物品回收、学车预约、住房装修、斗鱼直播、水利、快拍、同城等源码。

2020-09-04

微信小程序源码-合集4.rar

微信小程序源码,包含:3C手机商城、kindle图书商城、大宅小屋拼团、球鞋商城、扫码购物、一元夺宝、喜茶店铺、京东首页、京东白条、小米商城等35个商城类源码。

2020-09-04

微信小程序源码-合集3.rar

微信小程序源码,包含:汤总便利、茶铺门店、滴滴拼车、同城拼车(带后台)、企业OA系统、房地产公司展示、华云智慧园区、汽车维修、评测、停车等源码。

2020-09-04

微信小程序源码-合集2.rar

包含:Bookshare 借书小程序、课程预约、蒙台梭利幼教、托福资料(完整带Java后台)、校内网小程序、悦读神器、云文档等源码!

2020-09-04

微信小程序源码-合集6.rar

微信小程序源码,包含:图片展示、外卖点餐、小工具类、小游戏类、演绎博览、新闻资讯、医疗保健、艺术生活等源码。

2020-09-04

微信小程序源码-合集2.zip

包含:Bookshare 借书小程序、课程预约、蒙台梭利幼教、托福资料(完整带Java后台)、校内网小程序、悦读神器、云文档等源码

2020-08-31

dos命令大全

dos命令大全 便于使用DOS命令,开发者必备

2014-11-06

JFinal完整Demo

JFinal完整Demo 由于最近网上老是有人问道JFinal的问题 这里整理了一份完整的JFinal完整Demo,供初学者使用!

2014-12-09

网络拓扑图源码

网络拓扑图 后期的做了相应的改善和修改! 这里是修改后的源码

2015-03-23

微信小程序源码-合集1.zip

【微信小程序-源码合集】该合集主要整理 包含交友互动、节日祝福、金融行业、旅游行业、论坛系列、美容行业

2020-08-30

Git 的基础使用-高清版.pdf

蚂蚁金服技术专家整理,Git 的基础使用-高清版,包含Git 日常操作以及使用规则配置学习路线指导~

2020-09-11

ZooKeeper 面试题(30道ATM精选问题).pdf

zookeeper 面试题精选(30道ATM面试题),码农架构技术号独家整理,更对内容可关注技术号获取~

2020-11-10

IntelliJ Idea for Mac 默认快捷键布局中文版

IntelliJ Idea for Mac 默认快捷键布局中文版,常用快捷指南!可以快速查找IDEA 对应的快捷!

2020-11-03

mac Docker 安装包.zip

mac 系统 docker 安装包,官网下载慢的同学可以在此下载,安装完后使用加速器可以提升获取Docker官方镜像的速度

2020-10-14

Java并发体系.pdf

蚂蚁金服技术专家整理,Java并发体系-高清版思维导图! 包含日常开发以及集群应用并发技术思维导图~

2020-09-11

docker 学习思维导图-高清版本

蚂蚁金服技术专家整理,docker 学习思维导图-高清版本!

2020-09-11

innodb_force_recovery.zip

如果MySQL的 InnoDB 文件的损坏,该如何手动恢复? 手工案例数据库文件!码农架构读者学习使用~

2020-09-06

16款后台管理模板.zip

1.城建管理系统平台后台模板 2.超漂亮的电子商务管理平台模板 3.办公自动化系统OA简单后台模板 4.电子商务网站后台模板 .....

2014-12-23

DOS命令大全详解

DOS命令大全详解: 了解DOS下的内存管理机制, dos获得更多常规内存, dos如何进行多种系统配置, dos出错提示与对策, dos其它命令, DOS下硬件设备的使用与设置, DOS系统的维护 DOS下内存的配置 CONFIG.SYS文件的命令与配置

2014-12-23

Java反编译工具

最为Javak开发程序员不可少的一个软件 这个如软件是免装版的!

2014-12-17

Apache POI Jar

文件为Apache POI 版本3.9 提供下列几种实现 HSSF - 提供读写Microsoft Excel格式档案的功能。 XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。 HWPF - 提供读写Microsoft Word格式档案的功能。 HSLF - 提供读写Microsoft PowerPoint格式档案的功能。 HDGF - 提供读写Microsoft Visio格式档案的功能。 满足报表的的开发

2014-12-17

Android 高仿酷狗音乐播放器源码

Android 高仿酷狗音乐播放器源码 附带 Android学习网址

2014-12-17

Web系统模板

里面有34份完整的系统模板 能够满足基本的系统要求,后期只需稍作修改即可使用!

2014-12-09

apache-tomcat

apache-tomcat集群附带完整案例和合所需要的文件 以供学习参考

2014-11-13

middlegenide

middlegenide_1.3.3 |--features |--plugins 然后直接copy到您的Eclipse的安装路径下,替换它的features和plugins文件夹,启动Eclipse即可享用。

2014-11-10

apache-cxf-2.3.0-jar

apache cxf 2 3 2 相关jar包

2014-11-10

360眼睛护士

360眼睛护士 系统开发编辑器中解决保护色问题

2014-11-06

DynamipsGUI

DynamipsGUI 软件开发,资料完全,Demo案例

2014-11-06

jquery-easyui-1.4.1.zip

jquery-easyui-1.4.1.zip 完整版里面附带各种Demo,方便快速开发与使用

2014-11-06

snmpb安装包下载

snmpb资源 snmpb安装包下载 安装包

2014-11-06

JFinal所需的Jar

JFinal 自身对第三方无依赖,但当需要第三方功能支持时则需要添加相应的 jar 文件 1:只有 jfinal-bin-xx.jar 文件是必需的。其它jar文件按需所用。 2:jetty-server-8.1.8.jar 用来支持无需额外安装 tomcat jetty 等 web server 即可开始开发,同时它也是支持热部署的必要包。jetty-server-8.1.8.jar 中 包含:jetty-8.1.8发行版"/lib"目录下所有jetty模块jar包、servlet-api-3.0.jar、 "/lib/jsp"下的 com.sun.el-2.2.0.v201108011116.jar、 javax.el-2.2.0.v201108011116.jar、javax.servlet.jsp-2.2.0.v201112011158.jar org.apache.jasper.glassfish-2.2.2.v201112011158.jar 3:freemarker-2.3.20.jar 支持 FreeMarker 视图类型。 4:javax.servlet.jsp.jstl-1.2.0.v201105211821.jar 与 org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar 支持 jsp 视图类型 5:velocity-1.7.jar、velocity-1.7-dep.jar支持 Velocity 视图。 6:cos-26Dec2008.jar 支持文件上传功能。 7:mysql-connector-java-5.1.20-bin.jar 支持 mysql 数据库。 8:c3p0-0.9.1.2.jar 数据库连接池。 9:ehcache-core-2.5.2.jar、slf4j-api-1.6.1.jar、slf4j-log4j12-1.6.1.jar 支持 EhCache。 在使用EhCache时需要有ehcache.xml文件。 10:以org.springframework 打头的所有 jar 包支持 SpringPlugin 11:sqlite-jdbc-3.7.2.jar 支持 Sqlite 数据库 12:druid-1.0.5.jar 支持 Druid 数据库连接池 13:ojdbc6.jar Oracle Database 11g Release 2 (11.2.0.3) JDBC Driver 14:log4j-1.2.16.jar 支持 log4j 日志,当此文件不存在时,自动切换至 JDK Logger, 注意,log4j需要相应的配置文件 log4j.properties,否则当log4j-1.2.16.jar 存在 而log4j.properties 不存在时无日志输出。jdk logger 需要的logging.properties文件 也在此目录下提供了

2014-11-07

Jquery_Dialog

Dialog模板: 这里有一共有三套Jquery Dialog模板,都是经过后期处理简洁化的Jquery 适用于Web前端的各种系统上的运用 也可以作为初学者使用 一共三个积分,下载完成后可以评论获取一积分,两个积分作为酬劳,谢谢!

2014-08-27

Dialog模板

这里有一共有一套Jquery Dialog模板,都是经过后期处理简洁化的Jquery Dialog模板 适用于Web前端的各种系统上的运用 也可以作为初学者使用 资源一共1积分,下载完可以评论获取1积分!谢谢

2014-08-27

Dialog Demo

这里有一套完整的Dialog Demo,适用于各种系统,自定义的Dialog可以随意修改 样式 下载资源1积分就当报酬,下载完后评论可获得返回1积分!

2014-08-27

SSHSecureShellClient客户端安装

SSHSecureShellClient客户端安装 开发技术

2014-05-23

EasyUI管理系统

EasyUI管理系统 完整系统模板 EasyUI 设计,方便简洁

2014-05-23

artDialog使用完整案例

artDialog使用完整案例 包含完整案例,和所需的jar API文档

2013-12-09

wfChart完整使用案例

wfChart完整使用案例 实用性强,工鞥强大

2013-12-09

FusionChartsFree完整使用案例

FusionChartsFree完整使用案例 各种图表显示 FCF_Area2D.swf FCF_Column3D.swf FCF_MSColumn3D.swf ...

2013-12-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除