<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dangkun321的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dangkun321</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dangkun321]]></copyright><item><title><![CDATA[Object类实现了哪些方法]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/109083513</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/109083513</guid><author>dangkun321</author><pubDate>Wed, 14 Oct 2020 20:55:55 +0800</pubDate><description><![CDATA[1 clone方法
保护方法，实现对象的浅复制，只有实现了Cloneable接口才可以调用该方法，否则抛出CloneNotSupportedException异常。
2 getClass方法
final方法，获得运行时类型。
3 toString方法
该方法用得比较多，一般子类都有覆盖。
4 equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的，但是在Object中两者是一样的。子类一般都要重写这个方法。
5 hashCode方法
该方法用于哈希查找，重写了equals方法一般都要]]></description><category></category></item><item><title><![CDATA[约瑟夫环]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108969071</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108969071</guid><author>dangkun321</author><pubDate>Thu, 08 Oct 2020 21:41:34 +0800</pubDate><description><![CDATA[public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            List&lt;Integer&gt; list = new ArrayList&lt;&gt;();
            for (]]></description><category></category></item><item><title><![CDATA[Spring]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108832124</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108832124</guid><author>dangkun321</author><pubDate>Sun, 27 Sep 2020 19:39:35 +0800</pubDate><description><![CDATA[一: 什么是 Spring 框架?
Spring是一个 控制反转和面向切面的容器框架.
Spring 框架七大主要模块？
1、Core. 是Spring的核心类库, Core实现了IOC功能。
2、AOP. 是Spring的AOP库，提供了AOP（拦截器）机制，并提供常见的拦截器，供用户自定义和配置。
3、orm. 提供对常用ORM框架的管理和支持，hibernate、mybatis等。
4、Dao. Spring提供对JDBC的支持，对JDBC进行封装。
5、Web. 对Struts2的支持。
6、Con]]></description><category></category></item><item><title><![CDATA[贪心算法]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108691001</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108691001</guid><author>dangkun321</author><pubDate>Sun, 20 Sep 2020 12:01:22 +0800</pubDate><description><![CDATA[贪心算法: 在对问题求解时, 总是做出在当前看来是最好的选择. 也就是说, 不从整体最优上加以考虑, 他所做出的是在某种意义上的 局部最优解.
该算法存在的问题:
(1) 不能保证求得的最后解是最佳的.
(2) 不能用来求最大值或最小值的问题.
(3) 只能求满足某些约束条件的可行解的范围.
1 选择排序.
    public static void selectSort(int[] array) {
        for (int bound = 0; bound &lt; array.length-]]></description><category></category></item><item><title><![CDATA[Spring]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108350639</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108350639</guid><author>dangkun321</author><pubDate>Tue, 01 Sep 2020 23:05:43 +0800</pubDate><description><![CDATA[1 传统的开发步骤, 要配置很多xml文件.
public static void main(String[] args) {
        ApplicationContext context = new
                ClassPathXmlApplicationContext("applications.xml");

        //通过bean的名称获取 bean对象. bean的名称就是xml中bean的id
        String bit=(String)cont]]></description><category></category></item><item><title><![CDATA[线程/进程间的通信方式]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108313198</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108313198</guid><author>dangkun321</author><pubDate>Sun, 30 Aug 2020 23:56:03 +0800</pubDate><description><![CDATA[1 什么是线程通信?
多个线程在处理同一个资源, 并且任务不同时, 需要线程通信来帮助解决线程之间对同一个变量的使用或操作. 就是多个线程在操作同一份数据时, 避免对同一共享变量的争夺.
2 为什么要线程通信?
(1) 多个线程并发执行时, 在默认情况下CPU是随机切换线程的，当我们需要多个线程来共同完成一件任务，并且我们希望他们有规律的执行, 那么多线程之间需要一些协调通信，以此来帮我们达到多线程共同操作一份数据。
(2) 当然如果我们没有使用线程通信来使用多线程共同操作同一份数据的话，虽然可以实现, 但]]></description><category></category></item><item><title><![CDATA[Redis]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108184532</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108184532</guid><author>dangkun321</author><pubDate>Sun, 23 Aug 2020 20:20:30 +0800</pubDate><description><![CDATA[Redis: 常用作企业级的 缓存中间件.


缓存的优点:
相较于数据库,缓存性能更高.
(1) 缓存一般是以 key-value 的方式存储的. 不像数据库一样还有查询的条件因素, 所以查询的性能一般要比数据库高.
(2) 缓存的数据是在 内存中存在的, 而数据库的数据是在磁盘中存储的. 因为内存的操作速度远快于磁盘, 因此查询效率会高很多.
(3) 缓存更容易实现 分布式部署(一台服务器变成多台相连的的服务器集群), 而数据库一般比较难实现分布式部署. 因此缓存的负载和性能更容易平行扩展和增加.
..]]></description><category></category></item><item><title><![CDATA[海量数据处理]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108100599</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108100599</guid><author>dangkun321</author><pubDate>Wed, 19 Aug 2020 16:16:12 +0800</pubDate><description><![CDATA[给 40亿个 不重复的无符号整数, 没排过序. 给一个无符号整数, 如何快速判断一个数是否在这40亿个数中.
1位图: 就是用每一位来存放某种状态, 适用于海量数据, 数据无重复的场景. 通常是用来判断某个数据存不存在.

创建 byte 类型的数组, 由于是海量数据, 40亿*1bit 占用的内存不大, 可以在内存中运行. 通过先除后求余的方式, 找到具体的位置. 然后看该位置的值为1就是存在, 为0就是不存在.
2 布隆过滤器: 可以用来判断某个数据存不存在, 是哈希表和位图的结合. (提高查询效率, ]]></description><category></category></item><item><title><![CDATA[怎么杀死一个进程]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108014668</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108014668</guid><author>dangkun321</author><pubDate>Fri, 14 Aug 2020 22:09:16 +0800</pubDate><description><![CDATA[1 管理员身份打开cmd
netstat -ano | findstr 8080
2 taskkill  -pid 要关闭的进程号 -f

]]></description><category></category></item><item><title><![CDATA[MySQL行锁和表锁 存储引擎]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/108006856</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/108006856</guid><author>dangkun321</author><pubDate>Fri, 14 Aug 2020 16:28:29 +0800</pubDate><description><![CDATA[1 数据库锁定机制简单来说, 就是数据库为了保证数据的一致性, 而使各种共享资源在被 并发访问变得  有序所设计的一种规则.
2 行级锁定 (row-level). 使用行级锁定的主要是 InnoDB 存储引擎.
行级锁定最大的特点就是锁定对象的 颗粒度很小, 所以发生锁定资源争用的概率也最小, 能够给予应用程序尽 可能大的并发处理能力 而提高一些需要 高并发 应用系统的整体性能.
行级锁: 开销大, 加锁慢, 会出现死锁. 锁定粒度最小, 发生锁冲突的概率最低, 并发度也最高.
3 表级锁定 (table]]></description><category></category></item><item><title><![CDATA[HashMap, HashTable, ConcurrentHashMap 的区别 TreeMap]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107861119</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107861119</guid><author>dangkun321</author><pubDate>Fri, 07 Aug 2020 14:53:19 +0800</pubDate><description><![CDATA[1 HashMap, HashTable, ConcurrentHashMap 的区别.

2 重点: HashMap 和 ConcurrentHashMap 各个版本 的实现细节及区别.
HashMap 1.7

HashMap 1.8

ConcurrentHashMap 1.7

ConcurrentHashMap 1.8

3 HashMap 是无序的, 线程不安全. 数组存储区间是连续的, 占用内存严重, 所以读取快, 写入慢.
LinkedHashMap 是有序的, 线程不安全. 空间复杂度很小]]></description><category></category></item><item><title><![CDATA[泛型]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107852090</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107852090</guid><author>dangkun321</author><pubDate>Thu, 06 Aug 2020 23:35:47 +0800</pubDate><description><![CDATA[泛型.
(1) 泛型是在 编译时 检查类型安全, 运行期间没有泛型概念.   编译期 自动进行类型转换, 避免在运行时出现 ClassCastException(类型转换)异常.
(2) 泛型的本质是  参数化类型. (&lt;&gt;里面可以是任意引用类型, 包括自己写的类, 基础类型可以使用 封装类解决).
(3)  泛型利用的是  Object类 是所有类的祖先类, 并且父类的引用可以指向子类对象的特性.
public class A&lt;T&gt; {
    T value;
    
    ]]></description><category></category></item><item><title><![CDATA[多线程的线程安全问题.]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107843713</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107843713</guid><author>dangkun321</author><pubDate>Thu, 06 Aug 2020 17:38:03 +0800</pubDate><description><![CDATA[1 工作内存和主内存.
(1) 主内存: 所有的变量都存储在 主内存中.
(2) 工作内存: 每个线程都有自己独立的工作内存, 里面保存该线程使用到的 变量副本(主内存中该变量的一份拷贝).
2 我们规定:
(1) 线程对共享变量的所有操作都必须在自己的 工作内存 中进行, 不能直接从主内存中读写.
(2) 不同线程之间 无法直接访问其他线程工作内存 中的变量, 线程间变量的传递主要通过 主内存 来完成.
3 修改 线程A中的变量.
(1) 把工作内存A中更新过的共享变量 刷新到主内存中.
(2) 将主内存]]></description><category></category></item><item><title><![CDATA[BST的有序性]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107712783</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107712783</guid><author>dangkun321</author><pubDate>Fri, 31 Jul 2020 14:34:14 +0800</pubDate><description><![CDATA[给定一棵二叉搜索树, 请找出其中的第k小的结点.
思路: 按照中序遍历找.
class TreeNode1 {
    int val = 0;
    TreeNode1 left = null;
    TreeNode1 right = null;

    public TreeNode1(int val) {
        this.val = val;
    }
}

public class DemoB {
    TreeNode1 KthNode(TreeNode1 pRoot, in]]></description><category></category></item><item><title><![CDATA[滑动窗口问题]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107690647</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107690647</guid><author>dangkun321</author><pubDate>Thu, 30 Jul 2020 15:07:02 +0800</pubDate><description><![CDATA[输出所有和为S的连续正数序列, 序列内按照从小到大的顺序.
public class DemoA {
    public ArrayList&lt;ArrayList&lt;Integer&gt;&gt; FindContinuousSequence(int sum) {
        ArrayList&lt;ArrayList&lt;Integer&gt;&gt; result = new ArrayList&lt;&gt;();
        int low  = 1;
        int ]]></description><category></category></item><item><title><![CDATA[数组中一个或两个数字不同]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107689344</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107689344</guid><author>dangkun321</author><pubDate>Thu, 30 Jul 2020 14:23:05 +0800</pubDate><description><![CDATA[1 一个整型数组里除了一个数字之外, 其他的数字都出现了两次. 请写程序找出这个只出现一次的数字.
思路: 0和两个相同的数字按位异或还是0. 0和一个数字按位异或得到该数字.
	public int singleNumber(int[] array) {
        int ret = 0;
        for (int x : array) {
            ret ^= x;
        }
        return ret;
    }

2 一个整型数组里除了两个数字之外]]></description><category></category></item><item><title><![CDATA[二进制中1的个数]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107633915</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107633915</guid><author>dangkun321</author><pubDate>Tue, 28 Jul 2020 13:36:42 +0800</pubDate><description><![CDATA[输入一个整数, 输出该数二进制表示中1的个数. 其中负数用补码表示.
思路: 一个二进制中1的个数等于 该数 按位与 该数-1, 直到结果为0. 用count计算1的个数.
  public int NumberOf1(int n) {
        int count = 0;
        while (n != 0) {
            n &amp;= (n - 1);
            count++;
        }
        return count;
    }
]]></description><category></category></item><item><title><![CDATA[动态规划问题]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107620981</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107620981</guid><author>dangkun321</author><pubDate>Mon, 27 Jul 2020 21:14:34 +0800</pubDate><description><![CDATA[1 一只青蛙一次可以跳上1级台阶, 也可以跳上2级. 求该青蛙跳上一个 n级 的台阶总共有多少种跳法.
动态规划(dp) 思想. (注意区分于递归)
1 定义状态. f(n): 青蛙跳上 第n级 台阶总共跳法.
2 状态转移方程. f(n) = f(n-1) + f(n-2)
3 设置初始值. f(0)=1 f(1)=1 f(2)=2 (f2设置与否都行).
public class DemoA {
    public int JumpFloor(int target) {
        int[] d]]></description><category></category></item><item><title><![CDATA[斐波那契 和 阶乘]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107619425</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107619425</guid><author>dangkun321</author><pubDate>Mon, 27 Jul 2020 19:57:28 +0800</pubDate><description><![CDATA[1 斐波那契的 递归算法.
   public static int Fib1(int n){
        if (n == 1 || n == 2) {
            return 1;
        }
        return Fib1(n-1)+Fib1(n-2);
    }

斐波那契的 迭代(非递归)算法.
 public static int Fib(int n) {
        if (n == 1 || n == 2) {
            return 1]]></description><category></category></item><item><title><![CDATA[左右最值最大差]]></title><link>https://blog.youkuaiyun.com/dangkun321/article/details/107610064</link><guid>https://blog.youkuaiyun.com/dangkun321/article/details/107610064</guid><author>dangkun321</author><pubDate>Mon, 27 Jul 2020 13:42:22 +0800</pubDate><description><![CDATA[给定一个长度为N(N&gt;1)的整型数组A，可以将A划分成左右两个部分，左部分A[0…K]，右部分A[K+1…N-1]，K可以取值的范围是[0,N-2]. 求这么多划分方案中，求左部分中的最大值减去右部分最大值的绝对值的最大是多少.
思路: 只需用数组最大值减去数组两端较小的那个值即可.
public class DemoA {
    public int findMaxGap(int[] A, int n) {
        int max = 0;
        for (int i = 0; ]]></description><category></category></item></channel></rss>