Java基础
文章平均质量分 70
whyalwaysmea
I know the way
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于JSON的一些总结
一、关于JSONJson是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)原创 2015-11-18 13:23:44 · 611 阅读 · 1 评论 -
【Java编程的逻辑】堆与优先级队列&PriorityQueue
完全二叉树 & 满二叉树 & 堆基本概念满二叉树是指除了最后一层外,每个节点都有两个孩子,而最后一层都是叶子节点,都没有孩子。 满二叉树一定是完全二叉树,但完全二叉树不要求最后一层是满的,但如果不满,则要求所有节点必须集中在最左边,从左到右是连续的,中间不能有空的。特点在完全二叉树中,可以给每个节点一个编号,编号从1开始连续递增,从上到下,从左到...原创 2018-04-12 15:29:44 · 856 阅读 · 1 评论 -
【Java编程的思想】理解synchronized
用法和基本原理synchronized可以用于修饰类的实例方法、静态方法和代码块 实例方法在介绍并发基础知识的时候,有一部分是关于竞态条件的,当多个线程访问和操作同一个对象时,由于语句不是原子操作,所以得到了不正确的结果。这个地方就可以用synchronized进行处理 public class Counter { private int count; ...原创 2018-04-23 17:54:54 · 384 阅读 · 1 评论 -
【Java编程思想】线程的基本协作机制 与 线程的中断
wait/notifyJava在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException;一个带时间参数,单位是毫秒,...原创 2018-04-24 15:00:29 · 538 阅读 · 1 评论 -
【Java编程的逻辑】并发基础知识
线程的基本概念线程表示一条单独的执行流,它有自己的程序执行计数器,有自己的栈。 在Java中创建线程有两种方式:一种是继承Thread,另外一种是实现Runnable接口 public class HelloThread extends Thread{ @Override public void run() { System.out.println...原创 2018-04-20 14:49:37 · 409 阅读 · 1 评论 -
【Java编程的逻辑】并发容器
写时复制的List和SetCopyOnWriteArrayList和CopyOnWriteArraySet,Copy-On-Write即写时复制 CopyOnWriteArrayListCopyOnWriteArrayList实现了List接口,它的用法与其他的List基本是一样的。 CopyOnWriteArrayList特点: 1. 线程安全,可以被多个线程并发访问 2...原创 2018-05-02 15:04:46 · 304 阅读 · 0 评论 -
【Java编程的思想】同步和协作工作类
读写锁ReentrantReadWriteLock之前介绍了两种锁:synchronized和显式锁ReentrantLock,对于同一受保护对象的访问,无论是读还是写,它们都要求获得相同的锁。但在一些场景中,多个线程的读操作完全可以并行。 在Java并发包中,接口ReadWriteLock表示读写锁,主要实现类是可重入读写锁ReentrantReadWriteLock。 publ...原创 2018-05-09 12:08:42 · 487 阅读 · 0 评论 -
【Java编程的逻辑】异步任务执行服务 Executor和ExecutorService
基本概念线程Thread即表示要执行的任务,又表示执行的机制。 Java并发包提供了一套“异步任务执行服务”机制,将“任务的提交”和“任务的执行”相分离。 任务执行服务涉及到的基本接口: Runnable和Callable:表示要执行的异步任务 Executor和ExecutorService:表示执行服务 Future:表示异步任务的结果 Runnable和Ca...原创 2018-05-03 17:27:22 · 4009 阅读 · 0 评论 -
【Java编程的思想】并发总结
线程安全的机制线程表示一条单独的执行流,每个线程有自己的执行计数器,有自己的栈,但可以共享内存,共享内存是实现线程协作的基础,但共享内存有两个问题:竞态条件和内存可见性。 synchronizedsynchronized是一个关键字,既可以解决竞态问题,也可以解决内存可见性问题 synchronized保护的是对象,而不是代码,只有对同一个对象的synchronized方法调用,...原创 2018-05-10 15:54:42 · 351 阅读 · 0 评论 -
【Java编程的逻辑】原子变量 & CAS & 显示锁
原子变量在理解synchronized中有使用synchronized保证原子更新操作,但是使用synchronized成本太高了,需要先获取锁,最后还要释放锁,如果获取不到锁还需要等到。这些成本都是比较高的,对于这种情况,可以使用原子变量。 Java并发包中的基本原子变量类型有以下几种: AtomicBoolean:原子Boolean类型,常用来在程序中表示一个标志位 A...原创 2018-04-27 15:49:37 · 448 阅读 · 1 评论 -
【Java编程的逻辑】线程池
基本介绍线程池,顾名思义,就是一个线程的池子,里有若干线程,它们的目的就是执行提交给线程池的任务,执行完一个任务后不会退出,而是继续等待或执行新的任务。 线程池的优点: 可以重用线程,避免线程创建的开销 任务过多时,通过排序避免创建过多线程,减少系统资源消耗和竞争,确任务有序完成 ThreadPoolExecutorJava并发包中线程池的实现类是ThreadPo...原创 2018-05-07 15:56:58 · 518 阅读 · 0 评论 -
【Java编程的逻辑】定时任务
Timer和TimerTask基本用法TimerTask表示一个定时任务,它是一个抽象类,实现了Runnable,具体的定时任务需要继承该类,实现run方法。 Timer是一个具体类,它负责定时任务的调度和执行,主要方法有:// 在指定绝对时间time运行任务taskpublic void schedule(TimerTask task, Date time);// 在当前...原创 2018-05-08 16:17:41 · 799 阅读 · 0 评论 -
《Spring源码深度解析》读书笔记 - 默认标签的解析
默认标签的解析是在parseDefaultElement函数中进行的, // DefaultBeanDefinitionDocumentReader.javaprivate void parseDefaultElement(Element ele, BeanDefinitionParserDelegate delegate) { if (delegate.nodeNameEqua...原创 2018-07-04 15:15:17 · 437 阅读 · 0 评论 -
【Java编程的逻辑】列表和队列
ArrayListArrayList中有两个方法可以返回数据public Object[] toArray();public <T> T[] toArray(T[] a);ArrayList中有一个静态方法asList可以返回对应的ListInteger[] a = {1, 2, 3};List<Integer> list = Arrays.as...原创 2018-03-29 15:24:25 · 447 阅读 · 0 评论 -
【Java编程的逻辑】容器类的总结
抽象容器类用法和特点容器类有两个根接口,分别是Collection 和 Map ,Collection表示单个元素的集合,Map表示键值对的集合 。 CollectionCollection表示的数据集合有基本的增、删、查、遍历等方法,但没有定义元素间的顺序或位置,也没有规定是否有重复元素。 List: 是Collection的子接口,表示有顺序或位置的数据集合...原创 2018-04-16 12:03:12 · 287 阅读 · 0 评论 -
探究HashMap
继承关系 HashMap继承了AbstractMap,并且支持序列化和反序列化。由于实现了Clonable接口,也就支持clone()方法来复制一个对象。 另外,HashMap是一个非线程安全的,因此适合运用在单线程环境下。如果是在多线程环境,可以通过Collections的静态方法synchronizedMap获得线程安全的HashMap,如下代码所示。Map map = Col原创 2018-01-05 11:10:18 · 294 阅读 · 1 评论 -
jackson 序列化相关注解与配置
配置忽略不认识的字段ObjectMapper mapper = new ObjectMapper();mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);这样是配置在整个ObjectMapper上的,如果只希望配置在某个类上面,可以使用@JsonIgnoreProperties(ignoreUnk...原创 2018-02-14 10:58:30 · 7324 阅读 · 3 评论 -
【Java编程的逻辑】理解数据背后的二进制
整数的二进制表示与位运算理解二进制之前,我们先再次认识一下十进制。 比如123,他表示1 x (10^2) + 2 x (10^1) + 3 x (10^0) 其实每个位置都有一个位权,从右到左,第一位为1,然后依次乘10,所以第二位为10,第三位为100.正整数的二进制表示 二进制 十进制 10 2 11 3 111 7...原创 2018-02-28 12:00:25 · 375 阅读 · 0 评论 -
【Java编程的逻辑】类的基础 & 类的继承
类的基本概念pubilc: 可以修饰类、类方法、类变量、实例变量、实例方法。构造方法,表示可被外部访问private:可以修饰类、类方法、类变量、实例变量、实例方法。构造方法,表示不可以被外部访问,只能在类内部被使用static:修饰类变量和类方法,它也可以修饰内部类this:表示当前实例,可以用于调用其他构造方法,访问实例变量,访问实例方法final:修饰类变量、实例变量,表示只能...原创 2018-03-08 16:12:48 · 254 阅读 · 1 评论 -
【Java编程的逻辑】接口的本质 & 抽象类
接口的概念接口声明了一组能力,但它自己并没有实现这个能力,它只是一个约定。Java8和Java9对接口的增强Java8允许在接口中定义两类新方法:静态方法和默认方法public interface IDemo { // 常规抽象方法 void hello(); // 静态方法 public static void test() { ...原创 2018-03-09 17:29:23 · 826 阅读 · 0 评论 -
【Java编程的逻辑】内部类的本质
之前我们所说的类都对应于一个独立的Java源文件,但一个类还可以放在另一个类的内部,称之为内部类。 内部类可以实现对外部完全隐藏,可以有更好的封装性,代码实现上往往更加简洁。 不过,内部类只是Java编译器的概念,对于Java虚拟机而言,它是不知道内部类这回事的,每个内部类最后都会被编译成为一个独立的类。 静态内部类静态内部类和静态变量、静态方法类似,同样是使用static关键字...原创 2018-03-16 11:32:14 · 421 阅读 · 0 评论 -
【Java编程的逻辑】编程基础
数据类型和变量数据类型用于对数据归类,以便于理解和操作。 - 整数类型:byte/short/int/long, 分别有不同的取值范围 - 小数类型:float/double,有不同的取值范围和精度 - 字符类型:char,表示单个字符 - 真假类型:boolean,表示真假基本数据类型都有对应的数组类型,数组表示固定长度的同种数据类型的多条记录,这些数据在内存中连续存放。比如...原创 2018-02-23 14:05:22 · 3333 阅读 · 0 评论 -
【Java编程的逻辑】异常 & finally & try-with-resources
finally异常机制中还有一个重要的部分,就是finally。catch后面可以跟finally语句try { // 可能抛出异常} catch(Exception e) { // 捕获异常} finally { // 不管有无异常都会执行}如果在try或者catch语句内有return语句,则return语句在finally语句执行结束后...原创 2018-03-19 14:48:44 · 588 阅读 · 0 评论 -
【Java编程的逻辑】 String & StringBuilder & Arrays
StringString类内部用一个字符数组表示字符串,实例变量定义为:private final char value[];String中的大部分方法内部都是操作的这个字符数组,比如: length():返回这个数组的长度substring():根据参数,调用构造方法public String(char value[], int offset, int count)新建一...原创 2018-03-20 13:57:32 · 320 阅读 · 1 评论 -
RxJavaのobserveOn()与subscribeOn()
subscribeOn()和observeOn()的区别subscribeOn()改变调用它之前代码的线程observeOn()改变调用它之后代码的线程RxJava中的schedulerSchedulers.immediate(): 直接在当前线程运行,相当于不指定线程。这是默认的 Scheduler。Schedulers.newThread(): 总是启用新线程,并在新...原创 2018-03-20 14:27:45 · 661 阅读 · 0 评论 -
【Java编程的逻辑】 泛型 & 参数限定 & 通配符
类型参数的限定无论是泛型类、泛型方法还是泛型接口,关于类型参数,我们都知之甚少,只能把它当作Object,但Java支持限定这个参数的一个上界,也就是说:参数必须为给定的上界类型或其子类型,这个限定是通过extends关键字来表示的。 上界为某个具体类public class NumberPair<U extends Number> {}指定边界之后,类型擦...原创 2018-03-22 11:26:57 · 2736 阅读 · 0 评论 -
【Java编程的逻辑】Map和Set
HashMapMap有键和值的概念。一个键映射到一个值,Map按照键存储和访问值,键不能重复。HashMap实现了Map接口。 基本原理HashMap的基本实现原理:内部有一个哈希表,即数组table,每个元素table[i]指向一个单向链表,根据键存取值,用键算出hash值,取模得到数组中的索引位置index,然后操作table[index]指向的单向链表。 存取的时候依据...原创 2018-04-09 13:34:43 · 466 阅读 · 3 评论 -
《Spring源码深度解析》读书笔记 - 自定义标签的解析
自定义标签使用可以参考Spring自定义标签示例(亲测可运行)自定义标签解析public BeanDefinition parseCustomElement(Element ele) { return this.parseCustomElement(ele, (BeanDefinition)null);}// containingBd为父类bean,对顶层元素的解析应设...原创 2018-07-06 15:33:33 · 515 阅读 · 0 评论
分享