- 博客(68)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 (二)树
1. 树的定义是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合2. 二叉树基本分类(1)二叉树:每个节点最多含有两个子树的树称为二叉树。(2)满二叉树:除叶子结点外的所有结点均有两个子结点。节点数达到最大值,所有叶子结点必须在同一层上(3)完全二叉树:除最后一层外,其它各...
2019-11-06 17:55:34
231
原创 经典算法题目
1. 八皇后问题package practice;public class Queue8 { public static void main(String[] args) { Queue8 queue8 = new Queue8(); queue8.check(0); System.out.println("一共有:"+count+...
2019-11-03 13:13:38
301
原创 mybatis
1.mybatis的使用: 原始方法: 1.根据配置文件(数据源+注册sql映射文件 --和spring整合的时候数据源一般交给spring管理)创建一个sqlSessionFactory对象 2.编写sql映射文件 (namespace可随意) 3.获取sqlSession实例 4.调用sqlSession方法执行增删改查(sqlSession.selectOne()参数包括mapper的nam...
2019-09-08 10:14:52
260
原创 SpringMVC
一. 三层框架和mvc设计模型三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层、业务逻辑层、数据访问层。区分层次的目的即为了“高内聚低耦合”的思想。(高内聚是指一个模块只需要做好一件事)mvc:model view controller,模型 视图 控制器。将模型和视图分离,通过控制器进行控制。降低耦合(一个数据模型可以由多种表现形式...
2019-09-06 00:12:04
106
原创 spring
一. ApplicationContext常见三个实现1.classPathXmlApplicationContext:加载类路径下的配置文件(要求配置文件必须在类路径下,不在的话就加载不了)2.FileSystemXmlApplicationContext:加载磁盘任意路径下的配置文件(必须有访问权限)3.AnnotationConfigApplicationContext:读取注解...
2019-09-03 20:20:58
132
原创 spring源码阅读
一. 整体加载流程AnnotationConfigApplicationContext 1.this()->(1)父类GenericApplicationContext空参构造方法--->new DefaultListableBeanFactory() (2)该类空参构造方法:new AnnotatedBeanDefinitionReader:bd读...
2019-08-29 23:46:24
197
原创 (一)队列和链表和栈(线性结构)
一. 队列1. 队列的数组实现因为要考虑复用问题,所以要实现循环队列,思路如下(rear== front不能判断队列是空还是满,所以考虑牺牲一个空间)(1). front:指向队列的第一个元素,初始值为0(2).rear:指向队列最后一个元素的后一个位置,初始值为0(3).当队列空时,rear== front(4).当队列满时:(rear+1)%maxsize ==...
2019-08-26 00:02:06
279
原创 mybatis笔记
1.mybatis的使用: 原始方法: 1.根据配置文件(数据源+注册sql映射文件 --和spring整合的时候数据源一般交给spring管理)创建一个sqlSessionFactory对象 2.编写sql映射文件 (namespace可随意) 3.获取sqlSession实例 4.调用sqlSession方法执行增删改查(sqlSession.sele...
2018-10-04 16:07:51
168
原创 spring security
1.什么是spring security?是一个基于spring安全服务框架,主要功能是认证和授权。2.核心组件(1)SecurityContextHolder用于存储安全上下文的信息(用户名,密码,角色权限)使用ThreadLocal策略来存储信息获取当前用户信息:SecurityContextHolder.getContext().getAuthentication()...
2018-09-29 15:56:30
224
原创 spring cloud
一. 集群和分布式1. 集群:很多人干一件事。物理层面就是多台服务器一起分担访问压力2. 分布式:将一件事拆分成不同的小步骤,由不同的人完成这些小步骤 ,就是将一个大型项目拆分成若干微服务来协同完成二. spring cloud1. 概念SpringCloud是基于springBoot的一整套实现微服务的框架。核心组件包括:(1)服务治理Eureka(2)服务通信Ribbon...
2018-09-22 21:11:10
186
原创 Docker
一. 虚拟机和容器1. (1)虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。(2)容器包含应用及其所有依赖,与宿主机共享硬件资源及操作系统二. Docker概念1. 基本概念docker属于linux容器的一种封装,提供简单的容器使用接口。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像...
2018-09-18 23:20:37
221
原创 NoSQL
一.NoSQL概述 1.NoSQL是什么?not only sql,意为不仅仅是sql,泛指非关系型数据库。用于超大规模数据的存储 2.Nosql数据库四大分类? kv键值:MemcacheDB,Redis 文档型数据库:MongoDB 列存储数据库:HBase 图关系数据库:Neo4J 3.cap定理?...
2018-09-09 20:07:08
273
原创 设计模式(6)代理模式
1.什么是代理模式 编程中有一个思想就是不要随意修改别人的代码,如果需要修改,可以通过代理模式来实现 用户------代理对象--------目标对象(被代理对象)2.静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或继承相同的父类 缺点:代理对象和目标对象需要实现同一个接口,所以一旦增加接口中的方法,代理对象和目标对...
2018-08-25 15:27:39
153
原创 springBoot
一.简介1.spring bootspring boot 用来简化spring应用开发,约定大于配置javaEE开发的一站式框架2.微服务微服务是一种架构风格,一个应用应该是一组小型服务,可以通过HTTP的方式进行互通每个功能元素最终都是可独立替换和独立升级的软件单元二.helloworld1.引入相关依赖<parent> ...
2018-08-19 23:33:48
313
原创 剑指offer习题集
1.二维数组中的查找(1)题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。(2)代码public boolean Find(int target, int [][] array) { int len = array.length-1; ...
2018-08-19 22:50:39
196
原创 设计模式(5)简单工厂,工厂方法,抽象工厂
一.简单工厂模式1.设计思路建立一个工厂类,对实现统一接口的类进行实例的创建。实质就是由工厂类根据传入的参数,动态的决定应该创建哪个实例类接口2.缺点(1)集中了所有实例的创建逻辑,违背了高内聚责任分配原则(2)如果要添加新的类,就需要修改工厂类,违背开放-关闭原则3.代码实现(1)人类/** * 产品的抽象接口 人类 * @author liao...
2018-07-11 00:01:14
140
原创 vue.js
一.vue搭建脚手架CLI 1.全局安装cli: npm install --global vue-cli (vue --version 检查安装成功) 2.创建一个基于webpack模板的新项目:vue init webpack vue-demo 3.安装依赖,运行 cd vue-demo npm install npm run d...
2018-07-09 19:15:48
202
1
原创 并发编程(6)线程间通信
一.等待唤醒机制(wait,notify,notifyAll)1.基本概念 wait:将同步线程处于冻结状态,释放执行权,同时将线程对象存储到线程池 notify:唤醒线程池中某个等待线程 notifyAll:唤醒线程池中所有线程2.注意 (1)这些方法都需要定义在同步中 (2)这些方法必须要标示所属的锁 (3)为什么这三个方法要被定义在...
2018-07-09 10:59:19
143
原创 IO流
一.流分类 1.按流方向:输入流(读) ,输出流(写) 2.按读取方式:字节流 , 字符流 二.字节流1.使用字节流实现文件的拷贝public class Copy1 { public static void main(String[] args) throws IOException { FileInputStream fis = nu...
2018-07-08 21:15:27
132
原创 并发编程(5)AQS(AbstractQueuedSynchronizer)
1.AQS原理AQS(抽象队列同步)核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列(虚拟的双...
2018-07-08 13:37:40
138
原创 并发编程(4)concurrent包
一.概述 java.util.concurrent包是专门为java并发编程而设计的包,有如下分类: (1)locks:显示锁(互斥锁和速写锁)相关 (2)atomic:原子变量类相关,是构建非阻塞算法的基础 (3)executor:线程池相关 (4)collections:并发容...
2018-07-07 17:49:10
419
原创 并发编程(3)volatile
一.并发编程的特性原子性,可见性,有序性。只要有一个不能保证,就有可能导致程序的运行错误二.synchronizedsynchronized就能保障原子性,可见性,有序性,1.因为synchronized能保障任意一个时刻只有一个线程执行该代码块,自然就不存在原子性的问题2.在释放锁之前会将变量的修改刷新到主存中,因此保证可见性3.又因为每一时刻只有一个线程在执行代码,相当于让线程顺序执行同步代码...
2018-07-06 23:45:38
134
原创 并发编程(2)synchronized原理及其优化
一. synchronized介绍及其原理1.synchronized介绍Synchronized可以保证一个共享资源在同一时间只被一个线程访问到。可以通过同步方法或同步代码块的方式实现同步。同步方法的常量池会有一个ACC_SYNCHRONIZED标志,当某个线程要访问某个方法时,会检查是否有ACC_SYNCHRONIZE,如果有则需要先获得监视器锁,方法执行完后再释放监视器锁同步...
2018-07-06 15:20:33
473
原创 并发编程(1) 线程基本状态和线程的创建
一.线程基本状态 1.新建状态(new):线程对象创建后将纳入新建状态. Thread t = new Thread(); 2.就绪状态(Runnable):调用start()进入就绪状态 3.运行状态(running):CPU开始调度处于运行状态的线程,此线程才真正执行 4.阻塞状态(Blocked):处于运行时的线程由于某种原因暂时放弃了对CPU的使用权...
2018-07-05 21:14:13
186
原创 jvm(7)happens-before 和 重排序
一.定义happens-brfore是用来指定两个操作之间的执行顺序,用来保证可见性。在java内存模型中,如果一个操作执行的结果要对另一个操作可见,那么这两个操作之间存在happens-before关系 二.happens-before规则 1.程序顺序规则 单线程中每个操作,总是前一个操作happens-before后一个操作 2.监视器锁...
2018-07-01 19:13:42
160
原创 jvm(6)类加载机制
一.类加载机制概述 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,解析,初始化,最终形成可以被虚拟机直接使用的类型二.什么情况下类不被加载? 1.通过子类引用父类的静态字段,子类不会被初始化 2.通过数组定义来引用类 3.调用类的常量三.类加载的过程? 1.加载 (1)通过类的权限定名获取类的二进制流 (2)将这个字节流...
2018-07-01 16:33:57
98
原创 jvm(5)Class文件
一.Class文件结构 Class文件是一组以8位字节为基础单位的二进制流,Class文件中有两种数据类型,分别是无符号数和表 1,无符号数,以u1、u2、u4、u8分别代表1个字节、2个字节、4个字节、8个字节的无符号数 2,表是由多个无符号数或者其它表作为数据项构成的复合数据类型,所以表都以“_info”结尾,由多个无符号数或其它表构成的复合数据类型 1.魔数 魔...
2018-07-01 12:48:07
121
原创 jvm相关参数
一.垃圾收集时的信息的打印1. -verbose:gc (简要信息)[Full GC 168K->97K(1984K), 0.0253873 secs]箭头前后分别表示GC前后存活对象使用的内存容量括号内为堆内存的总容量最后显示的是垃圾回收所用的时间2.-XX:+PrintGCDetails (详细信息)二.选择使用的收集器1.Seria收集器 -XX:+UseSerial...
2018-06-30 19:02:22
96
原创 jvm(4)虚拟机工具
一.jps(java process status) 查看本地虚拟机唯一id:lvmid jps -l 类的全名 jps -m 类接收的参数 jps -v 虚拟机参数二.Jstat 依赖于jps(首先要通过jps获得lvmid) jstat:类装载,内存,垃圾收集,jit编译的信息(1)jstat -gcutil lvmidS0:年轻代的第一个survivor(幸存...
2018-06-30 18:37:47
291
原创 (五)平衡多路查找树(B-Tree B+Tree)
B-tree就是我们常说的B树,常常用于实现数据库索引,因为它的查找效率比较高前面提到的2-3树可以看作B树的一种实例一.为什么不用二叉搜索树用B树? 二叉查找树的时间复杂度是O(logN),查找次数和比较次数较少,但是对于磁盘的IO次数,最坏情况下磁盘的IO次数由树的高度决定,所以减少磁盘IO次数就必须压缩树的高度,让瘦高的树尽量变成矮胖的树,这样B树就诞生了二.B-...
2018-06-30 10:26:47
9296
4
原创 内部类详解
放在一个类内部的类就叫做内部类二.内部类的作用 1.内部类可以实现很好的隐藏(一般非内部类不允许有private,protected修饰的),内部类可以 2.内部类拥有外围类所有的访问权限 3.可以实现多继承public class Son { /** * 内部类继承Father类 */ class Father_1 extends ...
2018-06-29 14:31:40
95
原创 深入枚举类
一.枚举 被enum修饰的类型就是枚举类型(如果枚举不添加任何方法,枚举值默认从0开始的有序数值),本质是java.enum.lang的子类 优点:将常量组织起来,统一管理 常用场景:错误码,状态机等二.枚举实现原理编译enum类后产生一个final修饰的类,该类继承自java.lang.Enum。编译器帮我们创建了枚举常量对应的实例对象。此外编译器还帮我们生成了两个静态方法,分...
2018-06-29 11:02:10
210
原创 设计模式(4)单例模式
一.单例模式程序中某个类只能有一个实例,如spring容器中的bean实例默认都是单例模式存在的二.单例模式的好处(1)避免对象的重复创建,减小时间和内存开销(2)避免操作多个对象导致的逻辑错误,可以全局统一控制三.实现单例模式 五种实现方案:饿汉模式,懒汉模式,双重校验锁,静态内部类,枚举 1.饿汉模式 public class Singleton { //构造函数私有...
2018-06-29 00:12:52
131
原创 设计模式(3)观察者模式
一.介绍 1. 观察者模式:又可称为发布-订阅模式,顾名思义,就是定义一个监听者,监听着被观察的事件,一旦观察到被监听者某个状态变化就会触发相应的事件 2.应用场景 观察者模式常被用于实现订阅功能的场景,如微博订阅,当我们订阅了某个人的微博账号,该用户发布消息,就会通知到我们 3.实现方案: (1).针对观察者和被观察者分别定义接口(有利于进行扩展)...
2018-06-28 19:05:25
93
原创 jvm(2)垃圾回收
一.如何判断对象为垃圾对象? 1.引用计数法 在对象中添加引用计数器,当有地方引用这个对象的时候,引用计数器的值就+1,当引用失效的时候,计数器的值就-1 (1)idea中打印GC日志的方法: 添加:-XX:+PrintGCDetails (2)没有虚拟机采用这种算法回收垃圾,因为出现对象之间互相引用的时候,即...
2018-06-28 16:16:14
104
原创 jvm(1)内存结构和对象
一,java历史1.java之父:詹姆斯·高林斯2.java发展简史——1991年oak(嵌入式编程语言)——1995 java(write once run anywhere )——1996 jdk1.0(包含jvm Classic VM)——1997 jdk1.1( 内部类,反射,jar文件格式)——1998 jdk1.2(java开发三个方向,Hotspot VM)——2000 jdk1.3...
2018-06-28 09:08:13
164
原创 设计模式(2)装饰者模式
装饰者模式:不改变原文件,不使用继承的情况下,动态扩展一个对象的功能分为4个角色:(1)抽象被装饰对象 (2)具体被装饰对象:实际被动态添加功能的对象 (3)抽象装饰者(ConcreteDecorator):实现component接口,来扩展component类的功能 (4)具体装饰者:动态的添加职责的对象实现:定义一个被装饰者的抽象接口,被装饰对象和抽象装饰者实现这个接口。在装饰类将被装...
2018-06-26 12:43:09
120
原创 设计模式(1)策略模式
定义一些列算法,然后把每一个算法封装起来,使它们可以相互替换。 实现:定义一个策略接口,每一个算法都去实现这个接口,然后定义一个上下文,持有接口的引用,然后客户端可以通过上下文获取到具体的策略二、springmvc中的策略模式前端控制器DispacherServlet处理请求需要依赖很多组件类,如处理器映射HandlerMapping,处理器适配器HandlerAdapter,视图解...
2018-06-26 09:44:47
221
ueditor实现图片上传到项目外
2018-04-09
SpringMvc访问WEB-INF下的jsp问题
2017-12-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人