The Road To Bald Man!
[TOC]
The Road To Bald Man!一、编程基础Java基础
基础语法
面向对象
接口
容器
异常
泛型
反射
注解
I/O
图形化
集合框架(源码)
List
ArrayList
LInkedList
Set
HashSet
TreeSet
Map
HashMap (JDK 8 的实现与之前的版本不同)
TreeMap
ConcurrentHashMap
Queue
ConcurrentLinkedQueue
Stack
Collections的SynchronizedXXX方法
高级特性
泛型
多态的实现原理
Lambda
并发编程
Executor框架
Fork/join
数据结构
ConcurrentHashMap
ConcurrentLinkedQueue
线程池
线程状态
Lock/syschronized
原子操作类
并发工具类
CountDownLatch
Semaphore
CyclicBarrier
Exchanger
网络编程
Socket
IO
BIO
NIO
AIO
序列化
JDK自带
Google ...
算法
插入排序介绍将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
代码实现/** * @ClassName: InsertSort * @Description: * @Author: 10136 * @Date: 2021/5/6 23:19 **/public class InsertSort { public static void main(String[] args) { int[] arr = {1,3,4,2,6,8,4,5,10}; insertSort(arr); for(int i:arr){ System.out.println(i); } } public static void insertSort(int[ ...
选择排序
选择排序介绍首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
代码实现/** * @ClassName: SelectSort * @Description: * @Author: 10136 * @Date: 2021/5/6 22:40 **/public class SelectSort { public static void main(String[] args) { int[] arr = {1,3,4,2,6,8,4,5,10}; selectSort(arr); for(int i:arr){ System.out.println(i); } } public static void selectSort(int[] arr) { for (int i = ...
深入理解Java虚拟机
深入理解Java虚拟机
面试题-并发编程
[TOC]
基础知识为什么要使用并发编程
提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了CPU的使用效率,如果使用单线程就只能有一个CPU核心被使用。
比如当我们在网上购物时,为了提升响应速度,需要拆分,减库存,生成订单等等这些操作,就可以进行拆分利用多线程的技术完成。面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分 。
简单来说就是:
充分利用多核CPU的计算能力;
方便进行业务拆分,提升应用性能
多线程应用场景
例如: 迅雷多线程下载、数据库连接池、分批发送短信等。
并发编程有什么缺点
并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到很多问题,比如:内存泄漏、上下文切换、线程安全、死锁等问题。
并发编程三个必要因素是什么?
原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。
可见性 ...
面试题-集合框架
Java集合容器概述什么是集合
集合就是一个放数据的容器,准确的说是放数据对象引用的容器。
集合类存放的都是对象的引用,而不是对象的本身。
集合类型主要有3种:set(集)、list(列表)和map(映射)。
集合的特点主要有如下两点:==存储对象,长度可变==
集合用于存储对象的容器,对象是用来封装数据,对象多了也需要存储集中式管理。
和数组对比对象的大小不确定。因为集合是可变长度的。数组需要提前定义大小。
集合和数组的区别
数组是固定长度的;集合可变长度的。
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
使用集合框架的好处
容量自增长。
提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量。
可以方便地扩展或改写集合,提高代码复用性和可操作性。
通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。
常见的集合类有哪些Map接口和Collection接口是所有集合框架的父接口:
Collection接口的子接口包括:Set接口和List接口 ...
JDK8 HashMap源码
HashMap源码未完待续…
package java.util;import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.util.function.Consumer;import java.util.function.Function;//HashMap继承了AbstractMap类,实现了Cloneable和Serializable接口public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, S ...
Maven配置标签详解
Maven配置标签详解<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"> <!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。 --> <parent> <!--被继承的父项目的构件标识符 --> <artifactId /> <!--被继承的父项目的全球唯一标识符 --> <groupId /> ...
设计模式-创建型模式-单例模式
设计模式-创建型模式-单例模式1)、饿汉式(静态常量)public class SingletonTest01 { public static void main(String[] args) { //测试 Singleton instance = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println(instance == instance2); // true System.out.println("instance.hashCode=" + instance.hashCode()); System.out.println("instance2.hashCode=" + instance2.hashCode()); }}//饿汉式(静态变量)class Singleton { //1. 构造器私有化, 外部能new private Singleton() ...
设计模式-七大设计原则
设计模式-七大设计原则==三种类型==
创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
结构性模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式
==核心思想==
代码重用性(即:相同功能的代码,不用多次编写)
可读性(即:编程规范性,便于其他程序员的阅读和理解)
可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护)
可靠性(即:当我们增加新的功能后,对原来的功能没有影响)
使程序呈现高内聚,低耦合的特性
1)、单一职责原则(Single Responsibility)目的:降低代码复杂度、系统解耦合、提高可读性
对类来说,即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。
降低类的复杂度,一个类只负责一项职责。
提高类的可读性,可维护性。
降低变更引起的风险。 ...