- 博客(35)
- 收藏
- 关注
原创 阿里七年面试官分享:50道Java线程面试题分析及答案(建议收藏)
1) 什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。2) 线程和进程有什么区别?线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空...
2020-07-14 19:55:27 374
原创 Spring独占Java一半江山,搞定它让其他人无法代替!
面试官:简历上写了精通Spring,那你回答一下Spring为什么用“三级缓存”去解决循环依赖?我:.......应该有三个缓存的map结构面试官:具体回答一下我:平时没认真深入过面试官:公司的门在那里,自己走还是我送你?很多开发者在开发 Spring 程序的时候,被动接受了已经做好的 Spring 特性案例。虽然这样减少了开发成本,但是也限制了自身的横向扩展能力。Spring 框架几乎集成了一半 Java Web 开发的江山,只知道写,却不知道为什么这么写、不知道如何优化..
2020-07-14 15:42:13 447
原创 拿着35W年薪想跳槽,这些面试题一个答不上来,我很慌
最近很多网友在后台留言问关于Spring的循环依赖问题,这也是最近两年新出的面试频度较高的面试题!下面我们就通过这篇文章让大家了解循环依赖的问题什么是循环依赖?循环依赖其实是指两个及以上bean相互持有对方,最终形成闭环的过程(一般聊循环依赖都是默认的单例bean),简单说就是A依赖B,B依赖C,C又依赖A。其实在Spring中,有两种循环依赖的场景...第一种:构造器的循环依赖 第二种:setter的依赖注入第一种是没有办法解决的,而第二种可以使用...
2020-07-14 09:49:41 278
原创 扪心自问!一百多道难搞的面试题,你能答对了多少?
51)ArrayList 与 LinkedList 的不区别?(答案)最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。更多细节的讨论参见答案。52)用哪两种方式来实现集合的排序?(答案)你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合,如 list,然...
2020-07-13 20:43:37 405
原创 为啥阿里面试总喜欢问 JVM,还给了58万年薪?
上半年过去了,听得最多的就是:Java 面试太TM难了。僧多粥少基本是现在 Java 人面临的最大难题,去稍大一点的公司面试,竞争对手至少几十人。想从人群中脱颖而出,有些时候靠的未必是技术能力。因为大家的能力,其实都差不多(除去大神级别的 Java 程序员)。最主要考查的是:你是否能在短时间内,抗得住面试官的“连环炮”。如何将自己专业技能和项目经历,完整甚至“滤镜般”地展现在面试官面前,这才是关键。一般面试官在面试的时候,有三种常见套路:连环炮式发问,你如何抵挡?问:为何JVM频繁GC甚至
2020-07-13 15:45:48 258 1
原创 序列化:ProtoBuf与JSON的深度对比
介绍ProtoBuf 是google团队开发的用于高效存储和读取结构化数据的工具。什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据。比如电话簿上有很多记录数据,每条记录包含姓名、ID、邮件、电话等,这种结构重复出现。同类XML、JSON 也可以用来存储此类结构化数据,但是使用ProtoBuf表示的数据能更加高效,并且将数据压缩得更小。原理ProtoBuf 是通过ProtoBuf编译器将与编程语言无关的特有的 .proto 后缀的数据结构文件编译成各个编程语言(Jav...
2020-07-13 11:02:43 815
原创 Spring IOC与AOP源码分析,吊锤面试官 SO easy!
本文对Spring相关知识点做了归纳整理,包括 Spring 优势、其框架结构、核心思想,并对IoC思想及AOP思想进行手动实现,增强对Spring 核心思想的理解。之后对Spring IoC、AOP 的实现方式和特性进行介绍,并对照源码理解其实现思路。Spring 优势 方便解耦,简化开发 「[注:IoC(降低组件耦合性)、DI(降低业务对象替换的复杂性)]」 AOP编程的思想 「[注:通用任务集中管理,使得代码可更好的复用]」 声明式事务的支持 「[注:@Tra
2020-07-11 20:38:11 673
原创 扪心自问!一百多道难搞的面试题,你能答对了多少?(先放50道)
扪心自问!一百多道难搞的面试题,你能答对了多少?(先放50道)JAVA超神编程2020-07-11 15:01Java 面试中的重要话题除了你看到的惊人的问题数量,我也尽量保证质量。我不止一次分享各个重要主题中的问题,也确保包含所谓的高级话题,这些话题很多程序员不喜欢准备或者直接放弃,因为他们的工作不会涉及到这些。Java NIO 和 JVM 底层就是最好的例子。你也可以将设计模式划分到这一类中,但是越来越多有经验的程序员了解 GOF 设计模式并应用这些模式。为了给你一个大致的了解.
2020-07-11 15:11:19 1039
原创 彻夜研究了2天终于知道 JDK8 默认的GC 收集器了
JDK 8 到底默认用的是哪款 GC 收集器?为啥是 JDK8?不是 9 也不是 10?因为 JDK8 还是市场占有率最高的,所以针对这个版本我做了深入的探索。《深入理解 Java 虚拟机》第三版第 128 页中提到 JDK 9 之前,Server 默认使用 Parallel Scavenge + Serial Old(PS MarkSweep),那么真的是这样的吗? 我带着这个疑问做了如下验证直接使用命令查看一下当前 JVM 默认参数java-XX:+PrintComman...
2020-07-11 10:13:45 725 1
原创 GitHub上50K+star的MyBatis源码解析文档,限时免费下载!
前言对于开发来说,我们在工作中普遍都会用到各个开源框架,比如最基础的 Spring,使开发网络编程变得特别简单的 Netty 框架,还有成为目前微服务框架首选的 Spring Cloud 等。在多个框架之上,我们仅需使用几行代码,即可实现业务需要的复杂功能,大大减少了工作量。也正因如此,不少人只会用框架,看不懂源码,不了解其底层机制与实现原理,成了一名只会搬运源码库的开发。说白了,就是真正牛逼的技术不属于你。可了解框架中的很多知识和代码,对解决开发中的类似问题是极其有帮助的。因为它们..
2020-07-10 16:15:34 226
原创 费了好大心思熬夜整理了一篇Java泛型解释,看不懂来打我
什么是泛型(先理解是个啥)在学习Java基础的过程中,泛型绝对算得上是一个比较难理解的知识点,尤其对于初学者而言,而且就算是已经有基础的Java程序员,可能对泛型的理解也不是那么透彻,属于那种看了明白,时间长了就忘的那种,究其根本,还是对泛型不够理解。大部分人对泛型的认识:“基础知识,但是比较模糊”为啥要有泛型泛型这个概念是在Java1.5提出来的,之前是没有的,那为什么之前没有,现在要提出来这个概念呢?那你就得想啊:1、要么是之前的技术太垃圾了,得升级换代下2、要么是技术发展,搞出来的新玩.
2020-07-10 10:25:00 227
原创 不停机还能替换代码?6年的 Java程序员表示不可思议
相信很多人都有这样一种感受,自己写的代码在开发、测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,而线上调试代码又很麻烦,让人头疼得很。不过, 阿里巴巴出了一款名叫Arthas的工具,可以在线分析诊断Java代码,让人眼前一亮。❞Arthas 是什么?Arthas(阿尔萨斯) 是阿里开源的一个Java在线分析诊断工具。Arthas 能解决啥问题?在日常开发上线过程中,我们多多少少都会遇到下边这些问题,苦于无法在线调试,「只能通过老鸟的经验来硬分析bug,效.
2020-07-08 15:05:07 211
原创 GitHub上标星75k+超牛的《Java面试突击版》,分享PDF离线版
前言不论是校招还是社招都避免不了各种面试。笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:1.自我介绍。(你可千万这样介绍: “我叫某某,性别,来自哪里,学校是哪个,自己爱干什么”,记住:多说点简历_上没有的,多说点自己哪里比别人强! ) 2.自己面试中可能涉及哪些知识点、哪些知识点是重点。 3.面试中哪些问题会被经常问到
2020-07-07 20:26:30 268
原创 大厂面试必问的83道MySQL数据库,教你完虐面试官
1、数据库存储引擎2、InoDB (B+树)2、TokuDB ( Fractal Tree-节点带数据)3、MyIASM4、Memory5、数据库引擎有哪些6、InoDB与MyISM的区别7、索引8、常见索引原则有9、数据库的三范式是什么10、第一范式(1st NF -列都是不可再分)11、第二范式(2nd NF-每个表只描述一件事情)12、第三范式(3rd NF -不存在对非主键列的传递依赖)13、数据库是事务14、SQL优化15、简单说一说drop、 delete与trun
2020-07-07 16:00:56 255
原创 关于Java线程,看这一篇就绝对够用了
Java线程的三种创建方式继承Thread对象class ThreadImpOne extends Thread{ @Override public void run(){ System.out.println("ThreadImpOne"); } }实现Runnalbe接口class ThreadImpTwo implements Runnable{ @Override public voi.
2020-07-07 10:37:33 172
原创 阿里内推面试,挂在了一道简单的问题上…
上周,小北终于在内推了3次之后接到了阿里的面试。为了这场面试,他准备了很久,还专门找朋友开了小灶。然后面试的时候,面试官就问了一个非常简单的问题——“非公平锁和公平锁有什么区别?”听到这个问题,小北腰杆一下子就挺直了,张口就回答:“随机访问”、“插队访问””。没想到,面试官对这个回答微微皱了一下眉毛……就这样,整个面试的氛围就沉了下来,后来面试也没持续多久就结束了。后来小林怎么都想不通自己错在哪,于是找了我。他这么回答对不对?只能说,也没错。但如果我作为面试官,我最想听到的就是:非公平锁有两
2020-07-06 17:44:36 688
原创 Java线程池最细的解释,看完后彻底征服面试官
本篇文章主要介绍了线程池作用、如何创建线程池、自定义线程工厂和拒绝策略以及深入分析不推荐直接使用Executors静态工厂直接创建线程池的缘由,让大家可以对线程池有个更深刻的认识,而不是只停留在盲目去用的层面。线程池的必要性及作用线程能够充分合理地协调利用CPU、内存、I/O等系统资源,但是线程的创建需要开辟虚拟机栈、本地方法栈、程序计数器等线程私有空间,在线程销毁时需要回收这些系统资源。频繁地创建和销毁线程会大大浪费系统资源,这时候就需要线程池来管理线程,提高线程的复用(当然线程的作用并不仅于此)
2020-07-06 10:49:45 176
原创 80%会问到的18个Dubbo面试题,快来看看你都掌握了吗
文末领取全套面试题dubbo是什么dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含:集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。dubbo能做什么透明化的远程方...
2020-07-04 20:57:57 269
原创 源码分析 | 数据异构Canal 初探
源码分析 Canal 系列开始了,一个全新的系列,即能探讨 canal 本身的实现原理,也是笔者源码阅读技巧的展示。1、应用场景提到 Canal,大家应该都能想到这是一个用于解析 MySQL binlog 日志的工具,并将 MySQL 数据库中数据同步到其他存储介质中,例如 Elasticsearch。即 Canal 一个非常常用的使用场景:数据异构,一种更高级别的数据读写分离架构设计方法。随着业务不断的发展,企业发展到一定阶段,发现单体的关系型数据库已无法支撑业务高速发展带来数据不断累.
2020-07-04 16:00:28 217
原创 阿里P8大牛手撸一份Java集合源码学习笔记,太厉害了!
Java集合是面试的重点,我在面试的时候几乎每家公司都会问集合的问题,从基础到源码,一步一步深入。Java集合面试的知识点就不限于基本的用法了,可能面试官会问你:HashMap的数据结构是什么?他是怎么扩容的?底层有没有红黑树?去Key Hash值是JDK源码是怎么实现的?为什么要这样做? HashMap是线程安全的吗?什么是线程安全?有什么更好的解决方案?那线程安全的HashMap是怎么实现的? HashSwt是如何判断Key是重复的? .......很多很多总的来说,入门Java集合并不难,
2020-07-03 21:11:22 476
原创 五千字长文带你硬磕Java线程Dump分析,没看懂尽管来找我
1 Thread Dump介绍1.1 什么是Thread DumpThread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是 大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。1.2 Thread Dump特点能在各种操作系统下使用; 能在各种
2020-07-02 20:19:32 1544
原创 这500 道Java 核心面试题全解析还不码住?保你面试无忧
每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。那怎样才能快速拿到大厂的 Offer 呢?从业十多年,我从面试者变成面试官,在 Java 面试上积累了比较丰富的经验。其实,很多面试者在搜集面试资料的时候都踩过一些“坑”,你是不是也遇到过:免费搜索的面试题,内容不全面,这就算了,有时候答案都不准确;.
2020-07-02 20:13:26 257
原创 七面阿里成功斩获P8Offer后,我总结了JAVA全栈知识点
有人说,今年可能是过去十年最差的一年,但却是未来十年最好的一年。随着越来越多的知名企业进行大规模裁员,我们不得不承认一个事实:经济寒冬与裁员潮,将是未来常态!今年找工作属实有点难找,不过我还算幸运目前已斩获P8offer,下面我就给大家简单带过一下吧~本人介绍:6年多经验的程序员,坐标南京。背景:开始因水平有限,及对部分面试问题记忆及理解有限,可能有些问题并不能表达准确。掌握技术有限,学习主动性一般(虽遇到问题善于思考钻研,但如果没有遇到问题比较放纵自己...被自由,轻松,安逸迷失心智),
2020-07-02 09:35:24 521
原创 多线程编程时,我们面临哪些线程安全的要求该咋办呢?
前言在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个 共享、可变资源 的情况,这种资源可以是:一个变量、一个对象、一个文件等。特别注意两点:共享: 意味着该资源可以由多个线程同时访问; 可变: 意味着该资源可以在其生命周期内被修改;简单的说,如果你的代码在单线程下执行和在多线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。那么,当进行多线程编程时,我们又会面临哪些线程安全的要求呢?又是要如何去解决的呢?1 线程安全特性1.1 原子性.
2020-07-01 20:46:21 303
原创 f什么是分布式系统?如何学习分布式系统?
什么是分布式系统分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系
2020-07-01 14:37:34 219
原创 攻克SpringBoot底层源码后,才发现开发原来这么香
现在几乎没有哪个新项目没有用到Springboot,凡是用了Springboot后,都表示,“再也不想回到之前SSM的XML配置”了。但是给我们带来便利的背后,却把细节都隐藏了,如果不掌握原理,码一行,报错一行!攻克SpringBoot底层源码后,开发有多香?SpringBoot的面试高频题,也是大家开发中最常遇到的问题(都不是造火箭的题,都是实际开发必然遇到的问题)▼▼▼1.Springboot是怎么做自动配置的?自动配置的方式有哪些,优缺点又是什么?在Springboo..
2020-07-01 09:23:47 511 3
原创 java多线程同步实现方式以及这背后的原理是怎样的?
前言为何要使用Java线程同步? Java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时,将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。但其并发编程的根本,就是使线程间进行正确的通信。其中两个比较重要的关键点,如下:线程通信:重点关注线程同步的几种方式; 正确通信:重点关注是否有线程安全问题;Java中提供了很多线程同步操作,比如:synchronized关键字、wait/notify
2020-06-30 20:35:56 253
原创 用wait¬ify实现多线程才是正确打开方式
上一节讲了Synchronized关键词的原理与优化分析,而配合Synchronized使用的另外两个关键词wait¬ify是本章讲解的重点。最简单的东西,往往包含了最复杂的实现,因为需要为上层的存在提供一个稳定的基础,Object作为Java中所有对象的基类,其存在的价值不言而喻,其中wait¬ify方法的实现多线程协作提供了保证。1 源码今天我们要学习或者说分析的是 Object 类中的 wait¬ify 这两个方法,其实说是两个方法,这两个方法包括他们的重载方法一共有 5 个,而 Object
2020-06-30 16:08:39 215
原创 遇到多线程别就只会使用synchronized了,深入了解synchronized
记得开始学习Java的时候,一遇到多线程情况就使用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着学习的进行我们知道在JDK1.5之前synchronized是一个重量级锁,相对于j.u.c.Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而慢慢摒弃它。不过,随着Javs SE 1.6对synchronized进行的各种优化后,synchronized并不会显得
2020-06-30 09:25:26 468
原创 并发编程必看——内存模型之基础概述
0 前言在并发编程中,需要解决两个关键问题:线程之间如何通信; 线程之间如何同步;线程通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。线程同步是指程序用于控制不同线程之间操作发生相对顺序的机制。在共享内存的并发模型里,同步是显式
2020-06-29 21:09:12 214
原创 聊聊核心源码-1.服务端启动流程
前言Dubbo是阿里巴巴开源的基于Java实现的高性能、透明化的RPC框架。深入了解Dubbo源码,有助于快速定位问题、高效实现自定义拓展。本文以Dubbo服务端初始化过程为例,分析Dubbo怎么从配置转化成可被调用的服务。以典型的服务端结合Spring配置为例:<!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="demo-provider"/> <!-- 用dubbo协议在20880端口暴露服务 --&g
2020-06-27 17:34:14 259
原创 来讲讲InheritedWidget
InheritedWidget是Flutter中的一个非常重要的功能组件,它能够提供数据在widget树中从上到下进行传递。保证数据在不同子widget中进行共享。这对于一些需要使用共享数据的场景非常有效,例如,在Flutter SDK中就是通过InheritedWidget来共享应用的主题与语言信息。可能你还有点模糊,别急,下面我们通过一个简单的示例来了解InheritedWidget。示例相信开始学Flutter时都看过官方的计数器示例。我们将官方提供的计数器示例使用InheritedW.
2020-06-16 16:47:46 246
原创 深度分析:面试90%被问到的 Session、Cookie、Token,看完这篇你就掌握了!
Cookie 和 SessionHTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。Session 是什么客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为ConcurrentHashMap。Session 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会话期间.
2020-06-16 14:10:02 245
原创 超实用 Nginx 极简教程,覆盖了常用场景
概述什么是 Nginx?Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。安装与使用安装详细安装方法请参考:Nginx服务..
2020-06-16 11:02:08 201
原创 对于后端来说,一个项目究竟应该怎么做
引子作为一个程序员,平时的工作是与项目来挂钩的,但是有的时候会发现有些项目做得风生水起,有的则做得浑身难受,那么一个项目究竟应该怎么做?一个后端接到项目的主要流程需求咨询 需求评审 项目估期 技术评审 跟上游约定 api 开发 联调测试 产品验收 上线 整理必要的文档需求咨询这个阶段是后端最初接触某项目的初始阶段,此时产品会给出最初的需求文档(线框图此时可能没有),甚至是人肉来咨询后端做最初的评估,已确定某些需求的可能性。讨论结束后产品会根据讨论得到的结果回去开脑洞,
2020-06-16 09:21:03 1567
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人