Java 集合框架

Java集合框架 (Java Collections Framework, JCF) 也称容器,在这里主要对如下部分进行源码分析,及在面试中常见的问题。例如,在阿里面试常问到的 HashMap 和 ConcurrentHashMap 原理等等。深入源码分析是面试中必备的技能,通过本文的阅读会对集合框架有更深一步的了解。 一、概述Java集合框架提供了数据持有对象的方式,提供了对数据集合的操作。Ja...

如何判断一个元素在亿级数据中是否存在

前言最近有朋友问我这么一个面试题目: 现在有一个非常庞大的数据,假设全是 int 类型。现在我给你一个数,你需要告诉我它是否存在其中(尽量高效)。 需求其实很清晰,只是要判断一个数据是否存在即可。但这里有一个比较重要的前提:非常庞大的数据。 常规实现先不考虑这个条件,我们脑海中出现的第一种方案是什么? 我想大多数想到的都是用 HashMap 来存放数据,因为它的写入查询的效率都比较高。写入和判...

Java 并发编程——Thread 类的使用

在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。 一、线程的状态线程从创建到最终的消亡,要经历若干个状态。一般来说,线程包括以下这几个状态:创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、time waiting、waiting、消亡(dead)。 当需要新起一个线程来执行某个子任务...

Java 并发编程——volatile 关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一...

Java 并发编程——线程池的使用

本文基于JDK 1.6,在高版本JDK中源码有所出入。 一、Java中的ThreadPoolExecutor类java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心的一个类,因此如果要透彻地了解Java中的线程池,必须先了解这个类。下面我们来看一下ThreadPoolExecutor类的具体实现源码。 在ThreadPoolExecutor类中提供了四个构...

Java 设计模式——工厂模式

一、什么是工厂模式工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 优点: 一个调用者想创建一个对象,只要知道其名称就可以了。 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 屏蔽产品的具体实现,调用者只关心产...

Java 设计模式——单例模式

一、单例模式的介绍1.1 什么是单例模式单例模式指的是一个类只会有一个实例,即一个类只有一个对象实例。它的特点有: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一实例 1.2 单例模式的应用场景(1)一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就...

Java8 Streams API 详解

一、为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。 Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集...

Java 反序列化漏洞分析

2015年11月6日FoxGlove Security安全团队的@breenmachine 发布了一篇长博客,阐述了利用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行的真实案例,各大Java Web Server纷纷躺枪,这个漏洞横扫WebLogic、WebSphere、JBoss、Jenkins、OpenNMS的最新版。而在将近10个月前, G...

Java8 日期处理

java中做时间处理时一般会采用java.util.Date,但是在Java 8中新增了对日期的处理类,包括java.time.LocalDate、java.time.LocalTime、java.time.LocalDateTime等。 java.util.Date和SimpleDateFormatter都是线程不安全的,而LocalDate和LocalTime和最基本的String一样,是不变...

Java8 Optional 详解

在Java8中新增了一个Optional类,官方描述是该类是一个容器对象,其中可能包含一个空或非空的值。如果存在一个值,isPresent()将返回true,get()将返回该值。 错误使用姿势简单的根据描述,我们认为Optional可以帮我们解决NPE问题,假设任务需求为获取用户的性别,那么可以这样写: 123456Optional<User> user = ...if(user.i...

JDK 动态代理与 Cglib 动态代理

一、前言AOP(Aspect Oriented Programming),即面向切面编程,最主要的思想就是纵向重复,横向抽取。要想实现 AOP,其底层实现是使用了动态代理技术,在 Spring 中,动态代理技术分为传统的 JDK 动态代理和 Cglib 动态代理。这两种代理机制区别是: JDK 动态代理:针对实现了接口的类进行代理 Cglib 动态代理:针对没有实现接口的类进行代理,底层是字节...
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×