KANG's BLOG

Let's have some fun

tomcat日志乱码

tomcat日志中出现“淇℃伅”的乱码 问题 本地启动调试,控制台输出日志出现乱码 淇℃伅 解决方式 修改/conf/logging.properties文件 # java.util.logging.ConsoleHandler.encoding = UTF-8 java.

二叉树

二叉树遍历 A:根节点、B:左节点、C:右节点 前序顺序是ABC 中序顺序是BAC 后序顺序是BCA class TreeNode{ public int data; public TreeNode leftChild; public TreeNode rightChild; public static void inOrderTraversal(TreeNode node){ if (node == null) { return; } else { inOrderTraversal(node.

冒泡排序

/** * 冒泡排序,升序排列 * 数组当中比较小的数值向下沉,数值比较大的向上浮! */ public static int[] bubbleSort (int[] arr){ // 外层for循环控制循环次数 for (int i = 0; i < arr.

开启异步@Async

如何在spring中开启多线程 首先需要使用@EnableAsync注解全局开启spring线程池,该注解通常标记在springboot启动类或者spring线程池配置类上。 然后@Async标记的方法会在bean初始化时注册到线程池中 spring线程池配置类 @Configuration public class ThreadPoolTaskConfig { @Bean public Executor executor(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //此方法返回可用处理器的虚拟机的最大数量; 不小于1 int core = Runtime.

归并排序

递归法实现 递归法 将序列每相邻两个数字进行归并操作,形成floor(n/2)个序列,排序后每个序列包含两个元素 将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素 重复步骤2,直到所有元素排序完毕 动图演示

快速排序

实现逻辑 从数列中挑出一个元素,称为 “基准”(pivot), 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 代码实现 public void quickSort(int[] data, int start, int end) { if (data == null || start >= end) return; int i = start, j = end; int pivotKey = data[start]; while (i < j) { while (i < j && data[j] >= pivotKey) j--; if (i < j) data[i++] = data[j]; while (i < j && data[i] <= pivotKey) i++; if (i < j) data[j--] = data[i]; } data[i] = pivotKey; quickSort(data, start, i - 1); quickSort(data, i + 1, end); }

数组和链表的区别

ArrayList扩容 当数组的大小大于初始容量的时候(比如初始为10,当添加第11个元素的时候),就会进行扩容,新的容量为旧的容量的1.5倍。 扩容的时候,会以新的容量建一个原数组的拷贝,修改原数组,指向这个新数组,原数组被抛弃,会被GC回收。 谁更快 CPU缓存会把一片连续的内存空间读入, 因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面, 平均读取每个元素的时间只要3个CPU时钟周期。 而链表的节点是分散在堆空间里面的,这时候CPU缓存帮不上忙,只能是去读取内存,平均读取时间需要100个CPU时钟周期。 这样算下来,理论上数组访问的速度比链表快33倍! 插入的话,由于数组需要移位,所以没有链表快。

注入方式@Autowired与@Resource的区别

@Autowired与@Resource的区别 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下: @Autowired() @Qualifier("baseDao") privateBaseDao baseDao; @Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。 @Resource(name="baseDao") privateBaseDao baseDao;