java
小世界-_-
沉迷代码的程序媛
展开
-
关于全局变量/局部变量/静态变量的线程安全问题
局部变量不存在线程安全问题。静态变量在该类的所有实例之间共享,如果会进行修改的话会有线程安全问题。全局变量在单例时会有线程安全问题,多例时不存在。...原创 2019-01-08 14:28:51 · 2797 阅读 · 0 评论 -
HashMap和HashTable、ConcurrentHashMap、LinkedHashMap的区别?
>继承不同。 public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map >Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线...转载 2018-11-02 18:33:25 · 218 阅读 · 0 评论 -
java TreeSet 源码分析
底层数据结构:TreeMap哈哈,是不是很惊喜。没错,treeSet在map(NavigableMap)的基础上,将存储内容作为键存储在map当中,实现了有序的set。相关面试题TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?源码:public V put(K key, V value) {...原创 2018-11-01 18:25:22 · 212 阅读 · 0 评论 -
java treeMap 源码详解
底层数据结构:红黑树;红黑树的特点:(1) 每个节点或者是黑色,或者是红色。(2) 根节点是黑色。(3) 每个叶子节点是黑色。 [注意:这里叶子节点,是指为空的叶子节点!](4) 如果一个节点是红色的,则它的子节点必须是黑色的。(5) 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高;维...原创 2018-11-01 18:21:52 · 109 阅读 · 0 评论 -
Tomcat支撑高并发的秘密:深入NIO Connector原理
整个tomcat是一个比较完善的框架体系,各个组件之间都是基于接口的实现,所以比较方便扩展和替换。核心功能:soket暴露服务,线程池执行对应的servlet. 像这里的“org.apache.coyote.http11.Http11NioProtocol” 和BIO的“org.apache.coyote.http11.Http11Protocol” 都是统...转载 2018-10-24 10:48:01 · 275 阅读 · 0 评论 -
Tomcat源码分析 -- Tomcat整体架构
https://blog.csdn.net/w1992wishes/article/details/79242797转载 2018-10-25 18:59:53 · 116 阅读 · 0 评论 -
java synchronized关键字的使用和理解
java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻塞,知道线程B释放这个锁,如果B线程不释...原创 2018-10-10 10:33:01 · 197 阅读 · 0 评论 -
java 建造者模式
https://blog.csdn.net/jason0539/article/details/44992733转载 2018-10-18 14:53:26 · 86 阅读 · 0 评论 -
快排变种
package test;public class Test { public static void main(String[] args) { int[] b = sort(new int[]{1,3,44,15,24,26,14,17,19}); for (int g: b){ System.out.print(g+","); ...原创 2018-10-14 22:24:48 · 120 阅读 · 0 评论 -
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组
/*** *在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 * 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 */public class TArraySortFind { public static void main(String[] args) { ...原创 2018-11-21 19:52:48 · 230 阅读 · 0 评论 -
java代理模式之动态代理
先来总结分析下代理模式。动态代理需要的元素:1.本身的逻辑接口;2.代理逻辑部分(实现InvocationHandler接口);客户端:1.创建本地逻辑的接口的实例。2.创建InvocationHandler接口的实例。3.调用java.lang.reflect.Proxy#newProxyInstance生成代理类。4.调用代理类相应的方法运行。动态:...原创 2018-11-19 15:57:31 · 123 阅读 · 0 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
/** * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 * * 解题思路1: 每一阶都有跳和不跳两种情况,但最后一阶必须跳,所以是2^(n-1) * 解题思路2: 一次跳n阶对应组合方式=1种+一次跳n-1阶->f(n-1)种+一次跳n-2阶->f(n-2)... * 最后得公式:f(n)...原创 2018-11-22 15:58:39 · 612 阅读 · 0 评论 -
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应
/*****解:借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空,说明弹出序列不是该栈的弹出顺序。举例:入栈1,2,3,4,5出栈4,5,3,2,1...原创 2018-12-08 21:31:45 · 395 阅读 · 0 评论 -
输入一个链表,反转链表后,输出新链表的表头。
/** * 输入一个链表,反转链表后,输出新链表的表头。 * 注意:需求有两个,1,反转链表,2.输出新链表表头 */public class Solution6 { public static void main(String[] args) { Node node = new Node(1,new Node(2,new Node(3,new Node(4...原创 2018-11-28 15:25:27 · 230 阅读 · 0 评论 -
输入一个链表,输出该链表中倒数第k个结点。
/** * 输入一个链表,输出该链表中倒数第k个结点。 * 解:设置一把长度为k的尺子在链表中移动,移动到最后的时候,最左端对应的是倒数第k个节点 */public class Solution5 { public static void main(String[] args) { Node node = new Node(1,new Node(2,new N...原创 2018-11-27 14:27:55 · 198 阅读 · 0 评论 -
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
/** * 输入一个整数数组, * 实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分, * 并保证奇数和奇数,偶数和偶数之间的相对位置不变。 * 解:利用排序算法的稳定性来解 */public class Solution4 { public static void main(String[] args) { ...原创 2018-11-27 10:54:39 · 222 阅读 · 0 评论 -
排序算法之归并排序
参考:https://blog.csdn.net/yushiyi6453/article/details/76407640/** * @param arrays * @return */public static int[] mergeSort(int[] arrays, int[] copyarrays, int left, int right) { int length...原创 2018-11-26 18:23:46 · 93 阅读 · 0 评论 -
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
第一种方法:使用递归,时间复杂度O(logn)当n为偶数,a^n =(a^n/2)*(a^n/2) 当n为奇数,a^n = a^[(n-1)/2] * a^[(n-1)/2] * a第二种方法:累乘,时间复杂度为O(n)public class Solution { public double Power(double base, int exponent) { ...原创 2018-11-25 12:30:29 · 168 阅读 · 0 评论 -
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
/** * 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? * 解:依旧是裴波那契数列 * 可以理解为n由2或1来填满 * 公式: f(n) = f(n-1) + f(n-2); * f(1) = 1; */public class Solution3 { public static vo...原创 2018-11-23 14:00:19 · 350 阅读 · 0 评论 -
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
package test;/*** 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。* */public class Solution { public static void main(String[] args) { System.out.println(solution(8)); } public static int sol...原创 2018-11-24 15:38:14 · 167 阅读 · 0 评论 -
单例模式懒加载的线程安全问题解决
懒加载的几种方式:package day_5_singleton; 2 3 /** 4 * 单例 5 * 6 * @author turbo 7 * 8 * 2016年9月8日 9 */10 public class Singleton {11 private static Singleton instance;12 13 ...原创 2018-10-11 10:02:44 · 1056 阅读 · 0 评论 -
java 常量池的问题
Java字符串常量池https://blog.csdn.net/u010297957/article/details/50995869java 常量池的问题https://www.cnblogs.com/zhangming-blog/articles/6112528.html转载 2018-09-24 22:23:51 · 133 阅读 · 0 评论 -
java读写锁原理理解
参考:https://blog.csdn.net/yanyan19880509/article/details/52435135转载 2018-08-27 15:06:17 · 177 阅读 · 0 评论 -
java 中特殊得注释标签及其含义
TODO: + 说明:如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。FIXME: + 说明:如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。XXX: + 说明:如果代码中有该标识,说明标识处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进,要改进的地方会在说明中简略说明。...原创 2018-08-16 14:44:38 · 1002 阅读 · 0 评论 -
Java基础之—反射
参考:https://blog.csdn.net/sinat_38259539/article/details/71799078一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字...转载 2018-08-07 16:48:50 · 145 阅读 · 0 评论 -
spring bean工厂 uml图
参考:https://www.cnblogs.com/ToBeAProgrammer/p/5230065.html转载 2018-08-07 15:02:01 · 1035 阅读 · 0 评论 -
spring ApplicationContext体系
ApplicationContext体系:ConfigurableApplicationContext接口中定义了一些基本操作,比如设置上下文ID,设置父应用上下文,添加监听器和刷新容器相关的操作等。参考:https://blog.csdn.net/qq924862077/article/details/60958610...原创 2018-08-07 11:34:58 · 409 阅读 · 0 评论 -
SpringMVC之HttpMessageConverter 集成Proto3
package cn.nhorizon.ads.server.web.support;import cn.nhorizon.ads.server.domain.OupengAdsProtos.MaterialMeta.VideoClickMode;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;...原创 2018-08-02 16:59:52 · 1077 阅读 · 1 评论 -
spring 手动获取bean以及获取spring上下文
ApplicationContextAware这个接口对象就是我们今天的主角,其实以实现ApplicationContextAware接口的方式获取ApplicationContext对象实例并不是SpringBoot特有的功能,早在Spring3.0x版本之后就存在了这个接口,在传统的Spring项目内同样是可以获取到ApplicationContext实例的,下面我们看看该如何编码才能达到...原创 2018-08-07 10:44:24 · 522 阅读 · 0 评论 -
protobuf 性能对比
protobuf 的性能测试与对比:http://agapple.iteye.com/blog/859052原创 2018-08-09 18:57:15 · 3136 阅读 · 0 评论 -
spring 读写本地文件
package cn.java.receive.service;import org.springframework.beans.factory.annotation.Value;import org.springframework.core.io.FileSystemResource;import org.springframework.stereotype.Component;...原创 2018-08-23 11:33:33 · 4788 阅读 · 0 评论 -
spring 读取配置文件属性值
示例:@Value("${token.path}")private String tokenPath;使用这个注解得前提是,配置文件名称是application.properties原创 2018-08-23 11:39:27 · 224 阅读 · 0 评论 -
java 读写锁得使用与理解
读写锁与synchronized得区别:synchronized 管理得是当前类得对象,读写锁 ReentrantReadWriteLock 管理得是锁对象(new ReentrantReadWriteLock).以上是本人得理解,如有偏差,敬请指正。使用例子:package cn.java.receive.service;import org.slf4j.Logger;i...原创 2018-09-04 18:07:13 · 270 阅读 · 0 评论 -
java 快速排序
<code class="language-java">package com.quicksort; import java.util.Arrays; public class QuickSort { public static void main(String[] args) { int[] a = {1, 2, 4, ...原创 2018-09-16 23:39:12 · 95 阅读 · 0 评论 -
sql优化经验
https://www.cnblogs.com/binbinyouni/p/6070715.html转载 2018-09-16 21:51:50 · 594 阅读 · 0 评论 -
wait方法和sleep方法的区别
首先,要记住这个差别,“sleep是Thread类的方法,wait是Object类中定义的方法”。尽管这两个方法都会影响线程的执行行为,但是本质上是有区别的。Thread.sleep不会导致锁行为的改变,如果当前线程是拥有锁的,那么Thread.sleep不会让线程释放锁。如果能够帮助你记忆的话,可以简单认为和锁相关的方法都定义在Object类中,因此调用Thread.sleep是不会影响锁的相关...转载 2018-09-16 15:25:00 · 1640 阅读 · 0 评论 -
说说Runnable与Callable
Callable接口:public interface Callable<V> { V call() throws Exception;}参考:https://www.cnblogs.com/frinder6/p/5507082.htmlRunnable接口:public interface Runnable { public abstra...转载 2018-09-16 14:29:01 · 116 阅读 · 0 评论 -
java并发编程--Executor框架
摘要: Eexecutor作为灵活且强大的异步执行框架,其支持多种不同类型的任务执行策略,提供了一种标准的方法将任务的提交过程和执行过程解耦开发,基于生产者-消费者模式,其提交任务的线程相当于生产者,执行任务的线程相当于消费者,并用Runnable来表示任务,Executor的实现还提供了对生命周期的支持,以及统计信息收集,应用程序管理机制和性能监视等机制。 1.Exexc...转载 2018-09-16 14:08:29 · 99 阅读 · 0 评论 -
String s=new String("abc")创建了几个对象?
String s=new String("abc")创建了几个对象?String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。 我们可以把上面这行代码分成S...转载 2018-09-16 12:58:23 · 122 阅读 · 0 评论 -
String和stringbuffer、stringbuilder的区别
从执行速度与线程安全两个方面看:String类型的变量是作为字符常量存储,后两者是作为字符变量存储。也就是String对象是不可变的。所以,当字符串不进行大量操作的时候String对象的执行速度是最快的。当需要对字符串进行修改操作的时候,Sting是最慢的。总体执行速度(对字符串进行修改操作的时候):StringBuilder > StringBuffer > St...原创 2018-09-16 12:35:31 · 125 阅读 · 0 评论