Java互联网高级培训教程
文章平均质量分 81
并发编程、数据结构、Java虚拟机等等这些知识都是互联网大厂的常见面试题,也是要进一步学习Java必须牢固掌握的基础,所以需要多花点时间学习。本博客内容涉及数据结构、Java基础知识、JVM、并发编程等等这些很重要的知识点,适合作为筑基教程,为之后更难的学习做准备
smileNicky
优秀
展开
-
Java互联网高级培训教程专栏导航
并发编程、数据结构、Java虚拟机等等这些知识都是大厂面试的常见面试题,也是要进一步学习Java必须牢固掌握的基础,所以需要多花点时间学习,本博客内容涉及数据结构、Java基础知识、JVM、并发编程等等,适合作为筑基教程,为之后更难的学习做准备原创 2023-04-26 18:53:20 · 663 阅读 · 0 评论 -
TCP协议为什么需要三次握手?
TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?读者可以带着疑问,看一遍本篇博客的详细讲解。首先解释原因之前还是要先复习一下TCP的基本知识和三次握手协议原创 2021-09-03 17:03:46 · 21493 阅读 · 21 评论 -
HashMap实现原理和源码详细分析
JDK1.8 HashMap实现原理和源码详细分析,学习要点:知道HashMap的数据结构。了解HashMap中的散列算法。知道HashMap中put、remove、get的代码实现。HashMap的哈希冲突是什么?怎么处理的?知道HashMap的扩容机制原创 2021-09-12 09:52:37 · 5377 阅读 · 27 评论 -
应如何设置HashMap容量的初始值?
Java中的集合框架是每一个java程序员使用很多的,其中hashMap的使用也是很多的,我之前也写过一篇对hashMap源码进行比较详细分析的博客:链接,读者可以参考学习。然后有看过阿里编程规范的应该知道,规范里指出在使用hashMap时候是可以指定一个初始化的容量的,然后具体原因是什么?原创 2021-10-31 17:22:07 · 3188 阅读 · 0 评论 -
记录一次大数据量接口优化过程
记录一次大数据量接口优化过程。最近在优化一个大数据量的接口,是提供给安卓端APP调用的,因为安卓端没做分批次获取,接口的数据量也比较大,因为加载速度超过一两分钟,所以导致接口超时的异常,要让安卓APP分批次调用需要收取费用,所以只能先优化一下接口的速度。原创 2024-04-29 17:21:32 · 4890 阅读 · 7 评论 -
并发编程系列之线程基础知识回顾
并发编程系列之线程基础知识回顾,并发多线程的知识是很重要而且比较杂的知识点,所以需要花不少时间用于整理。问题1、使用多线程的目的是什么?充分利用cpu资源,可以并发的处理任务原创 2021-08-27 13:54:48 · 1489 阅读 · 4 评论 -
为什么说创建线程的方法只有1种?
为什么说创建线程的方法只有1种??并发多线程的知识是很重要而且比较杂的知识点,所以需要花不少时间用于整理。创建线程的方式是学习并发编程的一个很基础的问题,所以必须先掌握好,这应该说是一个比较经典的面试题,创建线程的方式到底有多少种?有人可能会说有两种?三种?四种?原创 2021-08-22 16:16:02 · 1833 阅读 · 6 评论 -
并发编程系列之如何正确使用线程池?
并发编程系列之如何正确使用线程池?在上一章节的学习中,我们掌握了线程的基本知识,接着本博客会继续学习多线程中的线程池知识。线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太慢,那么是否就能多创建多个线程来跑任务?原创 2021-09-01 22:33:41 · 2815 阅读 · 12 评论 -
并发编程系列之掌握原子类使用
并发编程系列之掌握原子类使用。原子类是jdk的juc包中提供的对单个变量进行无锁、线程安全修改的工具类。juc中提供的锁,能很好地保证线程安全,但是在高并发的情况下,可能不能保证高性能,所以适当地使用原子类,有时候是可以提高性能原创 2021-12-04 20:14:49 · 3301 阅读 · 0 评论 -
并发编程系列之什么是Java内存模型?
并发编程系列之什么是Java内存模型?Java内存模型简称JMM(Java Memory Model),JMM是和多线程并发相关的一组规范。各个jvm实现都要遵循这个jmm规范。才能保证Java代码在不同虚拟机顺利运行。因此,JMM 与处理器、缓存、并发、编译器有关。它解决了CPU 多级缓存、处理器优化、指令重排等导致的结果不可预期的问题原创 2021-11-20 11:08:51 · 1411 阅读 · 0 评论 -
并发编程系列之变量可见性问题探究
并发编程系列之变量可见性问题探究。以例子的形式看看,定义一个变量,先用static修饰,在主线程修改之后,看看在新开的子线程里能被看到?原创 2021-11-15 16:33:06 · 1519 阅读 · 0 评论 -
并发编程系列之volatile关键字详解
volatile是什么?volatile是Java中的一个关键字,也是一种同步机制。volatile为了保证变量的可见性,通过volatile修饰的变量具有共享性。修改了volatile修饰的变量,其它线程是可以读取到最新的值的原创 2021-11-27 17:43:46 · 2225 阅读 · 0 评论 -
单例模式双重检查锁模式为什么必须加 volatile?
单例模式双重检查锁模式为什么必须加 volatile?在new Singleton时候,会进行如下的过程,①先给Singleton分配内存空间、②调用Singleton的构造函数进行初始化操作③将Singleton对象指向分配的内存空间。不加volatile关键字,进行代码编译时候是会进行指令重排序的原创 2021-11-22 20:02:47 · 1626 阅读 · 0 评论 -
并发编程系列之什么是并发协同?
并发编程系列之什么是并发协同?多个线程并发,协作来完成一件任务的过程。因为任务处理的需要,需控制某些线程等待另外一些线程执行完成任务的某些部分,然后继续执行原创 2021-11-29 16:57:06 · 1771 阅读 · 2 评论 -
并发编程系列之CountDownLatch用法简介
并发编程系列之CountDownLatch用法简介。CountDownLatch:用于协同控制一个或多个线程等待在其他线程中执行的一组操作完成,然后再继续执行原创 2021-11-29 16:13:30 · 1857 阅读 · 0 评论 -
并发编程系列之CyclicBarrier用法简介
CyclicBarrier,协同指定数目的线程,让这些线程都在这个屏障前等待,直到所有的线程都到这个屏障前,再一起继续执行。线程执行完成后,这个屏障可以再次使用,因此被称之为循环屏障。原创 2021-11-29 16:16:10 · 1473 阅读 · 0 评论 -
并发编程系列之Semaphore用法简介
就是要给令牌池,可获取信号量(令牌或者许可)、放入信号量。常用于控制并发的线程数,也可用于池类资源的访问控制。原创 2021-11-29 16:55:47 · 1421 阅读 · 0 评论 -
并发编程系列之Phaser用法简介
对Phaser阶段协同器的理解,Phaser适用于多个线程协作的任务,分为多个阶段,每个阶段都可以有任意个参与者,线程可以随时注册并参与某个阶段;当一个阶段中所有任务都成功完成后,Phaser的onAdvance()被调用,然后Phaser释放等待线程,自动进入下个阶段。如此循环,直到Phaser不再包含任何参与者。原创 2021-11-29 16:52:11 · 1494 阅读 · 0 评论 -
并发编程系列之ReentrantLock用法简介
并发编程系列之ReentrantLock用法简介。ReentrantLock是实现底层的Lock接口的可重入锁实现。支持公平锁模式和非公平锁模式原创 2021-12-01 19:06:40 · 1518 阅读 · 0 评论 -
并发编程系列之ReadWriteLock使用
并发编程系列之ReadWriteLock使用。ReadWriteLock是jdk的juc包中提供的读写锁api,维护一对关联的读锁、写锁,读锁可以被多个读线程共享,写锁排他。ReadWriteLock根据一系列规则保证了线程安全也保证了执行效率原创 2021-12-03 10:11:22 · 1494 阅读 · 0 评论 -
并发编程系列之StampedLock使用
StampedLock,也即邮戳锁,是jdk8中推出的对读写锁的缺点进行改进的邮戳锁,它推出了乐观读写来改进大量并发读,少量写的情况的性能原创 2021-12-03 17:41:11 · 1679 阅读 · 0 评论 -
并发编程系列之掌握Condition接口使用
并发编程系列之掌握Condition接口使用。Condition是jdk的juc包中提供的并发等待api,俗称条件等待,条件变量,用于在Lock中提供synchronized加Object的wait/notify等待通知模式原创 2021-12-02 15:44:22 · 1606 阅读 · 0 评论 -
并发编程系列之掌握LockSupport的用法
并发编程系列之掌握LockSupport的用法,LockSupport是用于创建锁和其他同步类的基本线程阻塞原语,LockSupport提供了两类最基本的API原创 2021-11-15 16:32:55 · 1207 阅读 · 0 评论 -
并发编程系列之什么是ForkJoin框架?
并发编程系列之什么是ForkJoin框架?ForkJoin框架是java的JUC包里提供的,用于处理一些比较繁重的任务,会将这个大任务分为多个小任务,多个小任务处理完成后会将结果汇总给Result,体现的是一种“分而治之”的思想。第一步,拆分fork任务,将大任务分为多个小任务;第二步,归并join,会将小任务的处理结果进行归并为一个结果。原创 2021-10-16 17:59:41 · 1240 阅读 · 0 评论 -
并发编程系列之Future类的主要功能介绍
并发编程系列之Future类的主要功能介绍,Future类:future类的是一种异步任务监视器,可以让提交者可以监视任务的执行,同时可以取消任务的执行,也可以获取任务返回结果原创 2021-09-01 22:34:14 · 2132 阅读 · 0 评论 -
并发编程系列之FutureTask源码学习笔记
并发编程系列之FutureTask源码学习笔记,在上一章节的学习中,我们知道了Future类的基本用法,知道了Future其实就是为了监控线程任务执行的,接着本博客继续学习FutureTask。然后什么是FutureTask类?Future是1.5版本引入的异步编程的顶层抽象接口,FutureTask则是Future的基础实现类。同时FutureTask还实现了Runnable接口,所以FutureTask也可以作为一个独立的Runnable任务原创 2021-09-12 09:52:21 · 1342 阅读 · 0 评论 -
并发编程系列之Callable和Runnable的不同?
并发编程系列之Callable和Runnable的不同?本博客学习要点:1、了解Runnable的原理和不足2、掌握怎么使用Callable实现任务3、对比Runnable和Callable的不同原创 2021-09-01 19:51:40 · 1265 阅读 · 2 评论 -
并发编程系列之AQS实现原理
并发编程系列之AQS实现原理。AQS(AbstractQueuedSynchronizer),抽象队列同步器,是juc中很多Lock锁和同步组件的基础,比如CountDownLatch、ReentrantLock、ReentrantReadWriteLock、Semaphore等等,提供了对资源的占用、释放,线程的等待、唤醒等等接口或具体实现,可以用在各种需要控制资源竞争的场景中。原创 2022-01-11 18:14:39 · 1531 阅读 · 2 评论 -
并发编程系列之ThreadLocal实现原理
并发编程系列之ThreadLocal实现原理。ThreadLocal是一个线程的本地变量,可以理解为线程的变量,在线程执行过程随时可以访问。ThreadLocal变量,只有当前线程才能访问,其它线程不能访问,所以本质上ThreadLocal就是线程安全的。所以ThreadLocal的作用和上面例子说的局部变量一样是线程安全的。原创 2022-04-16 20:29:36 · 1326 阅读 · 0 评论 -
并发编程系列之Synchronized实现原理
并发编程系列之Synchronized实现原理。偏向锁:当一个线程获取到锁后,这把锁就是偏向锁,偏向锁是在锁对象的对象头中记录一个线程id,然后该线程再次获取锁时,直接获取就可以轻量级锁:如果有第二个线程来竞争锁,这时就会升级为轻量级锁,轻量级锁是不会阻塞线程的,其底层是通过自旋实现的。自旋是通过CAS获取一个预期的标识,如果没获取到,就会一直循环获取,获取到标识,也就标识获取到锁重量级锁:如果轻量级锁一直自旋也获取不到锁,才会升级为重量级锁,重量锁是会阻塞线程的,也称之为重锁原创 2022-04-10 12:30:56 · 1113 阅读 · 2 评论 -
并发编程系列之分布式锁原理和实现方式
并发编程系列之分布式锁原理和实现方式。在单体系统,虽然也有多线程并发的情况,但是都是在同一个进程里的,所以可以juc提供的各种锁就可以实现线程安全。但是在分布式环境,是要控制不同进程中的线程并发执行抢资源,这种情况juc的工具api是做不到的,所以需要一个独立的分布式锁生成器,从而保证多个进程中的线程使用同一把锁原创 2021-12-05 17:24:40 · 1428 阅读 · 0 评论 -
并发编程系列之CompletableFuture实践
CompletableFuture是jdk8之后开始提供的,支持异步的工具类,上手容易,功能相对比较强大。支持函数式编程的方式对各类操作进行组合编排,是进行代码异步处理的一个很好的工具类。原创 2024-02-06 18:45:00 · 1693 阅读 · 0 评论 -
JDK8系列之Optional API应该怎样用?
JDK8系列之Optional API应该怎样用?在前面的章节的学习中,我们学习了jdk8的新特性,lambada表达式、方法引用、函数式接口等等,接着本博客继续JDK8的一个比较重要的特性,JDK8中Optional,jdk8设计这个Optional的目的就是为了避免开发中很常见的NullPointerException,Optional 是 Java 实现函数式编程的保障一步,并且帮助在范式中实现原创 2021-07-20 14:46:28 · 2146 阅读 · 10 评论 -
JDK8系列之Functional Interfaces教程和示例
JDK8系列之Functional Interfaces教程和示例,在前面章节的学习中,我们学习了JDK8的lambada表达式和方法引用,接着,本章节继续学习jdk8的一个重要特性Functional Interfaces,翻译过来就是函数式接口,什么是函数式接口,Functional Interfaces?函数式接口是jdk8的新特性之一,函数式接口是只包含一个抽象方法声明的接口。...原创 2021-07-14 17:26:29 · 1573 阅读 · 8 评论 -
JDK8系列之Method References教程和示例
JDK8系列之方法引用教程和示例,方法引用,英文Method References,jdk8中的方法引用通过方法的名字来指向一个方法,语法是使用一对冒号 ,方法引用可以使语言的构造更紧凑简洁,减少冗余代码原创 2021-07-14 15:00:49 · 1354 阅读 · 0 评论 -
JDK8系列之Stream API入门教程和示例
JDK8系列之Stream API入门教程和示例,在前面的章节的学习中,我们学习了jdk8的新特性,lambada表达式、方法引用、函数式接口等等,接着本博客继续JDK8的一个比较重要的特性,JDK8 Stream API原创 2021-07-19 17:58:52 · 2148 阅读 · 8 评论 -
JDK8系列之default定义接口的默认实现方法
JDK8系列之default定义接口的默认实现方法,默认方法,default method,这是是jdk8的新特性,只要在方法名称面前加上default关键字就行。设计出这个default方法的目的是为了添加到接口中,正常情况,接口中只能有接口,不能有实现方法的,有了default方法之后,就可以在接口中写实现原创 2021-07-15 15:34:24 · 2936 阅读 · 4 评论 -
JDK8系列之Lambda表达式教程和示例
JDK8系列之Lambda表达式教程和示例,Lambda 表达式是一种匿名函数,但对Java中的Lambda表达式而已并不完全正确,简单来说,Lambda表达式是一种没有声明的方法,也即没有访问修饰符、返回值声明和名字原创 2021-07-12 17:03:50 · 2224 阅读 · 15 评论 -
Java基础知识之什么是集合框架
Java基础知识之什么是集合框架,Java基础知识之集合Collection概述,前面的文章,我们已经学习了Java的一些基础知识,比如泛型、注解等等内容,接着本博客继续学习Java中一个很常见的内容,集合。Java Collections 框架由接口和类组成,集合框架是用于存储数据和操作一组对象的统一架构原创 2021-08-19 20:14:31 · 4723 阅读 · 61 评论 -
Java基础知识之泛型简单介绍
Java基础知识之泛型简单介绍,java泛型:英文名称是generics,泛型是jdk5引入的一个新特性,java泛型的本质就是参数化类型,就是所有的操作数据类型被指定为一个参数。对参数化类型进行操作的实体(例如类、接口或方法)称为泛型实体。原创 2021-08-10 15:34:43 · 2911 阅读 · 5 评论