<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wanganyu1996的博客]]></title><description><![CDATA[小小程序猿的进阶之路]]></description><link>https://blog.csdn.net/wanganyu1996</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; wanganyu1996]]></copyright><item><title><![CDATA[希尔排序的实现]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/73506004</link><guid>https://blog.csdn.net/wanganyu1996/article/details/73506004</guid><author>wanganyu1996</author><pubDate>Tue, 20 Jun 2017 18:29:49 +0800</pubDate><description><![CDATA[直接插入排序(Insertion Sort)的基本思想是：每次将一个待排序的记录，按其关键字大小插入到前面已经排好序的子序列中的适当位置，直到全部记录插入完成为止。
 
设数组为a[0…n-1]。
1.      初始时，a[0]自成1个有序区，无序区为a[1..n-1]。令i=1
2.      将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。
3.      ]]></description><category></category></item><item><title><![CDATA[非阻塞同步算法与CAS(Compare and Swap)无锁算法]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/73033218</link><guid>https://blog.csdn.net/wanganyu1996/article/details/73033218</guid><author>wanganyu1996</author><pubDate>Sun, 11 Jun 2017 15:29:28 +0800</pubDate><description><![CDATA[锁（lock）的代价

锁是用来做并发最简单的方式，当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换，加锁、释放锁会导致比较多的上下文切换和调度延时，等待锁的线程会被挂起直至锁释放。在上下文切换的时候，cpu之前缓存的指令和数据都将失效，对性能有很大的损失。用户态的锁虽然避免了这些问题，但是其实它们只是在没有真实的竞争时才有效。

Java在JDK1.5之前都是靠syn]]></description><category></category></item><item><title><![CDATA[15个Java多线程面试题及回答]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/72852288</link><guid>https://blog.csdn.net/wanganyu1996/article/details/72852288</guid><author>wanganyu1996</author><pubDate>Sat, 03 Jun 2017 15:21:33 +0800</pubDate><description><![CDATA[15个Java多线程面试题及回答
1)现在有T1、T2、T3三个线程，你怎样保证T2在T1执行完后执行，T3在T2执行完后执行？这个线程问题通常会在第一轮或电话面试阶段被问到，目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单，可以用join方法实现。2)在Java中Lock接口比synchronized块的优势是什么？你需要实现一个高效的缓存，它允许多个用户读，但只允许一个用户写，]]></description><category></category></item><item><title><![CDATA[java多线程中的sleep()方法与wait()方法的区别]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/72842618</link><guid>https://blog.csdn.net/wanganyu1996/article/details/72842618</guid><author>wanganyu1996</author><pubDate>Fri, 02 Jun 2017 11:14:31 +0800</pubDate><description><![CDATA[sleep()是使线程暂停执行一段时间的方法。wait()也是一种使线程暂停执行的方法，例如，当线程交互时，如果线程对一个同步对象x发出一个wait()调用请求，那么该线程会暂停执行，被调用对象进入等待状态，直到被唤醒或等待时间超时
   具体而言，sleep()方法与wait()方法的区别主要表现在一下几个方面：
1）原理不同。sleep()方法是Thread的静态方法，是线程用来控制自身流]]></description><category></category></item><item><title><![CDATA[java笔记--关于线程同步（7种同步方式）]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/71739423</link><guid>https://blog.csdn.net/wanganyu1996/article/details/71739423</guid><author>wanganyu1996</author><pubDate>Fri, 12 May 2017 15:35:09 +0800</pubDate><description><![CDATA[关于线程同步(7种方式)


为何要使用同步？ 
    java允许多线程并发控制，当多个线程同时操作一个可共享的资源变量时（如数据的增删改查）， 
    将会导致数据不准确，相互之间产生冲突，因此加入同步锁以避免在该线程没有完成操作之前，被其他线程的调用， 
    从而保证了该变量的唯一性和准确性。

 

1.同步方法 
    即有synchronized关键字修]]></description><category></category></item><item><title><![CDATA[Hashtable/HashMap与key/value为null的关系]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/71513173</link><guid>https://blog.csdn.net/wanganyu1996/article/details/71513173</guid><author>wanganyu1996</author><pubDate>Tue, 09 May 2017 23:55:17 +0800</pubDate><description><![CDATA[大家都知道Hashtable与HashMap的三大区别，其中有一条则是HashMap可以存储一个Key为null，多个value为null的元素，但是Hashtable却不可以存储。究竟是为什么？下面看一下源代码：

HashMap.class:
    // 此处计算key的hash值时，会判断是否为null，如果是，则返回0，即key为null的键值对
    // 的hash为0。因此]]></description><category></category></item><item><title><![CDATA[十大Intellij IDEA快捷键]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/71287081</link><guid>https://blog.csdn.net/wanganyu1996/article/details/71287081</guid><author>wanganyu1996</author><pubDate>Sat, 06 May 2017 19:50:18 +0800</pubDate><description><![CDATA[Intellij IDEA中有很多快捷键让人爱不释手，stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱，想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键，这次就按照我日常开发时的使用频率，简单分类列一下我最喜欢的十大快捷-神-键吧。

1 智能提示

Intellij首当其冲的当然就是Intelligence智能！基本的代码提示用Ctrl+Space，]]></description><category></category></item><item><title><![CDATA[java中关键字volatile的作用]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70767386</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70767386</guid><author>wanganyu1996</author><pubDate>Tue, 25 Apr 2017 21:12:20 +0800</pubDate><description><![CDATA[用在多线程，同步变量。 线程为了提高效率，将某成员变量(如A)拷贝了一份（如B），线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm， 它所修饰的变量不保留拷贝，直接访问主内存中的（也就是上面说的A) 

=========================分割线1===========]]></description><category></category></item><item><title><![CDATA[数据库（手写选出一个公司年龄最大的100个员工）]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70766911</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70766911</guid><author>wanganyu1996</author><pubDate>Tue, 25 Apr 2017 20:20:18 +0800</pubDate><description><![CDATA[SELECT TOP 100
 雇员表.* FROM 雇员表 ORDER BY 雇员表.AGE DESC]]></description><category></category></item><item><title><![CDATA[数组和链表的区别]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70762161</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70762161</guid><author>wanganyu1996</author><pubDate>Tue, 25 Apr 2017 18:43:08 +0800</pubDate><description><![CDATA[数组静态分配内存，链表动态分配内存；
数组在内存中连续，链表不连续；
数组元素在栈区，链表元素在堆区；
数组利用下标定位，时间复杂度O(1),链表定位元素时间复杂度O(n)；
数组插入和删除的时间复杂度O(n),链表的时间复杂度O(1)。]]></description><category></category></item><item><title><![CDATA[数组和链表的区别]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70761848</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70761848</guid><author>wanganyu1996</author><pubDate>Tue, 25 Apr 2017 18:42:29 +0800</pubDate><description><![CDATA[数组静态分配内存，链表动态分配内存；
数组在内存中连续，链表不连续；
数组元素在栈区，链表元素在堆区；
数组利用下标定位，时间复杂度O(1),链表定位元素时间复杂度O(n)；
数组插入和删除的时间复杂度O(n),链表的时间复杂度O(1)。]]></description><category></category></item><item><title><![CDATA[快排java实现]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70232338</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70232338</guid><author>wanganyu1996</author><pubDate>Tue, 18 Apr 2017 20:30:51 +0800</pubDate><description><![CDATA[public class Sort {
public static void main(String[] args) {
 int a[]={1,4,54,6,76,87,889,6,87,5};
partition(a, 0, 9);
 for(int i=0;i
 System.out.println(a[i]);
 }
}
   public static void part]]></description><category></category></item><item><title><![CDATA[用两个栈来实现一个队列，完成队列的Push和Pop操作。 队列中的元素为int类型。]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70226632</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70226632</guid><author>wanganyu1996</author><pubDate>Tue, 18 Apr 2017 11:50:18 +0800</pubDate><description><![CDATA[import java.util.*;
import java.util.Stack;


public class Solution {
    Stack stack1 = new Stack();
    Stack stack2 = new Stack();
    
    public void push(int node) {
        stack1.push]]></description><category></category></item><item><title><![CDATA[单例模式有五种写法：懒汉、饿汉、双重检验锁、静态内部类、枚举。]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70211170</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70211170</guid><author>wanganyu1996</author><pubDate>Mon, 17 Apr 2017 15:06:29 +0800</pubDate><description><![CDATA[转 https://biezhi.me/article/how-to-correctly-write-singleton-pattern.html

单例模式算是设计模式中最容易理解，也是最容易手写代码的模式了吧。但是其中的坑却不少，所以也常作为面试题来考。本文主要对几种单例写法的整理，并分析其优缺点。很多都是一些老生常谈的问题，但如果你不知道如何创建一个线程安全的单例，不知道什么是双检锁，那]]></description><category></category></item><item><title><![CDATA[输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70186461</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70186461</guid><author>wanganyu1996</author><pubDate>Sat, 15 Apr 2017 19:47:44 +0800</pubDate><description><![CDATA[输入某二叉树的前序遍历和中序遍历的结果，请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}，则重建二叉树并返回。
/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;]]></description><category></category></item><item><title><![CDATA[输入一个链表，从尾到头打印链表每个节点的值。]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70183724</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70183724</guid><author>wanganyu1996</author><pubDate>Sat, 15 Apr 2017 12:22:46 +0800</pubDate><description><![CDATA[/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.*;
pub]]></description><category></category></item><item><title><![CDATA[请实现一个函数，将一个字符串中的空格替换成“%20”。例如，当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70176673</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70176673</guid><author>wanganyu1996</author><pubDate>Fri, 14 Apr 2017 22:53:33 +0800</pubDate><description><![CDATA[public class Solution {
    public String replaceSpace(StringBuffer str) {
          //从后往前，先确定字符串的长度和替换后的长度
       int len=str.length();
       int count=0;
       for(int i=0;i
           if(s]]></description><category></category></item><item><title><![CDATA[在一个二维数组中，每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70175604</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70175604</guid><author>wanganyu1996</author><pubDate>Fri, 14 Apr 2017 20:11:56 +0800</pubDate><description><![CDATA[在一个二维数组中，每一行都按照从左到右递增的顺序排序，每一列都按照从上到下递增的顺序排序。请完成一个函数，输入这样的一个二维数组和一个整数，判断数组中是否含有该整数。

public class Solution {
    public boolean Find(int target, int [][] array) {
           int row=array.length-1]]></description><category></category></item><item><title><![CDATA[题目描述  Given n points on a 2D plane, find the maximum number of points that lie on the same straight]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/70173499</link><guid>https://blog.csdn.net/wanganyu1996/article/details/70173499</guid><author>wanganyu1996</author><pubDate>Fri, 14 Apr 2017 16:27:18 +0800</pubDate><description><![CDATA[import java.util.*;
public class Solution {
    public int maxPoints(Point[] points) {
        if(points.length
            return points.length;
        int flag=0;
        for(int i=0;i
     ]]></description><category></category></item><item><title><![CDATA[Java实现链表的插入，删除，排序，输出]]></title><link>https://blog.csdn.net/wanganyu1996/article/details/68947430</link><guid>https://blog.csdn.net/wanganyu1996/article/details/68947430</guid><author>wanganyu1996</author><pubDate>Sat, 01 Apr 2017 19:28:51 +0800</pubDate><description><![CDATA[//链表的数据结构：
package test;


 class Node {
     Node next=null;
     int data;
     public Node(int data){
    this.data=data;
     }
}
//链表操作 的实现：
package test;


import com.oj.Main1;
]]></description><category></category></item></channel></rss>