java
文章平均质量分 92
java 基础
Alyson_jm
这个作者很懒,什么都没留下…
展开
-
四、Filter
*** 自定义的Http接口,实现自Filter接口*//*** 用于保存FilterConfig 对象*//*** 不建议子类直接覆盖,若直接覆盖,* 将有可能会导致filterConfig 成员变量初始化失败*/@Overrideinit();/*** 供子类继承的初始化方法,可以通过getFilterConfig 获取FilterConfig对象*//*** 直接返回init(servletConfig) 的FilterConfig 对象* @return。原创 2024-05-21 15:05:08 · 1019 阅读 · 0 评论 -
maven 配置
下载地址http://maven.apache.org/download.cgi配置配置本地仓库在安装目录里,找到config文件夹settings.xml 文件,配置本地仓库。配置系统环境变量MAVEN_HOME配置系统变量path查看是否配置成功命令行输入mvn -version在 idea 中配置在setting 中进行配置新建maven 项目maven 远程仓库地址https://mvnrepository.com/...原创 2020-08-03 11:11:11 · 193 阅读 · 0 评论 -
四种常用线程池
我们从源码来分析一下四种常见的线程池,我们常见的四种线程池分别为newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduleThreadPool。这四种线程池本质上也是ThreadPoolExecutor,只是这些参数都是固定好了的,我们可以直接使用。newCachedThreadPool pu...原创 2018-09-28 08:30:30 · 883 阅读 · 0 评论 -
java 基础——一维数组的拷贝
深拷贝浅拷贝原创 2018-10-06 23:18:31 · 959 阅读 · 0 评论 -
java 基础——二维数组的拷贝
文章目录for 循环拷贝基本类型引用类型clone 方式拷贝基本类型引用类型System.arraycopy()基本类型引用类型Arrays.copyOf()基本类型引用类型总结for 循环拷贝基本类型 public static void main(String[] args) { int[][] array1 = {{10,10,10},{10,10,10}}; ...原创 2018-10-07 11:15:20 · 1650 阅读 · 0 评论 -
java 线程——可重所锁&不可重入锁
不可重入锁当前线程已经获取了锁,当这个线程再次尝试获取这个锁的时候就会获取不到被阻塞,我们来写一个不可重入锁的例子。class Lock{ private boolean lock = false; /** * 加锁 * 当lock = true;说明当前对象拿着锁 */ public synchronized void lock() throws Exception{...原创 2018-09-23 12:45:46 · 394 阅读 · 0 评论 -
java 线程——ReentrantLock 源码解析
ReentrantLock 源码解析(源码基于JDK 1.7.80)属性构造方法可重入非公平锁获取锁步骤总结可重入公平锁加锁总结步骤锁的释放小结属性构造方法 ReentrantLock 类只有两个构造方法,默认的构造方法为非公平锁。ReentrantLock(boolean fair) 当 fair 为true 时是公平锁,...原创 2018-09-25 22:54:34 · 910 阅读 · 0 评论 -
java 线程——线程池
本文学习内容目录线程池概述ThreadPoolExecutor 的实现原理继承关系属性阻塞队列拒绝策略构造方法ThreadPoolExector 类的几个重要方法任务的提交关闭线程池shutdown()shutdownNow()相关文章线程池概述 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建...原创 2018-09-27 15:22:20 · 329 阅读 · 0 评论 -
java IO —— 转换流详解
目录转换流概述InputStreamReader 字节数组转换成字符串继承关系构造方法示例OutputStreamWriter 字符串转化成字节数组继承关系构造方法示例转换流概述特点其是字符流和字节流之间的桥梁 可对读取到的字节数据经过指定编码转换成字符 可对读取到的字符数据经过指定编码转换成字节字符流和字节流的区别是什么?字符流=字节流+...原创 2018-08-05 22:21:35 · 1292 阅读 · 0 评论 -
java 线程 —— 线程的三种创建方式
目录线程概述线程的三种创建方式继承的方式实现的方式匿名内部类线程概述进程:进程通俗的来说就是一个程序的执行过程,进程是动态的。程序:静态代码段,是一组指令的有序集合。线程:线程就是进程里面的一个执行路径。多线程:多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。...原创 2018-09-20 20:07:57 · 332 阅读 · 0 评论 -
java线程——线程的常用方法
方法详解start() 和 run() 方法setName() 和 getName()setPriority() 和 getPriority()setDaemon() yield() 和 join()interrupt() 线程常用方法 方法 功能 start() 启动线程并执行相应的run()方法 run() 线程要执行的代码放入run(...原创 2018-09-20 23:34:01 · 470 阅读 · 0 评论 -
java 线程——线程的状态及其状态的转换
线程的状态NEW :新创建线程,初始态RUNNABLE : 可运行状态,当前状态的线程位于“可运行线程池”中,变得可运行,只等待获取cpu的使用权,即当前线程获得了除cpu以外的所有资源。RUNNING : 正在运行。此时线程获得了cpu的使用权,执行程序代码BLOCKED:阻塞状态。线程因为某种原因放弃了cpu的使用权,暂时停止运行,直到线程进入就绪态才有机会转换到运行态。阻...原创 2018-09-21 22:44:42 · 333 阅读 · 0 评论 -
java 线程——synchronized 和 volatile 关键字
synchronized 和 volatile 关键字原子性、可见性、有序性原子性可见性有序性synchronized 关键字加在代码块上加在方法上加在静态方法上volatile 关键字synchronized 和 volatile 的区别原子性、可见性、有序性在讲这两个关键字之前,我们先来看一下几个概念原子性原子性是指一个操作时不可中断的,...原创 2018-09-22 13:21:04 · 703 阅读 · 0 评论 -
java 线程——线程的通信
线程通信的三种方式同步while 轮询方式wait() / notify() 方式 线程通信的三种方式同步这里讲的同步是synchronized 关键字来实现线程间的通信,我们用代码来示范一下。class Obj{ int count = 0; public synchronized void add(){ //do something count++...原创 2018-09-22 15:16:47 · 330 阅读 · 0 评论 -
哲学家进餐问题
问题描述哲学家就餐问题可以这样表述,假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的那两只餐叉。哲学家就餐问题有时也用米饭和筷子而不是意大利面和餐叉来描述,因为很明显...原创 2018-09-22 15:34:02 · 4456 阅读 · 0 评论 -
java 线程——乐观锁&悲观锁
乐观锁适用场景实现方式版本号机制CAS悲观锁适用场景缺点 相关文章乐观锁每次读取数据的时候总是认为不会被人拿数据,所以不去加锁,但是在更新的时候回去对比一下原来的值,看有没有被别人更改过。适用场景读操作比较多的时候,提高了吞吐量。实现方式版本号机制在数据表中加入了版本号,当数据被修改是版本号加一,每次更新数据的时候比较版本号是否是刚刚的...原创 2018-09-23 09:48:51 · 823 阅读 · 0 评论 -
java 线程——偏向锁&轻量级锁&重量级锁
本文学习内容线程阻塞的代价Mark word 偏向锁轻量级锁轻量级锁的加锁过程释放线程锁的过程重量级锁相关文章线程阻塞的代价java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在户态与核心态之间切换,这种切换会消耗大量的系统资源。我们所熟知的Synchronized 在竞争锁失败的情况下就会进入阻塞状态,这种线程...原创 2018-09-23 12:05:07 · 629 阅读 · 0 评论 -
java IO —— IO 概述
IO 概述目录IO 概述IO 原理IO分类按照流向按照操作单元按照流的角色IO 流体系File 类文件流缓冲流转换流打印流数据流 IO 原理 IO流用来处理设备之间的数据传输。 Java程序中,对于数据的输入/输出操作以"流(stream)" 的方式进行。 java.io包下提供了各种"流"类和接口,用以获取...原创 2018-08-05 00:28:14 · 861 阅读 · 0 评论 -
java IO——File 类详解
本篇博客学习内容File 类概述File 类构造方法File 相关方法访问文件名目录操作相关文件操作相关文件检测获取常规信息文件名过滤器文件过滤器File 类概述1. 凡是与输入、输出相关的类、接口等定义都在java.io包下2. File 是一个类,可以有构造器创建其对象,此对象对应着一个文件(.txt .avi .doc .ppt ...原创 2018-08-05 12:29:42 · 663 阅读 · 0 评论 -
java IO ——文件流详解
本篇博文学习了一下内容FileInputStream 字节输入流构造方法读取文件FileOutputStream 字节输出流构造方法写入文件FileRearder 字符输入流构造方法读取文件FileWriter 字符输出流构造方法写出文件字节文件和字符文件总结FileInputStream 字节输入流构造方法构造方法 方法 ...原创 2018-08-05 16:55:07 · 656 阅读 · 0 评论 -
java IO——缓冲流详解
本篇博客学习一下内容缓冲流概述BufferedInputStream 字节输入缓冲流构造方法BufferedOutputStream 字节输出缓冲流构造方法flush() 和 close()BufferedReader 字符输入缓冲流构造方法BufferedWriter 字符输出缓冲流构造方法总结缓冲流概述缓冲流是对文件流处理的一种流,它本身并不...原创 2018-08-05 19:00:20 · 3603 阅读 · 0 评论 -
中兴捧月——婚姻匹配问题
题目:建立一个模型,来模拟推导社会男女择偶过程。为了模型简化,一个人的特性指标有三个,这里假设为财富、样貌、品格,每个指标均可取值1-100之间任意数字。同样也对这3项指标有自己的需求。这3个需求值取值范围都在1-98间,当然三者的和必须为100.所以任意一个人可以用以下数组来表述:G(A、B、C、A1、B1、C1)G代表男,M代表女。举例G11(80、50、40、10、30、60...原创 2018-07-26 17:07:15 · 1011 阅读 · 1 评论 -
java 集合—— Map 实现类之 LinkedHashMap
LinkedHashMap 概述 源码基于jdk 1.7.81LinkedHashMap 继承自 HashMap,实现了 Map 接口,所以它具有 Map 的所有方法和特性,同时 LinkedHashMap 继承了 HashMap 所有非私有的成员变量方法。public class LinkedHashMap<K,V> extends HashMap<K,V&g...原创 2018-07-19 22:34:47 · 457 阅读 · 0 评论 -
java 集合 —— Set 实现类之 HashSet
源码基于jdk 1.7.81HashSet 简介HashSet 是一个元素不能重复的集合。HashSet 中当添加的元素有重复时,添加失败。HashSet 是 Set 的一个实现类,而 Set 又继承了Collection 方法,并且没有添加多余的方法。HashSet 继承了AbstractSet 类。实现了 Cloneable 接口,说明它重写了clone()方法,可以被...原创 2018-07-23 18:19:10 · 465 阅读 · 0 评论 -
第一个HelloWorld
第一个HelloWorldpublic class HelloWorld{ public static void main(String[] args){ for(int i=0;i<args.length;i++){ System.out.println(i+":"+args[i]); } System.out.println("HelloWorld!"); }}pu...原创 2018-05-07 22:48:32 · 159 阅读 · 0 评论 -
java 基础——基本数据类型
一、java的基本数据类型二、.基本类型之间的转换char类型不能和其他任何基本类型自动转换byte char short int long float double booleanbyte<(char = short)<int<long<float<doublechar:无符号的整数。必须强转的情况...原创 2018-05-07 23:45:29 · 173 阅读 · 0 评论 -
用栈实现中缀表达式转后缀表达式
转换规则:相同等级的运算符,栈外高于栈内。栈外的左括号优先级最高。栈内的左括号优先级最低。栈外的右括号优先级最低。低到和栈内的左括号优先级一样。1.写一个类用来存储优先级,数字越小优先级越高。public class Constant { public static final int OPERATORS_PRIO_PLUS_IN = 4; //栈内加法 public static fina...原创 2018-05-08 16:00:38 · 885 阅读 · 0 评论 -
Java 数据结构——链式栈
1 . 链式栈的定义。链式栈的定义和单链表的定义一样。入栈采用单链表的头插法,出栈依然从第一个节点开始删除,刚好实现了栈先进后出的特点,链式栈不用判断栈空和栈满。class LinkStack{ class Entry{ int data; Entry next; public Entry(){ this.data = -1; this.next = null; }...原创 2018-05-08 16:26:51 · 361 阅读 · 0 评论 -
用两个栈实现一个队列
用两个栈实现一个队列1 . 一个栈用来做存储空间,一个用来做缓冲空间。 Stack s1 = new Stack();//作为存储空间 Stack s2 = new Stack();//作为缓冲空间2.队列的基本操作。a .判断队列是否为满:也就是判断栈 s1 是否为满。 public boolean isFull(){ return s1.isFull(); } b...原创 2018-05-08 16:58:21 · 246 阅读 · 0 评论 -
java 数据结构——循环队列、链式队列、优先级队列
java 实现循环队列 1 . 数组 elem 存储队列元素。front 和 rear 分别表示对头和对尾。usedSize表示存储的有效位的个数。allSize表示数组的长度。数组仅存储 allSize - 1 个元素,还有一个空间被浪费。循环队列不能用rear = rear + 1指向下一个元素,会发生越界,而要用this.rear = (this.rear+1) % this.allSiz...原创 2018-05-08 17:51:38 · 476 阅读 · 0 评论 -
用两个队列实现一个栈
用两个队列实现一个栈1.入栈入队的时候看哪个栈队列不为空则给哪个入队。public static void enterStack(QueueLink q1,QueueLink q2,int val){QueueLink p = null;if(!q1.isEmpty()){p = q1;}else{ p = q2;} ...原创 2018-05-11 09:38:06 · 371 阅读 · 0 评论 -
java 数据结构——字符串匹配算法
1.用java实现 BF 算法BF算法又称为暴力算法,它的核心思想是:从下标为 0 处比较主串和子串,若相等,则依次向下比较,直到子串结束,则得到匹配结果,若不相等,则主串回溯到下标为 1 处和子串下标为 0 处比较,依次类推,直到得到结果。优点:比较容易理解,没有对主串和子串进行多余的处理。缺点:每次每次字符不匹配时,都要回溯到开始位置,时间开销大。大家可以按照下面的图来理解比较容易一些。下面用...原创 2018-05-12 00:24:26 · 2403 阅读 · 0 评论 -
java 数据结构——java实现顺序表、单链表
线性表示数据结构的一种,它是 n 个具有相同特性的 数据元素的有限序列。顺序表顺序表指的是用一组地址连续的存储单元存储线性表中的数据元素,称为线性表的顺序存储结构或者顺序映像。线性表采用顺序存储的方式存储就称之为顺序表。一 . 顺序表的建立。class TestSqlist{ int usedSize;//当前有效的数据元素的个数。 int[] elem;//用一组地址连续...原创 2018-05-13 17:05:22 · 1340 阅读 · 0 评论 -
经典排序算法——希尔(Shell)排序
Shell(希尔)排序希尔排序(Shell Sort)是插入排序的一种,是对直接插入法排序的一种改进。插入排序请参考我的另一篇博文:经典排序算法—直接插入法排序希尔排序是按照分治法的思想,将原来的元素分成几个组,在组内采用直接插入法进行排序。时间复杂度:O(n^1.3~2.5) 不稳定如:6 9 2 7 5 3按照关键字进行分组:我们选取3 和 1 。首先按照关键字 3...原创 2018-05-13 23:15:59 · 954 阅读 · 0 评论 -
经典排序算法——快速排序及其优化
快速排序快速排序的思想:通过一趟排序将数据分割成独立的两部分,其中一部分数据都比另一部分的所有数据都要小,然后再按照此方法对这两部分数据分别进行快速排序,可以递归的进行。时间复杂度:好的情况(无序的):O(nlog2n) 坏的情况(有序的):O(n^2)快速排序法不稳定。让我们先通过一个例子来了解一下:12 5 4 25 10 15...原创 2018-05-14 00:37:47 · 2291 阅读 · 0 评论 -
经典排序算法——堆排序
堆排序这里的堆指的是完全二叉树。我们先来了解一下最大堆。最大堆就是二叉树中所有的父节点都大于子节点。如图,下图就是一个堆。下面我先来简单介绍一下堆排序的过程。构造一个最大堆。将最大的值拿出来。剩下的元素继续构造一个最大堆。堆排序的关键就在于构造最大堆。下面我们来详细的介绍一下最大堆的求法。首先我们找到最后一个元素的父节点,比较它和他两个孩子节点,找到最大值赋给它。依次对前面的节点进行相同的操作。下...原创 2018-05-17 19:17:49 · 279 阅读 · 0 评论 -
经典排序算法——归并排序
归并排序归并合并简单来说就是先将数组分成组,然后再将组有序的合并起来。我们可以拿一个例子来分析一下。1 3 5 2 7 4 0我们将上面的数组分成两两一组(剩下不够一组的则单独分成一组)。【1 3】【5 2】【7 4】【0】拿出两个组来进行有序的合并。【1 3】【5 2】合并为【1 2 3 5】【4 7】【0】合并为【0 4 7】所以现在得到的是1 2 3 ...原创 2018-05-18 23:57:29 · 262 阅读 · 0 评论 -
经典排序算法——基数排序法
基数排序法奇数排序法比较简单,只不过我们需要设置十个桶来分别暂时存储元素现在我们用一个例子简单的了解一下。1.比较个位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。2.比较十位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。2.比较百位数字,分别将它们放到对应号码的桶里。然后分别取出来(从桶底取出来)。这个过程下来就是排好序的数组啦。...原创 2018-05-19 00:28:04 · 1656 阅读 · 1 评论 -
经典排序算法——直接插入排序算法
直接插入排序每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数...原创 2018-05-19 10:35:42 · 672 阅读 · 0 评论 -
经典排序算法——选择排序
选择排序第1趟,在待排序记录array[0]~array[array.lenght-1]中选出最小的记录,将它与array[0]交换;第2趟,在待排序记录array[1]~array[array.lenght-1]中选出最小的记录,将它与array[1]交换;以此类推,第i趟在待排序记录array[i]~array[array.lenght-1]中选出最小的记录,将它与array[i]交换,使有序...原创 2018-05-19 10:49:21 · 326 阅读 · 0 评论