![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
知识总结
努力的小码
这个作者很懒,什么都没留下…
展开
-
java线程池--初步了解线程池
当时觉得自己菜,写的没深度,放弃了。这次希望自己坚持下去,加油博客主页:知识积累个人网站:个人网站今天我们简单来学习一下java线程池的基本知识,了解一个简单的运行流程。线程池的流程图大概就是图中这几步。jdk版本为1.8注意看类的包路径,我一开始就看错了类,看到了tomcat里面的线程池去了,而且类名什么的还都一样,实现是不一样的。java的线程池的类都在 package java.util.concurrent 包下,注意别看错了!1 创建线程池1.1 了解.原创 2020-09-18 18:47:37 · 277 阅读 · 0 评论 -
java的NIO
(该篇只是概述,详细记录请点这里)1 NIO和IO的区别 IO是面向流的,NIO是面向缓冲区的 IO是阻塞的,NIO是可以阻塞也可以不阻塞的! IO每一次IO请求都需要一个线程,而NIO可以用一个线程去管理多个IO请求。2 NIO的主要成分 NIO主要包括三个部分:缓冲区、通道、选择器。 通道注册在选择器上,选择器上用一个线程去跑...原创 2018-09-05 21:07:50 · 147 阅读 · 0 评论 -
NIO选择器
1 选择器基础您需要将之前创建的一个或多个可选择的通道注册到选择器对象中。 一个表示通道和选择器的键将会被返回。 选择键会记住您关心的通道。 它们也会追踪对应的通道是否已经就绪。 当您调用一个选择器对象的 select()方法时,相关的键值会被更新,用来检查所有被注册到该选择器的通道。 您可以获取一个键的集合,从而...原创 2018-09-05 19:56:54 · 909 阅读 · 0 评论 -
idea运行提示Error:java:无效的源发行版:1.8
我们使用idea编译器切换jdk版本的时候,经常会出现这些错误。以下是我总结的经验首先,File -- > Ptoject Structure然后 File -- >Setting如果使用了maven,记得修改pom文件配置的jdk版本如何还不行,查看iml配置文件这下就ok了!...原创 2018-09-08 15:28:00 · 4512 阅读 · 1 评论 -
NIO缓冲区
缓冲区定义:缓冲区是包在一个对象内的基本数据元素数组。1.1属性所有的缓冲区都具有四个属性来提供关于其所包含的数据元素的信息容量(Capacity)缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变。上界(Limit)缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数。位置(Position)下一个要被读或写的元素的索引。位置...原创 2018-09-01 17:48:04 · 428 阅读 · 1 评论 -
直接插入排序
定义:将一个记录插入到已经排好序的序表中,从而得到一个新的,记录数增1的有序表。我们要排序的数组是 2,3,1,5,8,9,7,4,6,升序。要增加一个元素0,当做排序时的哨兵,加了哨兵后,数组元素为 0,2,3,1,5,8,9,7,4,6。第一步:哨兵右边的第一个值与哨兵左边的所有值进行比较, 并插入其中,因为才是哨兵左边没有值,所以直接插入。 数组元素为: 2,0,3,1,5,...原创 2018-07-19 16:09:42 · 751 阅读 · 0 评论 -
简单选择排序
定义:通过关键字的比较。从n-i+1个记录中选出关键字最小的记录,并和第i个记录交互之。理解:每次找到最小值,才进行值交换。@Testpublic void easyChoseSort(){ int[] a = {3,5,1,2,9,8,6,7,10,4}; int middle = 0;//值交换的时候的中间值 for (int i = 0; i < a.length; i...原创 2018-07-19 14:46:19 · 211 阅读 · 0 评论 -
多线程例子
实现ABC交互打印:使用synchronizedpublic class RunTest { private Object a= new Object(); private Object b= new Object(); private Object c= new Object(); @Test public void get() throws I...原创 2018-07-24 22:23:58 · 127 阅读 · 0 评论 -
冒泡排序
冒泡排序的原理:相邻两个数据进行两两比较,然后将偏大或偏小的数据向一方移动。1:简单冒泡排序@Test public void normalBubble(){ int middle; for (int i = 0; i < a.length; i++) { for(int j = 0; j < a.length-...原创 2018-07-19 13:55:18 · 844 阅读 · 0 评论 -
NIO通道
通道接口允许您以一种受控且可移植的方式来访问底层的 I/O服务。Channel 用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效地传输数据。1 通道基础您可以从顶层的 Channel 接口看到,对所有通道来说只有两种共同的操作:检查一个通道是否打开(IsOpen())和关闭一个打开的通道(close())。public interface Channel...原创 2018-09-03 21:08:56 · 190 阅读 · 0 评论 -
LinkedHashMap的实现原理
观看该篇文章时,请先了解HashMap的底层原理!LinkedHashM定义:哈希表和链表实现的映射接口,具有可预测的迭代顺序。这个实现不同于HashMap,因为它维护一个遍历其所有条目的双向链表。这个链表定义了迭代顺序,这通常是键插入到映射中的顺序(插入顺序)。如果键是已经插入过的,则会直接返回true。先给张大概的原理图:LinkedHashMap每一次存值时,都会往链表的...原创 2018-09-18 20:31:19 · 973 阅读 · 0 评论 -
mysql简单总结存储结构+函数+视图+触发器
1 存储结构定义:存储过程就是多个sql语句的组合,并加上一定的逻辑。优点:1 第一次执行存储过程,mysql会编译该存储过程的语句,后续再执行该存储过程,无需编译,直接执行。普通的sql语句,每次运行都要先编译后执行,所以存储过程会比普通的sql执行速度较快一点。2 如果存在多个复杂的数据库操作,在代码中执行一个个sql,为了保证数据库数据库的一致性,只能通过事务来解决,如果全部...原创 2019-09-25 19:06:17 · 264 阅读 · 0 评论 -
Speing-Boot学习 搭建一个简单的Spring-boot + mybatis
首先先来认识一下Spring-boot框架,该框架是对Spring框架的进一步集成,设计目的就是简化Spring应用的搭建和开发过程。优点如下:对第三方插件封装和整合,提供第三方接口 无需配置复杂的XML 提供安全等特性 核心功能-自动配置 内嵌式 web服务器(Tomcat、Jetty等) 提供POM,简化Maven配置接下来,搭建一个最简单的spring-boot+mybati...原创 2018-10-30 19:15:58 · 667 阅读 · 0 评论 -
Spring-boot + redis + jedisPool
简单的配置Speing-boot + redispom文件:<!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId>...原创 2018-10-31 11:44:30 · 2203 阅读 · 0 评论 -
3 spring cloud hystrix学习
Spring Cloud Hystrix定义:当线程调用服务时,因为服务的故障而出现长时间的等待的情况时,hystrix会返回一个错误响应,防止该线程长时间挂起而影响其他线程的性能。我们将之称为断路器。1 快速开始首先启动一个Eureka服务,端口为7001,服务名叫做sb-eureka然后启动两个provider服务,端口为7011和7021,服务名都叫做sb-provider,...原创 2018-10-22 15:58:40 · 136 阅读 · 0 评论 -
命令模式-最简单的例子
命令模式:定义:将来自客户端的请求封装起来,从而让你可以使用不同的客户端请求,该模式可以将行为请求者和行为执行者解耦,从而使两者适应变化。 命令模式的五个对象命令Command:真实命令RealCommand:行为执行者Receiver:行为请求者Invoker: 编写例子:Command:public interface Command { ...原创 2018-10-22 11:29:15 · 1647 阅读 · 0 评论 -
Spring-cloud学习 Eureka
本博文是连贯的博文,请从第一篇开始阅读spring-boot+spring-cloud学习Eureka介绍:Spring Cloud Eureka是Srping Cloud Netflix微服务套件中的一部分,基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。拥有服务注册中心、服务提供者、服务消费者三种角色。 1 快速搭建一个EureKa服务注册...原创 2018-10-19 20:39:53 · 304 阅读 · 0 评论 -
1 Spring-Cloud学习 看一个最简单的例子
什么是Spring-boot将一个独立的系统拆分成多个小型服务,服务之间通信基于HTTP的restful api进行通信写作。 Spring-Cloud的优缺点 优点: 服务组件化:各服务可以快速升级。 可以按业务组织团队: 去中心化处理:各个服务,尽量解耦 使用Http的RestFul请求模式 缺点:...原创 2018-10-19 16:55:30 · 230 阅读 · 0 评论 -
多线程的测试用例编写
1 测试的类继承TestCase2 测试的方法名必须是test开头3 使用TestRunnable创建线程类4 使用MultiThreadedTestRunner运行多线程,这个类需要导包,导包语句如下: <dependency> <groupId>net.sourceforge.groboutils</groupId> ...原创 2018-10-15 19:18:03 · 932 阅读 · 0 评论 -
TreeSet的实现原理
TreeSet的实现原理基于TreeMap,请阅读该博文前,先学习TreeMap的实现原理。类结构public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable成员变量private tra...原创 2018-10-08 14:02:53 · 794 阅读 · 0 评论 -
LinkedHashSet的实现原理
LinkedHashSet,底层都是通过LinkedHashMap实现的,阅读本博文前请先了解LinkedHashMap。类结构public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable继承了Ha...原创 2018-10-07 17:06:15 · 1225 阅读 · 0 评论 -
AtomicLong的原理
AtomicLong定义在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型所以平常用long的时候,多线程重复操作同一个long类型数据时,结果会不准确AtomicLong相当于Synchrnized的long。类结构:public class Atom...原创 2018-10-13 17:47:59 · 2188 阅读 · 0 评论 -
HashMap的源码实现
1 HashMap概述本文描述的是JDK1.7在了解HashMap之前,我们来了简单的了解一下其他数据结构。我们知道,数据结构的物理存储结构只有两种:顺序存储结构和链式存储结构(像栈,队列,树,图等是从逻辑结构去抽象的,映射到内存中。数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);通过给定值进行查找,需要遍历数组,逐一比对给定关键字和数组元素,时间...原创 2018-09-14 19:13:13 · 414 阅读 · 0 评论 -
(Builder)建造者模式
建造者模式:将一个复杂对象与它表示分离,使得同样的构建过程可以创建不同的表示。使用了建造者模式,用户只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。就类似于麦当劳吃汉堡,具体味道怎么调,配料怎么配,店员都不需要知道。店员只需要按要求把材料组合都一起就可以了。当一个对象的构建过程非常复杂,且步骤单不会变化,就适合用建造者模式。设计思路:产品:Productpublic ...原创 2018-05-24 15:34:53 · 1239 阅读 · 0 评论 -
动态代理之--JDK代理和CGLIB代理
看本篇博文之前,请先了解代理模式。了解代理模式请点这里JDK动态代理 JDK的动态代理,是由JDK的java.lang.reflect.*包提供支持的,我们需要完成这么几个步骤。 .编写服务类和接口,这个是真正的服务提供者,在JDK代理接口是必须的。 .编写代理类,提供绑定和代理方法。 JDK动态代理最大的缺点就是需要提供接口直接看例子:接口类:HelloService:p...原创 2018-05-24 11:50:19 · 423 阅读 · 0 评论 -
mybatis--简单学习记录
一:Mybatis简介1.1 传统的JSBC编程JDBC是由SUN公司提出的一系列规范,它只定义了接口规范,具体实现是由各个数据库厂商自己去实现的。JDBC是一种典型的桥接模式。使用传统JDBC方式的弊端:1.工做量大。2.对异常捕获并且关闭资源!1.2 ORM模式由于JDBC模式的各种弊端,出现了对象关系映射(ORM)。ORM模型就是数据库的表和简单的java对象的映射关系模型,简称POJO。1...原创 2018-05-23 17:23:13 · 197 阅读 · 0 评论 -
策略模式
策略模式的定义:定义了算法族,分别封装,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的用户。例子来自于《Head First 设计模式》:产品经理要求我们设计一个鸭子的系统,鸭子的行为有fly和swim,我们肯定会想到设计一个父类Duck,在父类写fly和swim两个方法。其他鸭子比如RedDuck和GreenDuck都继承父类,重写重载或者直接引用父类的方法。这个都很好实现。代码如下...原创 2018-05-23 11:31:45 · 137 阅读 · 0 评论 -
mybatis--简单了解底层运行顺序
1 mybatis运行分为两大部分:1:读取配置文件缓存到Configuration对象,用以创建SqlSessionFactory2:sqlsession的执行过程 涉及技术: .反射 .动态代理 动态代理分为JDK动态代理和CGLIB代理 JDK动态代理: JDK的动态代理,是由JDK的java.lang.reflect.*包提供支持的,我们需要完成这么几个步骤。 .编写服务类和...原创 2018-05-28 09:24:23 · 620 阅读 · 0 评论 -
多用组合,少用继承
首先,我们来看一看继承的好处。设计一个鸭子类Duck:public class Duck { public Duck() { System.out.println("i an a duck"); } public void fly(){ System.out.println("飞"); }; public void...原创 2018-05-22 20:03:50 · 550 阅读 · 0 评论 -
java多线程-lock的使用
Lock就是使用ReentrantLock类,是在jdk1.5添加的类。相对比synchronized关键字有更加强大的功能,比如多路分支通知、读写锁控等等,更加灵活。 1.1最简单的lock使用public class LockTest { private Lock lock = new ReentrantLock(); public void loc...原创 2018-05-16 11:45:14 · 513 阅读 · 0 评论 -
mysql 的连接查询及合并查询
mysq 的连接查询分为内连接查询及外连接查询内连接查询:inner join on:两边的数据进行笛卡尔积操作。外链接查询:left join:以左边为主。righr join:以右表为主。创建测试表:create table join2(id int auto_increment not NULL primary KEY,name varchar(30))engine...原创 2018-06-02 17:09:28 · 3405 阅读 · 0 评论 -
java I/O初次学习-最简单的I/O操作例子
java中的文件流按输出方向分为输入流和输出流,输入就是读取数据(即我们读取了一个文件),输出就是写入数据(即我们去创建了一个文件并写入了内容)。java的I/O原码是通过装饰者模式设计的。按读取单位分,主要分为两种,字节流和字符流。字节是计算机存储容量的一种单位。字节流就是以字节为单位处理文件流就是。实现字节流的类都分别继承了InputStream(输入流),OutputStream(输出流)字...原创 2018-05-22 15:11:54 · 360 阅读 · 0 评论 -
适配器模式
本例来自《大话设计模式》适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类一起工作。需要适配的类:Asaptee:public class Adaptee { public void specificRequest(){ System.out.println("特殊请求!"); }...原创 2018-05-25 15:53:34 · 127 阅读 · 0 评论 -
命令模式
本例来自《大话设计模式》命令模式的定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。我们来看这么一个例子:我们去一家烧烤店吃饭。我们会向服务员点烧烤,服务员会拿笔记本记录我们点的菜品,然后去后厨告诉厨师要烤哪些东西。期间我们还可能会加菜或者取消一些已经点的菜,服务员肯定也会拿笔记本记下来,然后告诉后厨,最后,根据笔记本记得内容和...原创 2018-05-25 11:14:04 · 1119 阅读 · 0 评论 -
mysql初步学习
1.mysql体系结构和存储引擎 数据库:物理操作系统文件或其他形式文件类型的集合。 数据库示例:由数据库后台进程\线程以及一个共享内存去组成。共享内存可以被运行的后台进程/线程共享!需要牢记的是,数据库示例才是真正操作数据库文件的。mysql是单进程多线程架构数据库,和sqlserver相似,oracle是多进程架构。Linux环境下,默认引擎是MyISAM,在window环境下,,...原创 2018-05-17 20:12:24 · 399 阅读 · 0 评论 -
单例模式
单例模式定义:确保一个类只有一个实例,并提供一个全局访问点。主要问题:1.用多线程可能造成创建混乱。2.如果用到多个类加载器,就可能创建多个单例模式。解决方案:1.用volatile关键字和synchronized双重检查加锁。2.指定用同一个类加载器加载。一般单例模式有两种写法。饿汉单例模式和懒汉单例模式懒汉单例模式:即要用的时候再创建public class SingleDemo { ...原创 2018-05-24 16:50:12 · 110 阅读 · 0 评论 -
装饰模式
本例来自《大话设计模式》装饰模式定义:动态地给一个对象添加一个额外的职责,就增加功能来说,装饰模式比生成子类更灵活。描述:装饰模式是利用一个方法来对对象进行包装。这样每个装饰对象的实现就和如何使用这个例子分离开了。每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。装饰模式是为已有功能动态地添加更多功能的一种方式。装饰模式是为已有功能动态地添加更多功能的一种方式。例子:穿衣服,用衣服来...原创 2018-05-30 11:00:20 · 114 阅读 · 0 评论 -
Speng4整合ActiveMq
首先下载activeMq。下载路径:http://activemq.apache.org/download.html点进去后,选择自己想要的版本。这里要注意!activeMq版本5.0以上的要用jdk1.8,我下载的是版本4。下载后解压,到解压目录..\apache-activemq-5.14.5-bin\apache-activemq-5.14.5\bin\win64下运行activemq.ba...原创 2018-07-04 20:07:13 · 130 阅读 · 0 评论 -
Spring4配置MongoDB
首先要导的包:pom.xml<!-- mongodb java driver --> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> ...原创 2018-07-03 11:17:32 · 1063 阅读 · 0 评论 -
虚拟机字节码执行引擎
1 概述 代码编译是从本地机器码转变为字节码。执行引擎是java虚拟机最核心的组成部分之一。虚拟机是一个相对于物理机的概念。物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上,虚拟机的执行引擎则是由自己实现。不同虚拟机实现里面,执行引擎在执行java代码的时候可能有解释执行和编译执行两种选择。执行引擎都是一致的:过程都是输入的是字节码文件,处理过程是字节码解析的等效...原创 2018-06-25 15:51:04 · 208 阅读 · 0 评论