![](https://img-blog.csdnimg.cn/direct/fc67654eb61e44c6bbb2f322d4acc52d.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java基础
文章平均质量分 74
1)java基础
2)java线程讲解
菜鸟Octopus
某生鲜领域供应链算法
展开
-
设计模式的6大基本原则
一.单一职责原则 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。 单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的...原创 2018-10-29 09:21:55 · 297 阅读 · 1 评论 -
Template模板模式
定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中;模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。例如计算程序运行时间的类,建立起来基本的骨架,把不变的给子类去实现。思想:侧重点不是选择,你没得选择,你必须这么做,你 可以不参与某一部分内容的自定义;1.定义一个计算程序运行时间的基本骨架:package templatepattern;/** * ...原创 2018-11-07 11:38:09 · 292 阅读 · 1 评论 -
Strategy策略设计模式
1.策略模式定义Strategy模式也叫作行为模式;它对一系列算法进行封装,提供接口,使用哪一种算法,它把选择权交给客户端的用户,使用哪种算法让用户决定。2.策略模式的特点(1)提供了可以替换继承关系的方法(2)也避免了使用多重条件转移语句3.策略模式的缺点(1)客户端要知道所有的策略类,客户端的用户必须要了解这些算法的区别,从而选择合适自己的算法(2)策略模式会造成很...原创 2018-07-30 20:14:09 · 218 阅读 · 0 评论 -
Command命令设计模式
命名模式其实是比较好理解的,顾名思义,老师想让学生交作业,而不是跟每个学生都说,而是跟班长说,让学习委员传达老师的命令;三者相互解耦,任何一方都不用去依赖其他人,只需要做好自己的事儿就行!老师要的是结果,不会去关注学生到底听到了没有。命令模式的例子:1.定义个monitor的接口package CommandPattern;// 一个Monitor的接口public inter...原创 2018-09-05 20:11:22 · 236 阅读 · 1 评论 -
多线程的三种实现方式
多线程的实现有三种方式:1.继承Thread类2.实现Runnable接口3.实现Callable接口,不过该方式需要利用线程池第一种和第二种方式比较简单,就不赘述了;主要是讲解第三种方式。实现Callable接口的例子:package executorpool;import java.util.concurrent.Callable;public class M...原创 2018-09-05 15:32:51 · 3499 阅读 · 0 评论 -
代码中能都用位运算代替的地方
在编写代码时,有几个地方可以考虑使用位运算来代替一般的算术运算,以提高效率。下面列出了一些常见的情况:原创 2022-02-09 10:30:13 · 1502 阅读 · 0 评论 -
服务接收Gzip格式数据
2)通过MultipartFile接收。数据压缩后,传给服务器,通过接口传递。1)通过byte[] 数组接收。原创 2023-08-28 23:30:00 · 127 阅读 · 0 评论 -
影响java并行性能5个主要因素
文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。相关文章:LeetCode:55. Jump Game(跳远比赛) Leetcode:300. Longest Increasing Subsequence(最大增长序列) LeetCode:560. Subarray Sum Equals K..原创 2020-05-26 15:44:41 · 641 阅读 · 0 评论 -
Decorator装饰设计模式
装饰着设计模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案;(开放--关闭原则)设计原则:类应该对扩展开放,对修改关闭;java.io包中用到了大量的装饰设计模式;InputStream is = System.in;InputStreamReader isr = new InputStreamReader(is);BufferedReader ...原创 2018-08-19 16:24:25 · 205 阅读 · 0 评论 -
DuplicateKeyException异常处理:java向数据库插入数据异常
向数据库中插入数据异常:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DuplicateKeyException: ### Error updating database. Cause...原创 2018-08-22 17:37:40 · 58803 阅读 · 3 评论 -
动态规划1-0背包问题
ArtifactTransferException:Failuretotransferjavax.persistence:persistence-api:jar:1.0 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted unt...原创 2018-08-24 10:41:24 · 171 阅读 · 0 评论 -
Singleton单例设计模式
单例设计模式确保一个类只有一个实例,并提供一个全局访问点。所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例。单例有其独有的使用场景,一般是对于那些业务逻辑上限定不能多例只能单例的情况,例如:类似于计数器之类的存在,一般都需要使用一个实例来进行记录,若多例计数则会不准确。1.饿汉式:public class Singleto...原创 2018-08-28 20:54:51 · 263 阅读 · 1 评论 -
红黑树与平衡二叉树(AVL)树
红黑树定义:1. 每个节点要么是红色,要么是黑色;2. 所有的叶子结点是空结点,且都是黑色;3. 如果一个结点是红色的,那么它的子节点都是黑色;4. 根结点永远是黑色;性质:1. 红节点的孩子节点不能是红节点;2. 从根到前端节点的任意一条路径上的黑节点一样多;这两条性质确保该树的高度为logN,所以是平衡树。 红黑树是每个节点都带颜色的树,...原创 2018-08-30 10:14:35 · 445 阅读 · 0 评论 -
notify和wait实现生产者与消费者
生产者和消费者模式,当缓冲区里面没有数据,生产者生产数据到缓冲区中;当缓冲区里面有数据生产者就阻塞,消费者就从换城区里面消费数据;1.如果没有学生,set线程就设置学生的名字和年纪;2.如果有学生,get线程就取出学生的名字和年龄;一,SetThread类 SetThread.javapackage producerandcomsumer;/** * 类...原创 2018-09-03 21:02:06 · 263 阅读 · 0 评论 -
java并发工具类:CountDownLatch,CyclicBarrier,Semaphore,Exchange
jdk1.5之后,提供了非常多的辅助类来给我们使用,其中就有CountDownLatch,CyclicBarrier,Semaphore,Exchange一,等待多线程完成CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。它允许一个或多个线程等待其他线程执行完成操作;功能就是加强的join方法操作;它只有一次赋值,不能重置;例子...原创 2018-09-06 15:12:41 · 255 阅读 · 0 评论 -
ConcurrentHashMap的实现原理与使用
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7).转载 2018-09-10 21:34:47 · 269 阅读 · 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 · 315 阅读 · 0 评论 -
Factory工厂类设计模式
工厂模式属于创建型设计模式,它提供了一种创建对象的最佳方式。1.简单工厂设计模式先定义个接口:public interface Milk { /** * 获取一个标准产品 * @return */ public String getName();}再定义接口的实现类1:public class Mengniu imple...原创 2018-11-04 16:13:35 · 1127 阅读 · 1 评论 -
java中Arrays.sort方法的排序
Java的Arrays类中有一个sort()方法,该方法是Arrays类的静态方法,在需要对数组进行排序时,是非常好用的,一般需要排序的时候,我是直接使用;如果是逆序排序需要自己定义排序规则。方法1:package leetcode;import org.junit.Test;import java.util.Arrays;import java.util.Comp...原创 2018-12-10 14:54:07 · 2815 阅读 · 1 评论 -
LeetCode:621. Task Scheduler(任务规划问题)
Given a char array representing tasks CPU need to do. It contains capital letters A to Z where different letters represent different tasks.Tasks could be done without original order. Each task co...原创 2018-12-23 11:32:24 · 794 阅读 · 0 评论 -
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 · 1023 阅读 · 1 评论 -
hashmap源码的简单实现
看了hashmap的源码,打算手写一个hashmap,在工作当中虽然用不到,但是可以提升思维,通过学习源码来提升自己,下面这是我写的hashmap:1.首先定义mymap接口mymap.havapackage hashmapdemo;/** * MyMap接口,里面是主类中需要实现的方法 * @author zhangyu * **/public interfac...原创 2019-01-02 21:19:13 · 172 阅读 · 0 评论 -
多线程的应用与原理分析5(ReentrantLock)
同步锁 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能,它提供了与synchroinzed关键字类似的同步功能,只是它比synchronized更灵活,能够显示的获取...原创 2019-01-23 21:35:24 · 257 阅读 · 0 评论 -
多线程的应用与原理分析6(ReentrantLock)
ReentrantLock的实现原理分析 之所以叫重入锁是因为同一个线程如果已经获得了锁,那么后续该线程调用lock方法时不需要再次获取锁,也就是不会阻塞;重入锁提供了两种实现,一种是非公平的重入锁,另一种是公平的重入锁。怎么理解公平和非公平呢?如果在绝对时间上,先对锁进行获取的请求一定先被满足获得锁,那么这个锁就是公平锁,反之,就是不公平的。简单来说公平锁就是等待时间最长的线程...原创 2019-01-25 13:55:02 · 150 阅读 · 0 评论 -
多线程的应用与原理分析7(Condition)
Condition 通过前面的课程学习,我们知道任意一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、notify()以及notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式;JUC包提供了Condition来对锁进行精准控制,Condition是一个多线程协调通信的工具类,...原创 2019-01-26 19:51:56 · 205 阅读 · 1 评论 -
分布式系统基础--序列化
1. 序列化的意义2. 如何实现一个序列化操作3. 序列化的高阶认识4. 常见的序列化技术及应用5. Protobuf 实现原理分析6. 序列化框架的选型 序列化 Java 平台允许我们在内存中创建可复用的 Java 对象,但一般情况下,只有当 JVM 处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 J...原创 2019-01-14 18:55:25 · 754 阅读 · 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 · 391 阅读 · 0 评论 -
多线程的应用与原理分析8(countdownlatch)
限制JUC中提供了几个比较常用的并发工具类,比如CountDownLatch、CyclicBarrier、Semaphore。CountDownLatch countdownlatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从命名可以解读到countdown是倒数的意思,类似于我们倒计时的概念。 countdownlatc...原创 2019-01-26 21:45:51 · 210 阅读 · 1 评论 -
多线程的应用与原理分析10(Semaphore)
Semaphore semaphore也就是我们常说的信号灯,semaphore可以控制同时访问的线程个数,通过acquire获取一个许可,如果没有就等待,通过release释放一个许可。有点类似限流的作用。叫信号灯的原因也和他的用处有关,比如某商场就5个停车位,每个停车位只能停一辆车,如果这个时候来了10辆车,必须要等前面有空的车位才能进入。使用案例package loc...原创 2019-01-27 20:54:17 · 188 阅读 · 0 评论 -
多线程的应用与原理分析9(原子操作)
原子操作 当在多线程情况下,同时更新一个共享变量,由于我们前面讲过的原子性问题,可能得不到预期的结果。如果要达到期望的结果,可以通过synchronized来加锁解决,因为synchronized会保证多线程对共享变量的访问进行排队。 在Java5以后,提供了原子操作类,这些原子操作类提供了一种简单、高效以及线程安全的更新操作。而由于变量的类型很多,所以Atomi...原创 2019-01-27 12:58:40 · 215 阅读 · 0 评论 -
多线程的应用与原理分析11(线程池)
线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池;线程池就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。所以合理的使用线程池可以。 1. 降低创建线程和销毁线程的性能开销; 2. 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来的问题,类似起到了限流的作用;线程...原创 2019-01-28 19:58:11 · 213 阅读 · 2 评论 -
多线程的应用与原理分析1
1.多线程最终解决的就是“等待”问题,它的简单使用场景: 1)通过并行计算提高程序执行性能; 2)需要等待网络,1/0响应导致耗费大量的执行时间,可以采用异步线程的方式减少阻塞;2.tomcat7以前的io模型多线程的应用场景 1)客户端阻塞:如果客户端只有一个线程,这个线程发起读取文件的操作必须等到IO流返回,线程(客户端)才能做其他的事 ...原创 2019-01-20 21:47:57 · 267 阅读 · 0 评论 -
多线程的应用与原理分析2(线程的状态)
进程是操作系统进行资源分配的最小单元,线程作为操作系统调度的最小单元,并且能够让多线程同事执行,极大的提高了程序的性能,在多核环境下的优势更加明显。但是在使用多线程的过程中,如果对它的特性和原理不够理解,很容易造成各种问题。线程的状态 Java 线程既然能够创建,那么也势必会被销毁,所以线程是存在生命周期的,那么我们接下来从线程的生命周期开始去了解线程。线程一共有 6 种...原创 2019-01-21 20:39:26 · 174 阅读 · 0 评论 -
多线程的应用与原理分析3(原子性、可见性、有序性)
JMM怎么解决原子性、可见性、有序性的问题? 在Java中提供了一系列和并发处理相关的关键字,比如volatile、Synchronized、final、juc等,这些就是Java内存模型封装了底层的实现后提供给开发人员使用的关键字,在开发多线程代码的时候,我们可以直接使用synchronized等关键词来控制并发,使得我们不需要关心底层的编译器优化、缓存一致性的问题了,所以在Ja...原创 2019-01-22 16:36:36 · 382 阅读 · 0 评论 -
多线程的应用与原理分析4(synchronized)
synchronized的使用 在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了,Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。我们仍然沿用前面使用的案例,然后通过sy...原创 2019-01-23 14:32:20 · 191 阅读 · 0 评论 -
读取文件,并把文件存入到list中
java读取文件的每一行数据存储到list当中。package com.zhang.read;import org.apache.commons.io.FileUtils;import java.io.File;import java.util.List;/** * @program: utilsdemo * @description: 把文件读到list当中 * @aut...原创 2019-05-13 18:57:41 · 7665 阅读 · 0 评论 -
将list存入到文件当中
1.利用java将list存储到文件当中,需要换行public static void listToFile(String filePath, List<String> infolist) { try { File filename = new File(filePath); FileUtils.writeLines...原创 2019-05-06 15:23:48 · 3449 阅读 · 0 评论 -
idea的常用快捷键操作
1)Ctrl+F12 可以查看file,method结构图,类继承机制图2)Ctrl+shift+Alt+U 查看maven依赖,类图3)Ctrl+E 定位最近浏览过的文件4)Ctrl+N 快速搜索类5)Ctrl+Shift+N 快速搜索文件6)Alt+Enter一下,它就能帮我们自动创建好函数;不仅仅只是导入包的功能7)Alt+Insert,它直接在代码中插入...原创 2019-05-22 10:15:49 · 134 阅读 · 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 · 6893 阅读 · 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 · 1877 阅读 · 0 评论