java基础
金庸不写武侠写代码
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一致性hash(Consistent Hashing)
1、出现背景 有这样一种场景:有N台cache服务器,现在要将对象(object)均匀的分布在这些服务器上,该如何实现?通常,我们会采用hash(object)%N这样普通的hash算法来实现。咋一看,这样做并没有什么问题,但是,当服务器数量发生变化时,这种hash算法就显得不适用了。为什么,因为当N发生变化,则所有对象的映射关系都会发生变化,这也就意味着几乎所有的cache都失效原创 2016-12-13 15:54:51 · 522 阅读 · 0 评论 -
关于Java中变量的初始化
Java中变量分为成员变量和局部变量,其中,局部变量必须要显式初始化,否则,编译无法通过。 对于成员变量,我们可以分为以下几种情况: 1、普通成员变量:在生成对象实例的时候进行初始化,如没有显式赋值,则由系统默认初始化; 2、static成员变量:类加载的时候初始化,如没有显式赋值,则由系统默认初始化; 3、final常量:生成实例对象的时候初始化,而且必须显式初始化;原创 2017-03-17 10:01:54 · 411 阅读 · 0 评论 -
抽象类的接口的区别
一、首先,从设计理念来看,继承跟实现两者是不同的,继承要求父类跟子类本质上是相同的,但是接口没有这样的要求,接口更像是一种行为规范。 二、从编程语法角度来看,抽象类与接口有以下几个相同点和不同点: 不同点: 1、抽象类可以有自己的数据成员,但是接口只能有静态的、不能被修改的数据成员(即static final类型) 2、抽象类中可以有实例方法,但接口中所有的方法都是抽象方法(这也是为什么说接原创 2017-03-16 10:31:12 · 250 阅读 · 0 评论 -
jsp学习笔记
一、head标签:<head> //设置页面编码(utf-8防止页面中文乱码) <meta charset="UTF-8"> //设置页面的查询关键字 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> //设置页面的主要内容说明 <meta http-equi原创 2017-03-22 18:18:48 · 423 阅读 · 0 评论 -
HashMap的两种遍历方式
HashMap的API中有两个方法可以用来遍历map表,一是keySet(),另一个是entrySet()。 1、public Set keySet():返回map表的set视图; 2、public Set//1、keySet的用法Map<String,String> map = new HashMap<String,String>();Set<String> set = map.keySe原创 2017-03-12 16:37:43 · 488 阅读 · 0 评论 -
Java基础
1、静态类、静态方法和静态代码块各自的应用场景 答:首先解释静态方法和静态代码块的区别: 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化) 静态方法:需要在项目启动的时候就初始化,在不创建对象的情况下,这种代码是被动执行的(静态方法在类加载的时候 就已经加载 可以用类名原创 2017-03-07 22:37:02 · 243 阅读 · 0 评论 -
关于多线程与并发编程
1、AtomicIntger的实现原理。 答:CAS自旋。 2、synchronized和ReentrantLock的区别。 答:synchronized是属于java同步机制的一个关键字,而ReentrantLock是一个实现同步的java对象,一个可重入的互斥锁。原创 2016-12-09 16:24:15 · 362 阅读 · 0 评论 -
Java创建线程的三种方式
Java有三种创建线程的方式,分别是继承Thread类、实现Runable接口和使用线程池 1、继承Thread类 使用该方式创建及使用线程需按以下三个步骤: (1)定义Thread类的子类,并重写父类的run()方法,方法里的内容就是线程所要执行的任务; (2)创建子类的实例,即生成线程的实例对象; (3)调用现成的start()方法来启动线程。public class SubThrea原创 2017-03-07 21:14:35 · 7231 阅读 · 0 评论 -
集合类详解
一、为什么要提出集合类? 跟数组一样,集合也是用来存取数据的。但是,在数组已经存在的情况下,我们为什么还要提出集合这个概念呢? 首先,多数情况下,我们对要存储的数据的个数并不确定,所以我们需要一种能够自动改变存储容量大小的容器,这一点上,使用数组来存储的话,就显得十分的笨拙。 其次,当我们需要存储的数据中不包含重复的数据时,使用数组实现的很困难的。 最后,举一个查字典的例子,我们希望使用一个原创 2017-03-05 20:27:55 · 326 阅读 · 0 评论 -
查找算法
常用的查找算法不外乎顺序查找、二分查找、哈希表查找和二叉排序树查找,下边将分别介绍这几种查找算法。 一、顺序查找 顺序查找很简单,按照顺序对序列的元素依次进行比较,找到目标元素返回true,否则返回false,时间复杂度O(n)。 实现代码:public class Solution { public boolean find(int []arr, in原创 2017-01-10 15:22:27 · 374 阅读 · 0 评论 -
java关于值传递和引用传递
在做剑指Offer的时候,在做二叉树的镜像这道题的时候让我遇到了值传递和引用传递的困惑,如下所示:public class Solution { public void Mirror(TreeNode root) { if (root == null) return; TreeNode temp = root.left;原创 2017-01-16 10:20:00 · 356 阅读 · 0 评论 -
原码、反码、补码、负数的移位
正数的原码、反码、补码都相同; 负数的反码为原码除符号位,其他位都取反,补码为反码加1。正数的移位(+5为例,左/右移两位:0000 0101): 左移m位:最左边的m位将丢弃,同时在最右边补上零(0001 0100) 右移m位:最右边的m位将丢弃,同时在最左边补上零(0000 0001)负数的移位:由于存在符号位,符号位在移位过程中是不动的(以-5为例,左/右移两位:1111 1011(-5原创 2017-01-10 21:26:38 · 4203 阅读 · 0 评论 -
CAS自旋
CAS(Compare And Swap)比较并转换 该算法涉及三个数:内存值V,旧的预期值A,新的预期值B。当且仅当旧的预期值A和内存值V相同时,将内存值改为B,否则什么也不做。 如何来理解上面这一段话呢?我们先了解一下乐观锁和悲观锁各自的做事方式,首先,悲观锁的态度是一件事情我必须要能百分之百掌控才能去做,否则就认为这件事情一定会出问题,而乐观锁的态度就是不管原创 2016-12-09 15:37:47 · 4301 阅读 · 0 评论 -
Java I/O学习总结
一般来说,java I/O总共有16个流需要我们熟练掌握。接下来从I/O继承关系、流的分类、选择不同流应遵循的原则三个方面对 java I/O进行梳理。 1、流的分类 按照对数据的读写方式不同可以将流分为字节流和字符流,字节流每次读写都是以字节为单位,而字符流则是按编码字符为单位对多个字节进行字符编码然后返回字符。 按照流的指向可将流分为输入流和输出流,输入流是指将数据读到内存,输出流则是指原创 2016-11-28 17:11:12 · 387 阅读 · 0 评论 -
Java异常体系
图片来自牛客网: 都是Throwable的子类: 1.Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。 2.Exception(异常) :是程序本身可以处理的异常。 3.检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其转载 2017-03-17 10:21:00 · 267 阅读 · 0 评论
分享