
java基础
文章平均质量分 88
1)java基础
2)java线程讲解
菜鸟Octopus
某生鲜领域供应链算法
展开
-
新生代Eden与两个Survivor区的解释
聊聊JVM的年轻代1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如...原创 2018-10-30 20:27:57 · 113 阅读 · 1 评论 -
设计模式的6大基本原则
一.单一职责原则 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。 单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的...原创 2018-10-29 09:21:55 · 364 阅读 · 1 评论 -
Template模板模式
定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。例如计算程序运行时间的类,建立起来基本的骨架,把不变的给子类去实现。思想:侧重点不是选择,你没得选择,你必须这么做,你 可以不参与某一部分内容的自定义;1.定义一个计算程序运行时间的基本骨架:package templatepattern;/** * ...原创 2018-11-07 11:38:09 · 350 阅读 · 1 评论 -
Strategy策略设计模式
1.策略模式定义Strategy模式也叫作行为模式;它对一系列算法进行封装,提供接口,使用哪一种算法,它把选择权交给客户端的用户,使用哪种算法让用户决定。2.策略模式的特点(1)提供了可以替换继承关系的方法(2)也避免了使用多重条件转移语句3.策略模式的缺点(1)客户端要知道所有的策略类,客户端的用户必须要了解这些算法的区别,从而选择合适自己的算法(2)策略模式会造成很...原创 2018-07-30 20:14:09 · 268 阅读 · 0 评论 -
Decorator装饰设计模式
装饰着设计模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案;(开放--关闭原则)设计原则:类应该对扩展开放,对修改关闭;java.io包中用到了大量的装饰设计模式;InputStream is = System.in;InputStreamReader isr = new InputStreamReader(is);BufferedReader ...原创 2018-08-19 16:24:25 · 250 阅读 · 0 评论 -
DuplicateKeyException异常处理:java向数据库插入数据异常
为你的应用程序创建自定义异常,可以提高代码的可读性和可维护性。原创 2018-08-22 17:37:40 · 60301 阅读 · 3 评论 -
Singleton单例设计模式
单例设计模式确保一个类只有一个实例,并提供一个全局访问点。所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例。单例有其独有的使用场景,一般是对于那些业务逻辑上限定不能多例只能单例的情况,例如:类似于计数器之类的存在,一般都需要使用一个实例来进行记录,若多例计数则会不准确。1.饿汉式:public class Singleto...原创 2018-08-28 20:54:51 · 318 阅读 · 1 评论 -
Java的反射讲解
1.反射的概念 在java中,只要提供类名,就可以通过反射机制来获取类的所有信息。 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接,但是反射使用不当会降低程序的效率。2.反射的作用2.1 在运行时判断任意一个对象所属的类;2.2 在运行时获取类的对象;2.3 在运行时访问j...原创 2018-08-30 14:34:09 · 203 阅读 · 1 评论 -
java并发工具类:CountDownLatch,CyclicBarrier,Semaphore,Exchange
jdk1.5之后,提供了非常多的辅助类来给我们使用,其中就有CountDownLatch,CyclicBarrier,Semaphore,Exchange一,等待多线程完成CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。它允许一个或多个线程等待其他线程执行完成操作;功能就是加强的join方法操作;它只有一次赋值,不能重置;例子...原创 2018-09-06 15:12:41 · 367 阅读 · 0 评论 -
Java:集合,Collection接口框架图
Java集合大致可分为Set、List和Map三种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java 5之后,增加了Queue体系集合,代表一种队列集合实现。Java集合框架主要由Collection和Map两个根接口及其子接口、实现类组成。本文仅探讨Collection接口及其子接口、实现类。1. Collect...原创 2018-10-18 19:31:18 · 355 阅读 · 0 评论 -
从IO到NIO的过程
1.在JDK1.3之前,只用到普通的IO方式进行数据的传输;2.在JDK1.3出现之后, 采用阻塞的BIO替代了普通的IO传输方式; 单线程的情况下,如果读或者写操作没有完成,那么它的当前线程是不能进行其它操作 ,其它的连接的读只能出现在当前线程写入完成或者出现异常之后;可以利用多线程来处理多个请求。在JDK1.4之...原创 2018-10-16 16:23:34 · 97 阅读 · 0 评论 -
Factory工厂类设计模式
工厂模式属于创建型设计模式,它提供了一种创建对象的最佳方式。1.简单工厂设计模式先定义个接口:public interface Milk { /** * 获取一个标准产品 * @return */ public String getName();}再定义接口的实现类1:public class Mengniu imple...原创 2018-11-04 16:13:35 · 1221 阅读 · 1 评论 -
Jdk8关于hashmap的新特性
关于jdk8中统计字符出现的个数,比较简便的方式,只在jdk8中可以使用,jdk7就不行!package leetcode;import org.junit.Test;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * @author zhangyu * @vers...原创 2018-12-11 10:16:20 · 1104 阅读 · 1 评论 -
多线程的应用与原理分析5(ReentrantLock)
同步锁 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能,它提供了与synchroinzed关键字类似的同步功能,只是它比synchronized更灵活,能够显示的获取...原创 2019-01-23 21:35:24 · 318 阅读 · 0 评论 -
多线程的应用与原理分析6(ReentrantLock)
ReentrantLock的实现原理分析 之所以叫重入锁是因为同一个线程如果已经获得了锁,那么后续该线程调用lock方法时不需要再次获取锁,也就是不会阻塞;重入锁提供了两种实现,一种是非公平的重入锁,另一种是公平的重入锁。怎么理解公平和非公平呢?如果在绝对时间上,先对锁进行获取的请求一定先被满足获得锁,那么这个锁就是公平锁,反之,就是不公平的。简单来说公平锁就是等待时间最长的线程...原创 2019-01-25 13:55:02 · 214 阅读 · 0 评论 -
多线程的应用与原理分析7(Condition)
Condition 通过前面的课程学习,我们知道任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式;JUC包提供了Condition来对锁进行精准控制,Condition是一个多线程协调通信的工具类,...原创 2019-01-26 19:51:56 · 273 阅读 · 1 评论 -
分布式系统基础--序列化
1. 序列化的意义2. 如何实现一个序列化操作3. 序列化的高阶认识4. 常见的序列化技术及应用5. Protobuf 实现原理分析6. 序列化框架的选型 序列化 Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 J...原创 2019-01-14 18:55:25 · 870 阅读 · 0 评论 -
分布式系统基础--通信框架RMI
1. 什么是 RPC2. 实现 JAVA RMI3. RPC 框架原理4. 基于 Java RMI 实践5. RMI 通信原理分析6. 实现自己的 RPC 框架什么是 RPC RPC(Remote Procedure Call,远程过程调用),一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远端系统资源;对于客户...原创 2019-01-15 11:06:21 · 449 阅读 · 0 评论 -
多线程的应用与原理分析8(countdownlatch)
限制JUC中提供了几个比较常用的并发工具类,比如CountDownLatch、CyclicBarrier、Semaphore。CountDownLatch countdownlatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从命名可以解读到countdown是倒数的意思,类似于我们倒计时的概念。 countdownlatc...原创 2019-01-26 21:45:51 · 278 阅读 · 1 评论 -
多线程的应用与原理分析10(Semaphore)
Semaphore semaphore也就是我们常说的信号灯,semaphore可以控制同时访问的线程个数,通过acquire获取一个许可,如果没有就等待,通过release释放一个许可。有点类似限流的作用。叫信号灯的原因也和他的用处有关,比如某商场就5个停车位,每个停车位只能停一辆车,如果这个时候来了10辆车,必须要等前面有空的车位才能进入。使用案例package loc...原创 2019-01-27 20:54:17 · 233 阅读 · 0 评论 -
多线程的应用与原理分析9(原子操作)
原子操作 当在多线程情况下,同时更新一个共享变量,由于我们前面讲过的原子性问题,可能得不到预期的结果。如果要达到期望的结果,可以通过synchronized来加锁解决,因为synchronized会保证多线程对共享变量的访问进行排队。 在Java5以后,提供了原子操作类,这些原子操作类提供了一种简单、高效以及线程安全的更新操作。而由于变量的类型很多,所以Atomi...原创 2019-01-27 12:58:40 · 272 阅读 · 0 评论 -
多线程的应用与原理分析11(线程池)
线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池;线程池就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。所以合理的使用线程池可以。 1. 降低创建线程和销毁线程的性能开销; 2. 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来的问题,类似起到了限流的作用;线程...原创 2019-01-28 19:58:11 · 256 阅读 · 2 评论 -
多线程的应用与原理分析1
1.多线程最终解决的就是“等待”问题,它的简单使用场景: 1)通过并行计算提高程序执行性能; 2)需要等待网络,1/0响应导致耗费大量的执行时间,可以采用异步线程的方式减少阻塞;2.tomcat7以前的io模型多线程的应用场景 1)客户端阻塞:如果客户端只有一个线程,这个线程发起读取文件的操作必须等到IO流返回,线程(客户端)才能做其他的事 ...原创 2019-01-20 21:47:57 · 342 阅读 · 0 评论 -
多线程的应用与原理分析2(线程的状态)
进程是操作系统进行资源分配的最小单元,线程作为操作系统调度的最小单元,并且能够让多线程同事执行,极大的提高了程序的性能,在多核环境下的优势更加明显。但是在使用多线程的过程中,如果对它的特性和原理不够理解,很容易造成各种问题。线程的状态 Java 线程既然能够创建,那么也势必会被销毁,所以线程是存在生命周期的,那么我们接下来从线程的生命周期开始去了解线程。线程一共有 6 种...原创 2019-01-21 20:39:26 · 230 阅读 · 0 评论 -
多线程的应用与原理分析3(原子性、可见性、有序性)
JMM怎么解决原子性、可见性、有序性的问题? 在Java中提供了一系列和并发处理相关的关键字,比如volatile、Synchronized、final、juc等,这些就是Java内存模型封装了底层的实现后提供给开发人员使用的关键字,在开发多线程代码的时候,我们可以直接使用synchronized等关键词来控制并发,使得我们不需要关心底层的编译器优化、缓存一致性的问题了,所以在Ja...原创 2019-01-22 16:36:36 · 434 阅读 · 0 评论 -
多线程的应用与原理分析4(synchronized)
synchronized的使用 在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了,Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。我们仍然沿用前面使用的案例,然后通过sy...原创 2019-01-23 14:32:20 · 229 阅读 · 0 评论 -
java.nio.charset.MalformedInputException错误解决
java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:281) ~[na:1.8.0_201] at sun.nio.cs.StreamDecoder.implRead(StreamDecod...原创 2019-06-04 10:32:07 · 7070 阅读 · 0 评论 -
The Tomcat connector configured to listen on port 8888 failed to start
Description:The Tomcat connector configured to listen on port 8888 failed to start. The port may already be in use or the connector may be misconfigured.Action:Verify the connector's configurati...原创 2019-06-21 11:39:25 · 1999 阅读 · 0 评论 -
Java使用google-ortools库的方法
环境设置:确保你正确添加了 OR-Tools 的依赖,并配置了必要的本地库。库使用:Google OR-Tools 提供了多种优化和求解算法,适用于多种优化问题,如线性规划、整数规划、约束满足问题等。原创 2019-06-26 11:35:00 · 6460 阅读 · 16 评论