![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
yinbingqiu
这个作者很懒,什么都没留下…
展开
-
java中的逆变、协变、不变概念讲解转载自http://www.cnblogs.com/en-heng/p/5041124.html,感谢编程路上的前辈们!
En-Heng无他,但手熟尔博客园首页新随笔联系订阅管理随笔 - 32 文章 - 0 评论 - 33Java中的逆变与协变看下面一段代码Number num = new Integer(1); ArrayList list = new ArrayList(); //type mismat转载 2016-04-22 14:36:28 · 1242 阅读 · 0 评论 -
直通BAT算法面试题总结
题1:/** * 题干:对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。 * 给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树 * * 解析:其实就是将树序列化为字符串来解决就行。然后在判断一下是否包含。 * */class Solution{ public boolean so原创 2017-03-24 16:41:59 · 2488 阅读 · 0 评论 -
直通BAT面试算法总结——栈和队列
题一:栈的逆序 /** * 题干: * 实现一个栈的逆序,但是只能用递归函数和这个栈本身的pop操作来实现,而不能自己申请另外的数据结构。 * 给定一个整数数组A即为给定的栈,同时给定它的大小n,请返回逆序后的栈。 * 测试样例: * [4,3,2,1],4 * 返回:[1,2,3,4] * * * 解析:首先要实现两种操作(两种递归) * 第一是要能递归的弹出返回栈底get原创 2017-03-24 21:29:12 · 695 阅读 · 0 评论 -
直通BAT算法面试——二叉树、位运算
题一:二叉树的序列化 假设有一颗二叉树,节点值为int值,用先旭遍历的方式序列化他,并且反序列化。 假设序列化后的结果为string,开始时string为“”; 先序遍历在遇到节点为null时就在string后面添加“#!”; 如果遇到非空节点假设节点值为val,那么就在后面添加“val!”。反序列化的时候直接翻过来就行。但是先序遍历序列化就要用先序遍历反序列原创 2017-04-02 11:11:30 · 668 阅读 · 0 评论 -
直通BAT算法面试——排列组合、概率
题一:已经有一个能够利用概率p产生0(1-p)概率产生1的随机函数f,请你用f函数设计一个函数m使得m能够等概论产生0、1思路:连续调用两次f,会产生四种情况,只要你规定其中两种情况返回1另外两种情况返回0就行。题二: 已经有一个能够能够随机产生1-5的随机函数f,利用f设计一个能够随机产生1-7的函数 (1)已经有了能够随机产生1-5的函数f。 (2)利用(1)中结果减一,得到0-4; (原创 2017-04-02 11:30:48 · 678 阅读 · 0 评论 -
直通BAT面试算法——大数据
一、哈希函数 又称散列函数,哈希函数的输入域可以使非常大的范围,但输出域是固定的范围,假设为s。 哈希函数的性质: 1.典型的哈希函数拥有无限的输入值域; 2.输入值相同时返回值一样,但是输入值不同时返回值也有可能一样,也可能不一样; 3.不同的输入得到的哈希值会均匀的分布在s域上。(重要特性)1.2都是属于哈希函数的性质,而3则属于哈希函数的性能关键的评价,一个号的哈希函数实现就应该做到原创 2017-04-02 13:53:45 · 3459 阅读 · 0 评论 -
HashMap底层实现原理
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。简单说下HashMap的实现原理:首先有一个每个元素原创 2017-03-09 18:41:41 · 36353 阅读 · 4 评论 -
Java设计模式——创建型
创建型模式共有五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。原创 2017-04-17 11:14:45 · 337 阅读 · 0 评论 -
Java设计模式——行为型模式
行为型模式共有十一种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 一、策略模式(strategy): 策略模式就是将具体实体中变化的行为抽离出来,封装成一个个的算法,然后再在具体实体的基类中,对每一个具体的行为的算法进行聚合。另外在基类中我们还可以每一个子类的不变的行为进行定义,而且我们在父类中在定义具体的行为原创 2017-04-17 11:17:02 · 534 阅读 · 0 评论 -
Java设计模式——结构型
结构型设计模式包括:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。一、装饰者模式(Decorator): 动态的将责任附加到对象上,如果想要扩展功能,装饰者提供了比继承更有弹性的方案。下面是装饰者模式下的类图:从类图中我们可以发现装饰者(Decorator)与被装饰者(或者在图中叫构件ConcreteComponent)他们之间都拥有一个公共的父类,继承与Compone原创 2017-04-17 11:16:07 · 449 阅读 · 0 评论 -
并发编程-Java内存模型
JMM:Java内存模型 指令重排序分为: 编译器重排序-》指令并行重排序-》内存系统重排序(后两者都属于处理器重排序)JMM通过禁止特定类型的重排序实现一致的内存可见性。重排序其实就是为了实现对程序的优化对指令的执行顺序进行重新排序。重排序时应该遵守as-if-serial语义和happens-before规则。对于多处理器的主机,每一个处理器多会有一个读写缓冲区,而且每一个处理器的缓原创 2017-03-15 11:08:38 · 344 阅读 · 0 评论 -
java中四种引用类型
对象的强、软、弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 强引用(StrongReference)转载 2017-05-04 10:40:05 · 405 阅读 · 0 评论 -
ThreadLocal源码分析(JDK8)
ThreadLocal源码分析(JDK8)分类: Java(20) 作者同类文章XJDK源码分析(7) 作者同类文章X版权声明:【分享也是一种提高】个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的。ThreadLocal特性及使转载 2017-05-04 11:17:08 · 1272 阅读 · 0 评论 -
java并发-阻塞队列
Java并发编程-阻塞队列(BlockingQueue)的实现原理标签: java并发阻塞队列线程安全Concurrent2016-06-13 19:37 7387人阅读 评论(0)收藏举报本文章已收录于:分类: Java并发编程(24) 作者同类文章X版权声明:本文为博主原创文原创 2017-05-08 10:11:32 · 284 阅读 · 0 评论 -
Cookie/Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。1.1 Cookie机制在程序中,会话转载 2017-04-27 18:51:39 · 318 阅读 · 0 评论 -
膜拜大神
http://www.cnblogs.com/loveis715/category/690824.htmlWS(1) C++ 基本功(4) ExtJS(1) HTTP(2) Java基本功(4) Web Service(19) WPF(18) Writing Patterns Line By Line(3) 安全(4) 数据库设计(5)原创 2017-06-04 23:20:46 · 836 阅读 · 0 评论 -
Java中的逆变与协变
http://www.cnblogs.com/en-heng/p/5041124.html转载 2017-06-27 17:50:00 · 288 阅读 · 0 评论 -
内部类解析
http://www.cnblogs.com/dolphin0520/p/3811445.html转载 2017-06-27 17:51:41 · 256 阅读 · 0 评论 -
java集合类面试题40
http://www.cnblogs.com/xuexue-bit/p/5256094.html转载 2017-04-10 17:03:14 · 732 阅读 · 0 评论 -
JDK8中的ConcurrentHashmap底层实现
注:本文源码是JDK8的版本,与之前的版本有较大差异ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添转载 2017-04-10 13:48:06 · 2153 阅读 · 0 评论 -
集合——HashMap底层分析
jdk8中hashmap实现和jdk8之前hashmap实现分析 https://my.oschina.net/hosee/blog/618953jdk7及以前的hashmap实现分析: http://blog.csdn.net/abcd1430/article/details/52745155转载 2017-04-10 11:41:52 · 261 阅读 · 0 评论 -
java反射机制解析
http://blog.csdn.net/keda8997110/article/details/50917248转载 2016-10-17 22:34:50 · 248 阅读 · 0 评论 -
多线程-同步
1.线程的内存 java程序在开始运行以后,java虚拟机会为所有的线程分配一个统一的内存区域(main memory:主内存)用于存储共享数据,然后之后又为每一个新创建的线程创建一个私有的内存区域(working memory ),用于存储线程私有数据。2.我的理解,对于可引起多线程问题的共享数据,即某个类的类属性,对于方法内部的局部变量是不会引起多线程问题的。认识几个关键字 1.synchr原创 2016-11-09 18:20:21 · 278 阅读 · 0 评论 -
Byte、 Boolean 、Integer、Long、Short、Character缓存
http://blog.csdn.net/xiaohai0504/article/details/6885137原创 2016-10-28 20:53:21 · 436 阅读 · 0 评论 -
深入理解java 类在jvm中的生命周期
**深入理解java 类在jvm中的生命周期**一、理解java程序的在java虚拟机中的生命周期(一)加载(二)连接 1.验证 2.准备 3.解析(三)初始化 (四)卸载 二、java程序如何退出生命周期(一)执行了System.exit()方法导致程序退出(二)程序正常执行完退出生命周期(三)系统出现错误导致java虚拟机进程终止(一瓢冷水泼你计算机上就可以终止了)原创 2016-10-25 20:27:28 · 2119 阅读 · 2 评论 -
深入理解java---反射篇
深入理解java---反射篇 背景 在Java中如果我们预先不知道一个对象的确切类型,RTTI可以告诉你,但是有一个限制,那就是在编译的时候这个对象类型必须是确定的(需要有一个确定的编译类型),这样我们才能使用RTTI去识别它,并且利用这些信息做一些有用的事,事实上在编译的时候你的程序压根儿是不知道某个对象是属于哪一个类的,比如在编译的时候,你可以从你的本机文件、或者网络上获取一段原创 2016-10-29 10:37:15 · 2365 阅读 · 3 评论 -
Java虚拟机常见的问题总结(基于深入理解Java虚拟机)
1.Java中字段的相关属性有:作用域(包可访问、类可访问(private)、公共可访问(public)、子类可访问(protected))、实例变量还是类变量(static修饰)、可变性(final)、并发可见性volatile修饰(是否强制从内存读写)、可否被序列化(transient)、字段的数据类型、字段的名称等等。2.什么是Class文件?Class文件就是正确java文件经过Java虚原创 2017-02-28 17:50:26 · 983 阅读 · 0 评论 -
String StringBuffer StringBuilder区别
String在java虚拟机中被理解为不变的常量,如果他所指的值改变那么他的内存空间就要被回收, Eg:String a=”aa”; a=a+”b”;或者a=”bb”; 在这里a的值被改变了,所以就要先回收掉a以前的内存,在为其新值分配新内存; 如果对于两个String常量,他们具有相同的值,那么他么引用地址相等即: String a=”a”; String b=”a”; 那么有a原创 2017-03-09 10:42:41 · 205 阅读 · 0 评论 -
java集合类设计中的几个问题
(一)是否是线程安全的 java的集合框架中有很多类都是非线程安全的,但是有设计了对应的功能相似的线程安全的类来解决多线程的问题。当然多线程就意味着效率低,具体的实现一般都是用了同步方法(sychronized)比如HashMap和HashTable(CurrentHashMap也是线程安全的而且扩展的更好) 其中HashMap就是非线程安全的,而HashTable就是线程安全的;ArrayLi原创 2017-03-09 19:21:52 · 428 阅读 · 0 评论 -
java集合类概略
接口:CollectionCollection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。所有实现Collec原创 2017-03-09 15:13:49 · 250 阅读 · 0 评论 -
Java并发编程读书笔记——线程安全与锁优化
Java并发实现的三个特征:原子性、可见性、顺序性。原子性操作的实现原理 (1)总线锁实现原子性:所谓的总线锁定就是使用处理器提供的一个LOCK#信号,当处理器在总线上输出此信号的时候,其他处理器的请求将会被阻塞住,那么该处理器就独占总线,其他的所有处理器都将被阻塞。显然总线锁定的代价是比较大的不管是不是指定共享变量相关的总线操作都会被阻塞等待。 (2)缓存行锁定实现原子性:缓存锁定是指,在内存原创 2017-04-05 21:04:32 · 878 阅读 · 0 评论 -
直通BAT算法面试——链表
题一:链表分化 /** * 题干: * 对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。 * 给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。 * 测试样例: * {1,4,2,5},3 * {1,2,4,5} *原创 2017-03-29 15:58:33 · 516 阅读 · 0 评论 -
Java并发编程的艺术-Java中的锁
Java中可以通过实现Lock接口的方式来创建自定义的同步部件,同步的部件核心其实就是同步队列(AbstractQueuedSynchronizer一般是通过一个内部类来实现它,然后实现他之中的几个方法);可以这样理解锁与同步队列的关系:锁时面对使用者的,定义了使用者与锁之间的交互接口;而同步队列AQS是面向锁的,它简化了锁的实现方式,对用户来说,AQS屏蔽了同步管理,线程的排队,等待与唤醒等底层操原创 2017-03-22 19:37:02 · 469 阅读 · 0 评论 -
jvm面试题-堆内存设置
原理: JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation),New 即 年轻代(Youn原创 2017-03-22 19:38:14 · 360 阅读 · 0 评论 -
Java中的锁——队列同步器(AQS)
Java中的锁——队列同步器2015-12-20 13:27 1144人阅读 评论(3)收藏举报本文章已收录于:分类: Java核心技术(18) 作者同类文章XJava源码(11) 作者同类文章X并发技术(8) 作者同类文章X版转载 2017-04-08 11:48:10 · 945 阅读 · 0 评论 -
Java并发编程艺术——ReentrantReadWriteLock(读写锁)
ReadWriteLock仅定义了获取读锁和写锁的两个方法,即readLock()方法和writeLock()方法,而其实现——ReentrantReadWriteLock,除了接口方法之外,还提供了一些便于外界监控其内部工作状态的方法,这些方法以及描述如表5-9所示。 public class Cache {static Map<String, Object> map = new HashMa原创 2017-04-08 17:21:39 · 1058 阅读 · 1 评论 -
Java并发编程——Condition接口
concureent包下的并发在实现线程间的通信时可以通过Condition接口去实现,Condition的功能主要就是实现线程的等待和唤醒(await、signal)。以下是通过Condition接口实现的通知等待、和synchronized实现的通知等待一些特性的比较。 可以看出使用Condition实现的等待通知模型的优点更明显,更好使用。而且通过之前的Lock的学习可以知道一个Lock原创 2017-04-08 19:08:20 · 456 阅读 · 0 评论 -
OO的五大原则
http://blog.chinaunix.net/uid-174325-id-3026114.html转载 2017-06-27 17:55:33 · 327 阅读 · 0 评论