- 博客(36)
- 收藏
- 关注
原创 判断两个时间点相隔几周
public static void main(String[] args) throws ParseException { String day = "2021-07-04 20:07:33"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); long startTime = getMondayZeroTime(simpleDateForm..
2021-07-13 11:24:23
299
原创 IDEA 文件上面图标显示不对
一次设置编辑器的.properties 文件时,发现自己的文件标识与别人的 不一样自己的别人的百度了半天也没有找到解决方案,最后在查找 设置 file type 的时候发现,as的标志代表这样的文件,最下面选项中加了 .*es会把所有 .*es的文件标识为 AS类型的,于是去掉后这个之后 我的.preperties 文件正常显示了如果遇到 其他类型的 文件显示不正确,可以参考这个方案,改下对应的设置...
2020-09-11 13:31:54
3183
1
原创 wait,notify,notifyAll
notify()是唤醒一个线程notifyAll()是唤醒全部线程每个对象都有唯一与之对应的内部锁(Monitor),虚拟机为每个对象维护两个队列,Entry Set ,Wait Set.对于任意的Object object,Entry set存储等待获取object内部锁的所有线程,Wait Set 用于存储 object.wait/object.wait(long)的线程eg: Object object ,内部锁 monitorO当 A,B,C 三个线程同时请求获得monitorO
2020-08-18 15:02:18
163
原创 用maven创建web项目中遇到的问题
1创建maven工程后包不全缺少src/main/java 和src/test/java,在百度一番之后,发现原因是jdk的版本不一致。选中项目,build path -> configure build path选中自己的jdk,然后保存,文件包就都有了然后再把1.5的jdk删掉就好了2实现servlet的时候,一直访问不了,原因:pom文件引...
2019-06-04 17:44:41
171
原创 数据结构——大根堆
大根堆: 堆总是不大于其父节点的值:二叉堆中的上浮,siftUp,把新节点加在最后一位,然后跟该节点的父节点相比较,大于父节点,交换二叉堆中的下沉,siftDown,把最大的根节点移除后,把最后一个节点放在根的位置,然后把该根节点的左右孩子的最大值作比较,小了,交换。public class MaxHeap<E extends Comparable<E>> {...
2018-12-05 23:04:48
719
原创 数据结构——二分搜索树
二分搜索树:每个节点的值大于其左子树的所有节点的值,小于其右子树的所有节点的值,它的每一颗子树也是二分搜索树定义一个二分搜索树:public class BST<E extends Comparable<E>> { private class Node { public E e; public Node left, r...
2018-11-25 17:52:01
100
原创 数据结构——可变数组的实现
package sjjg;/*** 可变数组* @author wl**/public class Array<E> { //存储数据数组 private E[] data; //size private int size; /* * 无参方法 */ public Array() { ...
2018-11-22 10:21:53
166
原创 java虚拟机——垃圾回收器
Serial收集器:serial收集器是最基本的发展最悠久的收集器,这是一个单线程收集器,它只会使用一个CPU,一个收集线程去完成垃圾收集工作,更重要的是它进行垃圾收集工作时必须暂停所有的其他线程,直到它收集结束。暂停所有线程,stop the world,在用户看不见的情况下把用户正常工作的线程给全部停止。下图示意了 Serial/Serial Old收集器的运行过程。 相对...
2018-11-11 16:04:29
176
原创 java虚拟机——回收对像及回收算法
判断对象已死:1 引用计数法:给对象中添加一个引用计数器,每当一个地方引用他,计数器+1,当失效时计数器-1,任何时刻计数器为0时,对象就是不可能再被使用的。优缺点:实现简单且效率高,大部分情况下都是一个不错的算法,但是至少主流的java虚拟机没有使用它,其中最重要的原因是它没有解决“对象循环引用”的问题2 可达性分析算法:这个算法的基本思路就是通过一系列的被称为“GCRoots”的...
2018-11-07 21:08:14
150
原创 java虚拟机——对象内存的分配
对象内存的分配1 假设内存是绝对规整的,用过的放一边,没用过的放另一边,中间有指针做分界线,分配内存时指针向下移动对象大小的 距离,称之为“指针碰撞”2 已使用的内存与未使用的内存相互交错,那么虚拟就需要维护一张表,记录哪块内存可用,哪块内存不可用,分配内存时 从列表中找出一块足够大的内存,这种分配方式称之为“空闲列表”3 选择哪种方式是由堆是否规整决定的,...
2018-11-06 21:11:54
143
原创 java虚拟机——虚拟机内存
java虚拟机的内存分为五大块 程序计数器 java虚拟机栈 本地方法栈 堆 方法区一 :程序计数器: 1 是一块较小的内存,可以看做当前线程所执行字节码的行号指示器。 2 在多线程中每一个线程都应该有一个独立的程序计数器 3 如果是一个java方法,计数器记录的是正在执行的虚拟机的字节码指令地址,n...
2018-11-05 21:23:25
112
原创 TCP三次握手四次挥手
提起tcp我们总把它和udp放在一起对比,那么我先来总结下它们之间的区别1tcp是面向连接的,udp是无连接的2tcp提供可靠服务。tcp传输的数据无差错,不丢失,不重复,且按顺序到达:udp做最大努力交付,不保证可靠传输3tcp面向字节流,udp面向报文4tcp只能点到的,而udp支持一对一,一对多,多对一,多对多的通信tcp三次握手过程 为什么要三次握手第一次握...
2018-10-11 17:55:18
128
原创 jdk源码——LinkedHashMap——jdk1.7
LinkedHashMap的定义public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{private transient Entry<K,V> header;//头结点 private final boolean ...
2018-09-28 17:03:49
635
原创 jdk源码——ConcurrentHashMap——jdk1.7
首先做个分析:hashMap,hashTable,ConcurrentHashMap,这三者之间的区别,HashMap是线程不安全的,在多线程的环境下,hashMap的put方法可能引起死循环,于是为了线程安全,出现了hashTable,hashTable解决多线程安全的问题是简单粗暴的加synchronized关键字,但是这种方法引起效率低下,于是ConcurrentHashMap出现了,...
2018-09-28 14:13:51
313
原创 jdk源码——hashmap的1.8与1.7比较
1.8链表的定义基本上与1.7相同,但是类名改为Node,但是node实现了Map.Entry接口,实质是一样的static class Node<K,V> implements Map.Entry<K,V> {1.8的hash值的算法更加直观一点,就是key的hashcode与无符号右移16位的hashcode异或,然后返回。这是为了当length比较小的时...
2018-09-27 16:10:22
801
2
原创 jdk源码——HashMap
JDK1.7从源码上看,HashMap 实现了Map接口 cloneable接口,和序列化接口public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable{HashMap的默认初始容量为16stat...
2018-09-25 21:12:22
179
原创 jdk源码——linkedList
从源码的定义中,我们可以看出linkedList是实现list接口和deque接口的双端链表public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable...
2018-09-25 15:29:19
124
原创 单例
饿汉式public class Single{//立即加载==饿汉式private static Single single = new Single();//私有化构造方法private Single(){}public static Single getSingle(){ return single; }}懒汉式public c...
2018-09-24 17:13:21
110
原创 多线程笔记——3
线程间的通信1等待唤醒机制wait notify是object类的方法,该方法用来将当前线程置入“预执行队列”,并在wait处停止执行直到被唤醒才继续执行执行wait()方法,线程必须获得该对象的对象级别的锁,否则会抛出IllegalMonitorStateException.wait 方法释放锁 sleep 方法不释放锁 notify 被执行后不释放锁,必须执行完not...
2018-09-24 16:49:04
146
原创 多线程笔记——2
对象及变量的并发访问1 Synchronized 同步方法多线程对同一个对象中的实例变量进行并发访问的时候产生的后果就是脏读,而线程安全就是要同步获取实例变量2 synchronized 锁是对象锁,两个线程分别访问同一个类的两个不同对象的同一个方法,效果是异步执行的。3关键字synchronized 声明的方法一定是排队进行的4 synchronized 锁重入 当一...
2018-09-24 11:27:00
97
原创 多线程笔记——1
在学习多线程的时候首先我们要清楚一线问题:1进程:系统分配资源和调度的独立单位,线程: 进程中独立运行的子任务2多线程的实现方式 集成Thread类和实现Runnable接口3线程的执行顺序与调用顺序无关的,start()方法会通知“线程规划器”,由它启动一个线程来执行run()方法4Thread类其实也是实现的Runnable接口 其源码中定义为: class Thread i...
2018-09-24 10:10:42
116
原创 jdk源码——ArrayList
ArrayList的初始化,我们可以指定大小也可以不指定大小,默认大小是10,public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity:...
2018-09-17 15:24:25
112
原创 jdk源码——object
Object类,打开源码看到这样的注释大意就是说Object类是所有类的根,所有的类都实现Object类里面的方法1 Class<?> getClass();2 hashCode() 返回改类的hashCode值3 equals方法 object里面的equals方法用的是,我们可以自己重写该方法。public boolean equals(Object o...
2018-09-17 11:21:41
173
原创 整数的翻转
示例:输入123 输出321输入-123输出-321这个题主要看反转后是否溢出,这就需要对rev进行判断 public int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10; x /= 10...
2018-08-28 17:04:07
242
原创 链表问题
1判断链表中是否有环设置一个快指针,慢指针,当存在环的情况下就会出现快慢指针相等的情况public ListNode isLoop(ListNode head){//判断是否有环 ,快慢指针相遇,有环, ListNode slow = head; ListNode fast = head; while(fast!=null &&...
2018-08-20 21:25:02
121
原创 链表的翻转
public ListNode reverseListNode(ListNode node){ ListNode pre = null; ListNode now = node;//当前节点 while (now !=null){ ListNode after = now.next; now.next ...
2018-08-20 21:16:57
112
原创 利用插入排序对链表进行排序
下图是对 4-15-9-1插入排序的举例当if(p.val<=p.next.val){ p=p.next;} 当不满足条件时 q=p.next p.next=q.next 这时候,需要把q节点放到p节点之前的合适位置,即while(r.next.val<=q.val){ r=r.next; ...
2018-08-15 22:08:00
2485
原创 插入排序
插入排序的意思是,在一组有序的数中,找到待插入数合适的位置,然后将数放入如下图 原数组9,3,4,2,6,7,5,1,我们假设为4,5,9为排好序的,2,6,7,8,1位带插入的数,i j指向数组中的2,操作如下图所示代码如下 public static void insertSort(int[] arr){ int temp=0; int i=0;...
2018-08-15 15:54:16
103
原创 快速排序
快速排序,每次把数组的第一个数作为边界值pivot,边界值左边都是比它小的数,右边都是比他大的数,low表示数组头,high表示数组尾,i=low,j=high,总数组的尾部开始找一个比边界小的数,找到后再从数组头部找到一个比它大的数,交换arr[i]与arr[j]的值,当 不满足i<j的条件时,代表 i与j重合,本次排序完成,就交换arr[i]与边界的值。如下图所示 是该数组第一次排序的过...
2018-08-15 14:44:29
116
原创 二分查找数
package sort;import java.util.Arrays;public class TestBinarySearch { public static void main(String[] args) { int[] arr ={2,5,3,8,6,4,7}; Arrays.sort(arr); System.out.p...
2018-08-14 21:43:01
216
原创 在o(N log N)时间内使用恒定的空间复杂度对链表进行排序。
时间复杂度要求为o(N log N)所以,排序方法采用归并排序代码如下package sort;class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; }}public class TestListNode ...
2018-08-14 21:22:04
1085
原创 归并排序
归并排序,要理解其排序的方法,就是将数组分成大小相同的两个序列,直至每个序列都有一个数为止,然后进行合并,所以分为,分解 合并两个操作具体代码如下:import java.util.Arrays;public class TestMargeSort { public static void main(String[] args) { int[] arr = {4...
2018-08-13 22:20:14
107
原创 已知在二维平面上有一堆点,用穷举法求同一条直线上点最多的个数
/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Point(int a, int b) { x = a; y = b; } * } */public class Solution { public in...
2018-08-13 22:05:11
564
原创 利用栈实现加法运算
例子: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6题意为 参数 a,b 运算符
2018-08-13 21:57:56
911
原创 百元百鸡中的数学问题
我前些天在一位大佬的博客中看到了关于百鸡问题的解决方案所想到的问题,数学在对程序的重要性。正常我们看到百鸡问题(公鸡五元一只,母鸡三元一只,小鸡一元三只,100元钱买100只鸡其中公鸡母鸡小鸡各多少只)就直接列个等式x+y+z=100 5x+3y+z/3=100 0<x<20; 0<y<33; 然后就可以写出代码for(int i =1;i&l...
2018-08-10 09:54:29
861
原创 找出数组中最小的两个数
找出数组中最小的两个数,在一次遍历中就可以实现,m1来表示最小的值,m2表示出现次小的值代码如下:import java.util.Scanner;public class FindTwoLow { public static void main(String []args){ //find two lowest int[] arr={5...
2018-08-06 22:09:35
6619
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人