- 博客(48)
- 资源 (8)
- 收藏
- 关注
原创 【搞定Java基础】之集合类面试题整理
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。因为集合类在Java基础知识中是非常重要的,也是面试中最常问到的,设计的问题也比较多,因此单独拿出来做面试题的整理,方便自己复习,也希望给看到此篇文章的你带来一定的帮助。文章内容均来自于网络,平时看到总结不错的题目,就收集在此。持续更新......
2018-12-11 11:43:58 545
原创 【搞定Java并发编程】面试题整理
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信:pcwl_Java 一起交流秋招面试经验,可获得博主的秋招简历和复习笔记。 在Java中守护线程和本地线程区别? Java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程...
2018-12-10 12:20:25 919
转载 【搞定网络协议】之计算机网络基础知识总结
博主秋招提前批已拿百度、字节跳动、拼多多、顺丰等公司的offer,可加微信一起交流秋招面试经验。本文按照五层网络模型进行基础知识点的总结:目 录:各层网络协议总览:1、各层的协议单元2、各层的主要协议3 、网卡、路由器、交换机一 应用层1、HTTP协议2、DHCP协议3、DNS协议和HTTP请求过程二 运输层2.1 UDP和TCP的特点...
2018-12-02 19:47:54 687
原创 【剑指offer】面试题9:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。 我们通过一个具体的例子来分析该队列插入和删除元素的过程。首先插入一个元素a,不妨先把它插入到stack1,此时stack1 中的元素有{a},stack2为空。再压入两个元素b和c,还是插入到stack1中,此时stack1中的...
2018-12-31 17:56:09 214
原创 【剑指offer】面试题8:二叉树的下一个节点
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。我们来分析下,求给定节点的下一个节点的的几种情况:1、若二叉树为空,则返回空;2、给定节点的右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子节点的指针找到的叶子节点即为下一个节点(即给定节点的右子树中的最左子节点);3...
2018-12-31 16:04:37 161
原创 【剑指offer】面试题7:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。例如输入的前序遍历序列为{1,2,4,7,3,5,6,8}和中序遍历为{4, 7, 2, 1, 5, 3, 6, 8},则重建出二叉树并输出它的头结点。 在二叉树的前序遍历序列中,第一个数字总是树的根节点的值。但在中序遍历中,根节点的值在序列的中间,左子树...
2018-12-31 12:03:02 275
原创 【剑指offer】面试题6:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。看到这道题,很多人的第一反应是从头到尾输出将会比较简单,于是我们很自然的想到把链表中的节点的指针反转过来,改变链表的方向,然后就可以从头到尾输出了。但该方法将会改变原来链表的结构。是否允许在打印链表的时候修改链表的结构?这个取决于面试官的要求,因此在面试的时候我们要询问清楚面试官的要求。通常打印是一个只读操作,我们不希望打印...
2018-12-31 10:35:23 278
原创 【剑指offer】面试题5:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成 “%20”。 例如输入 “We are happy.”,则输出”We%20are%20happy.”。 时间复杂度为O()的解法 最直观的做法就是从头到尾扫描字符串,每次碰到空格字符的时候就进行替换。由于是把1个字符替换成3个字符,因此必须把空格后面的所有字符都要后移2个字节,否则就会有两个字符被覆盖了。假设字符串的长度是n,对...
2018-12-30 22:01:05 667
原创 【剑指offer】面试题4:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。规律:首先选取数组中右上角的数字。 如果该数字等于要查找的数字,查找过程结束。 如果该数字大于要查找的数字,剔除这个数字所在的列; 如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字...
2018-12-30 19:42:08 544
原创 【剑指offer】面试题3:数组中的重复数字
题目1:找出数组中重复的数字在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。解题思路:从哈希表的思路拓展,重排数组:从头到尾依次扫描这个数组中的每个数字...
2018-12-30 19:01:41 701
原创 【剑指offer】面试题2:实现 Singleton 模式
本文目录:懒汉式和饿汉式解法1:只适用于单线程环境 (不好)解法2:虽然在多线程环境中能工作,但是效率不高 (不好)解法3:加同步锁前后两次判断实例是否存在 (可行)解法4:利用类静态变量初始化一个实例 (推荐使用)解法5:静态内部类实现按需创建实例 (推荐使用)总结题目:设计一个类,我们只能生成该类的一个实例。考点:对单例模式(Singleton)模型的...
2018-12-30 12:19:05 290
原创 【搞定Java并发编程】第29篇:Executor 框架详解
上一篇:Java中的线程池详解本文目录:1、Executor 框架简介1.1、Executor 框架的两级调度模型1.2、Executor 框架的结构与成员2、ThreadPoolExecutor 详解2.1、FixedThreadPool2.2、SingleThreadExecutor 2. 3、CachedThreadPool2.4、具体应用案例3、S...
2018-12-20 17:40:07 488
转载 【搞定Java并发编程】第28篇:Java中的线程池详解
上一篇:Java中的并发工具类之线程间交换数据的 Exchanger本文目录:1、线程池的实现原理 2、线程池的使用2.1、线程池的创建2.2、向线程池提交任务2.3、关闭线程池2.4、合理地配置线程池2.5、线程池的监控3、线程池的源码解析3.1、总览3.2、Executor 接口3.3、ExecutorService 接口3.4、Future...
2018-12-19 15:04:55 406
原创 【搞定Java并发编程】第27篇:Java中的并发工具类之线程间交换数据的 Exchanger
上一篇:Java中的并发工具类之控制并发线程数的 SemaphoreExchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,...
2018-12-18 17:00:18 271
转载 【搞定Java并发编程】第26篇:Java中的并发工具类之控制并发线程数的 Semaphore
上一篇:Java中的并发工具类之同步屏障 CyclicBarrier本文目录:1、获取许可证2、释放许可证本文转载自:https://mp.weixin.qq.com/s/LS8YBKpiJnHEY1kMWmwoxg推荐阅读:剖析基于并发AQS的共享锁的实现(基于信号量Semaphore)【写的非常好】Semphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协...
2018-12-18 15:59:30 228
转载 【搞定Java并发编程】第25篇:Java中的并发工具类之同步屏障 CyclicBarrier
上一篇:Java中的并发工具类之CountDownLatch本文目录:1、CyclicBarrier的简单概述2、CyclicBarrier 的源码分析3、CyclicBarrier与CountDownLatch的区别1、CyclicBarrier的简单概述现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,...
2018-12-18 14:45:10 318
原创 【搞定Java并发编程】第24篇:Java中的并发工具类之CountDownLatch
上一篇:Java中的阻塞队列 BlockingQueue 详解本文目录:1、CountDownLatch的基本概述2、CountDownLatch的使用案例3、CountDownLatch的源码分析1、CountDownLatch的基本概述CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch又称为“闭锁”,它是一个同步辅助...
2018-12-18 11:44:08 461
原创 【搞定Java并发编程】第23篇:Fork/Join 框架详解
上一篇:Java中的阻塞队列 BlockingQueue 详解本文目录:1、什么是 Fork/Join 框架2、工作窃取算法3、Fork/Join 框架的设计 4、使用 Fork/Join 框架5、Fork/Join 框架的异常处理6、Frok/Join 框架的实现原理6.1、ForkJoinTask 的 fork 方法实现原理6.2、ForkJoinTask ...
2018-12-17 20:50:15 256
转载 【搞定Java并发编程】第22篇:Java中的阻塞队列 BlockingQueue 详解
上一篇:Java并发容器之ConcurrentHashMap详解本文目录:1、阻塞队列的基本概念2、ArrayBlockingQueue2.1、ArrayBlockingQueue的基本使用2.2、ArrayBlockingQueue原理概要2.3、ArrayBlockingQueue的(阻塞)添加的实现原理2.3.1、add(E e)方法 和 offer(E e)方...
2018-12-17 16:46:18 570
转载 【搞定Java8新特性】之Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
本文转载自:https://blog.csdn.net/a724888/article/details/68936953本文目录:1、Java7 中的HashMap1.1、put过程分析数组初始化计算具体数组位置添加节点到链表中数组扩容补充:HashMap扩容机制: JDK1.7与1.8的区别1.2、get过程分析getEntry(key):2、Java...
2018-12-16 21:38:59 468
转载 【搞定Java并发编程】第21篇:Java并发容器之ConcurrentHashMap详解
上一篇:读写锁 --- ReentrantReadWriteLock详解本文目录:1、为什么要使用ConcurrentHashMap?2、ConcurrentHashMap的实现2.1、ConcurrentHashMap中主要的成员变量、成员方法和内部类2.2、分段锁的内部结构2.3、ConcurrentHashMap的初始化2.4、如何定位Segment(锁)和元素...
2018-12-16 20:11:18 275
转载 【搞定Java并发编程】第20篇:读写锁 --- ReentrantReadWriteLock详解
上一篇:重入锁 --- ReentrantLock 详解(点击查看)本文目录:1、读写锁的概述2、读写锁的具体实现2.1、读写状态的设计2.2、锁的获取2.2.1、写锁的获取2.2.2、读锁的获取2.3、锁的释放2.3.1、写锁的释放2.3.2、读锁的释放3、ReentrantReadWriteLock中的其他方法3.1、getOwner()3....
2018-12-16 13:41:50 409
转载 【搞定Java并发编程】第19篇:重入锁 --- ReentrantLock 详解
AQS系列文章: 1、队列同步器AQS源码分析之概要分析2、队列同步器AQS源码分析之独占模式3、队列同步器AQS源码分析之共享模式4、队列同步器AQS源码分析之Condition接口、等待队列 先推荐两篇好文章: 1、深入剖析基于并发AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理【写的非常好】2、 ReentrantLock源...
2018-12-14 22:28:45 425
原创 【搞定Java并发编程】第18篇:队列同步器AQS源码分析之Condition接口、等待队列
AQS系列文章:1、队列同步器AQS源码分析之概要分析2、队列同步器AQS源码分析之独占模式3、队列同步器AQS源码分析之共享模式4、队列同步器AQS源码分析之Condition接口、等待队列通过前面三篇关于AQS文章的学习,我们深入了解了AbstractQueuedSynchronizer的内部结构和一些设计理念,知道了AbstractQueuedSynchronizer内部...
2018-12-14 12:20:30 722
原创 【搞定Java并发编程】第17篇:队列同步器AQS源码分析之共享模式
AQS系列文章:1、队列同步器AQS源码分析之概要分析2、队列同步器AQS源码分析之独占模式3、队列同步器AQS源码分析之共享模式4、队列同步器AQS源码分析之Condition接口、等待队列通过上一篇文章的的分析,我们知道独占模式获取同步状态(或者说获取锁)有三种方式,分别是:独占式同步状态获取(不响应中断)、独占式同步状态获取(响应中断)和超时获取同步状态。在共享模式下...
2018-12-14 12:20:21 294
原创 【搞定Java并发编程】第16篇:队列同步器AQS源码分析之独占模式
AQS系列文章:1、队列同步器AQS源码分析之概要分析2、队列同步器AQS源码分析之独占模式3、队列同步器AQS源码分析之共享模式4、队列同步器AQS源码分析之Condition接口、等待队列本文主要讲解队列同步器AQS的独占模式:主要分为独占式同步状态获取(不响应中断)、独占式同步状态释放、独占式获取同步状态(响应中断)、独占式超时获取同步状态。目 录:1、独占式同...
2018-12-14 12:20:08 339
原创 【搞定Java并发编程】第15篇:队列同步器AQS源码分析之概要分析
AQS系列文章:1、队列同步器AQS源码分析之概要分析2、队列同步器AQS源码分析之独占模式3、队列同步器AQS源码分析之共享模式4、队列同步器AQS源码分析之Condition接口、等待队列先推荐两篇不错的博文:1、一行一行源码分析清楚AbstractQueuedSynchronizer2、深入剖析基于并发AQS的(独占锁)重入锁(ReetrantLock)及其Con...
2018-12-14 12:19:50 456
原创 【搞定Java并发编程】第14篇:Java中锁的概述
上一篇:重排序:https://blog.csdn.net/pcwl1206/article/details/849306691、Lock接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但有些锁可以允许多个线程并发访问共享资源,比如:读写锁)。在Lock接口出现之前,Java程序靠synchronized关键字实现锁功能。而Java SE5...
2018-12-14 12:19:31 219
原创 【个人面经】杭州趣链科技--研发工程师
实习的要求:面试问题: 1、自我介绍2、TCP的三次握手和四次挥手,问的比较细节,比如:TC的头部信息、为什么是握手是三次啊,挥手为什么要等2MLS啊...3、TCP的拥塞控制方法:慢开始、拥塞避免、快重传、快恢复4、Java线程池的实现原理5、Git的使用,怎么协同开发6、常用的Linux的指令7、Spring的源码:AOP8、手写快排9、常用的垃圾收...
2018-12-11 19:11:10 2978 1
原创 【搞定Java并发编程】第13篇:重排序
上一篇:happens-before:https://blog.csdn.net/pcwl1206/article/details/84929752目 录:1、数据依赖性2、as-if-serial语义3、程序顺序规则4、重排序对多线程的影响5、指令重排的案例讲解重排序:指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。1、数据依赖性如果两个...
2018-12-09 19:55:13 257
原创 【搞定Java并发编程】第12篇:happens-before
上一篇:final域的内存语义:https://blog.csdn.net/pcwl1206/article/details/84925372目 录:1、JMM的设计2、happens-before的定义3、happens-before规则其实我们在前面的Java内存模型中已经讲过happens-before。但是因为happens-before是JMM最核心的概念。所以这...
2018-12-09 18:22:22 370
原创 【搞定Java并发编程】第11篇:final域的内存语义
上一篇文章:锁的内存语义:https://blog.csdn.net/pcwl1206/article/details/84921447目 录:1、final域的重排序规则2、写final域的重排序规则3、读final域的重排序规则4、final域为引用类型5、为什么final引用不能从构造函数内“逸出”?6、final语义在处理器中的实现7、JSR-133为什么...
2018-12-09 13:40:45 376 3
原创 【搞定Java并发编程】第10篇:锁的内存语义
上一篇:CAS详解:https://blog.csdn.net/pcwl1206/article/details/84892287目 录:1、锁的释放-获取建立的happens-before关系2、释放锁和获取锁的内存语义3、锁内存语义的实现4、concurrent包的实现众所周知,锁可以让临界区互斥执行。这里将介绍锁的另一个同样重要,但是经常被忽视的功能:“锁的内存语义...
2018-12-09 12:25:26 242
原创 【搞定Java并发编程】第9篇:CAS详解
上一篇:volatile关键字详解:https://blog.csdn.net/pcwl1206/article/details/84881395目 录:一、CAS基本概念1.1、CAS的定义1.2、CAS的3个操作数 二、Java如何实现原子操作2.1、相关概念2.2、处理器如何实现原子操作2.3、Java如何实现原子操作三、原子变量四、AtomicIn...
2018-12-08 16:42:23 497
转载 【搞定Java基础】之 i++ 和 ++i 详解
目 录:一、i++ 和 ++i 的基本概念二、i++ 和 ++i 的实现原理三、i++ 和 ++i 在使用时的一些坑3.1、i = i++ 导致的结果“异常”3.2、多线程并发引发的混乱一、i++ 和 ++i 的基本概念在几乎所有的命令式编程语言中,必然都会有 i++ 和 ++i 这种语法。有些语言中 i++ 和 ++i 既可以作为左值又可以作为右值,笔者专门测试了一...
2018-12-08 13:15:50 3218
转载 【搞定Java并发编程】第8篇:volatile关键字详解
上一篇:Java内存模型详解:https://blog.csdn.net/pcwl1206/article/details/84871090目 录:1、volatile的作用1.1、volatile的可见性1.2、volatile禁止指令重排序2、volatile写-读建立的happens-before关系3、volatile写-读的内存语义4、volatile的内存...
2018-12-07 20:14:26 566
转载 【搞定Java并发编程】第7篇:Java内存模型详解
上一篇:ThreadLocal详解:https://blog.csdn.net/pcwl1206/article/details/84859661其实在Java虚拟机的学习中,我们或多或少都已经接触过了有关Java内存模型的相关概念(点击查看),只不过在Java虚拟机中讲的不够详细,因此在Java并发编程中,再对Java内存模型做详细讲解。目 录:一、并发编程模型的两个关键问题二...
2018-12-07 17:56:25 564
转载 【搞定设计模式】之23种设计模式总结篇
写在前面:对于设计模式,可能我们感觉平时写代码的时候用不到。但是其实我们平时用的JDK、Spring等框架中大量使用了设计模式。所以学习设计模式还是很有必要的,而且每一种设计模式是对某一类场景问题的抽象解决方案,是经过很多人验证过的,所以一般情况下,肯定要比你自己想的方案要更优雅。对于面试者来说,完全掌握23种设计模式着实有点多,所以只需要掌握常用的(面试官常问的~)。当然这里指的掌握是能...
2018-12-06 22:38:20 572
转载 【搞定Java并发编程】第6篇:ThreadLocal详解
上一篇:synchronized关键字:https://blog.csdn.net/pcwl1206/article/details/84849400目 录:1、ThreadLocal是什么?2、ThreadLocal使用示例3、ThreadLocal源码分析3.1、ThreadLocalMap3.2、get()3.3、set(T value)3.4、initi...
2018-12-06 21:03:06 435
转载 【搞定Java并发编程】第5篇:synchronized关键字
多线程上篇:https://blog.csdn.net/pcwl1206/article/details/84837530多线程下篇:https://blog.csdn.net/pcwl1206/article/details/84843170本文转发自:https://blog.csdn.net/javazejian/article/details/72828483这是一篇值得多读几...
2018-12-06 16:08:57 444 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人