面试宝典
文章平均质量分 79
菠萝-琪琪
这个作者很懒,什么都没留下…
展开
-
Java编码的坑你知多少?
在Java中,RandomAccess和Cloneable、Serializable一样,都是标志性接口,不需要任何实现,只是用来表明其实现类具有某种特质的,实现了Cloneable表明可以被拷贝,实现了Serializable接口表明被序列化了,实现了RandomAccess则表明这个类可以随机存取,对我们的ArrayList来说也就标志着其数据元素之间没有关联,即两个位置相邻的元素之间没有相互依赖和索引关系,可以随机访问和存储。是内部类,并且是静态(static修饰)的即为静态内部类。原创 2022-12-09 19:13:48 · 600 阅读 · 0 评论 -
Java 最优雅关闭线程池得两种方式
注册钩子函数 private static void shutDownThreadPool(){ Runtime.getRuntime().addShutdownHook( new ShutdownHookThread(log,() -> { poolExecuteConcurrentHashMap.forEach( (k,v) -> { if(Optional.ofNullable( v ).isPresent原创 2021-04-02 22:56:13 · 1071 阅读 · 1 评论 -
面试经典问:现在有一个很大量的秒杀场景,应该怎么处理?
相信很多5年以上工作经验的同学在面试的时候经常会被问道:现在有一个很大量的秒杀场景,应该怎么处理?很多同学的第一反应回答80%都是: 用Redis来做缓存,防止超卖也能保证一定的性能...当你说出这个回答的时候恭喜你你已经成功入坑了,大多数面试官会直接跳过这个问题不在深入追问(因为你连第一个问题都没回答到面试官心坎里,面试官已经放弃问你这个问题了)那么我们应该怎么回答才能让伟大的面试官满意呢?需要同学门深思熟虑下面试官的意图,秒杀场景 == redis??显然不是这样的(太多同学的思维.原创 2021-02-18 11:05:47 · 2357 阅读 · 5 评论 -
大厂面试中常问的栈排序
很多大厂的笔试题中都会要求面试者写一段栈排序,因为栈这个数据结构平时我们用的比较少,导致很多面试者一下子都有点懵逼,这里就来给大家解惑一下吧题目:一个栈中有10个随机大小的元素,这个是初始栈 可以让你申请一个空栈作为交换使用 不准使用任何其他数据结构进行存储 最终按照从小到大的顺序输出原始栈思路:Stack这个数据结构的核心API我们必须要了解下,不然真的无从下手,Pop,Push,Peek三种核心操作 Pop会让栈顶数据出栈,同时删除原始栈顶的数据 Push添加元素到栈顶 .原创 2021-01-26 00:31:13 · 148 阅读 · 0 评论 -
通过ReentrantLock的源码解析AQS的原理
Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架1 ReentrantLock1.1 ReentrantLock特性概览ReentrantLock意思为可重入锁,指的是一个线程能够对一个临界资源重复加锁。为了帮助大家更好地理解ReentrantLock的特性,我们先将ReentrantLock跟原创 2021-01-19 11:28:33 · 746 阅读 · 2 评论 -
JVM垃圾回收算法详解
标记-复制算法标记—复制算法,主要解决了标记—清除算法之后内存过于碎片化的问题,它是将可用的内存区域划分为大小相等的两块内存(当然也不一定非要相等),在进行垃圾收集时,现将存活的对象标记,然后将标记的存活对象复制到另一半空闲的内存区域,最后将之前的一半区域中所有对象完全清除用来存放之后新生的对象。这样就解决了使用标记—回收算法之后内存碎片化的问题,而且在对象内存分配时也极为简单,只需要移动堆顶指针,按顺序分配即可,简单高效。缺点也极为明显: 如果某块内存区域中在进行垃圾回收时,有大量的存活原创 2021-01-15 00:21:15 · 311 阅读 · 0 评论 -
JVM 运行时内存空间详解
相关概念方法区只是JVM规范中定义的一个概念,用于存储静态变量、常量池、符号引用、类信息、JIT编译后的代码等数据,具体放在哪里,不同的实现可 以放在不同的地方。永久代是HotSpot虚拟机特有的概念,是对方法区的实现,别的JVM没有永久代的概念。(虽然去除了永久代,但是方法区作 为概念上的区域仍然存在) JDK8的HotSpot VM已经是以前的HotSpot VM与JRockit VM的合并版,也就是传说中的“HotRockit”,只是产品里名字还是叫HotSpot VM。 所以对于说JDK8原创 2021-01-13 14:40:47 · 305 阅读 · 0 评论 -
Mysql中order by 排序原理
在实际开发中经常会使用order by这样的排序关键字,然后也会经常遇到DBA找上你和你说『你的order by 有问题,数据量太大了执行太慢了,需要优化你的sql』,那么我们应该怎么优化我们的order by呢再要对某一件事情进行改变之前,我们首先要了解这件事情产生的原因以及本质,这样才能准确的解决问题案例:假设你要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前 1000 个人的姓名、年龄我们的查询语句一般是这样的select city,name,age from t wh.原创 2021-01-13 00:41:23 · 1138 阅读 · 1 评论 -
Mysql-Innodb引擎索引存储深度解析
索引定义和一些概念:我们知道,数据库查询是数据库的最主要功能之一。但每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。InnoDB索引原理:索引实现: MyIS.原创 2021-01-13 00:29:00 · 183 阅读 · 0 评论 -
Java中Fork/Join 正确理解
Fork-Join 模型fork-join (以下简称 F-J) 首先是一种并行模型,以 fork (开启)分支的方式执行代码逻辑,待全部分支递归执行完毕,join (合并)所有并行分支,而后代码会继续串行执行。从算法角度上来说,特别适合基于分治法的计算。传统线程池传统的线程池的实现大致是这样的:首先生成一个线程池需要指定核心线程数(coreSize)、最大线程数(maxSize)、work queue 阻塞队列初始化、线程创建工厂类(ThreadFactory)以及阻塞队列满员后的丢弃原创 2021-01-07 23:50:08 · 1782 阅读 · 0 评论 -
LinkedHashMap实现LRU算法
LinkedHashMap 概述笔者曾提到,HashMap 是 Java Collection Framework 的重要成员,也是Map族(如下图所示)中我们最为常用的一种。不过遗憾的是,HashMap是无序的,也就是说,迭代HashMap所得到的元素顺序并不是它们最初放置到HashMap的顺序。HashMap的这一缺点往往会造成诸多不便,因为在有些场景中,我们确需要用到一个可以保持插入顺序的Map。庆幸的是,JDK为我们解决了这个问题,它为HashMap提供了一个子类 —— LinkedH转载 2021-01-07 21:36:56 · 1893 阅读 · 0 评论 -
字节跳动面试
一、Java基础 说一下面向对象和面向过程的区别 Java 语言有哪些特点 什么是 Java 程序的主类 应用程序和小程序的主类有何不同 重载和重写的区别 String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的? 在一个静态方法内调用一个非静态成员为什么是非法的? 在 Java 中定义一个不做事且没有参数的构造方法的作用 二、JVM 内存模型以及分区,需要详细到每个区..原创 2021-01-05 23:38:01 · 273 阅读 · 0 评论 -
微内核架构设计
简介:作为一名Java程序员,相信同学们都听说过微内核架构设计,也有自己的理解。那么微内核是如何被提出来的?微内核在操作系统内核的设计中又有什么作用?本文从插件化(Plug-in)架构的角度来诠释微内核架构设计,通过微内核架构和微服务架构的对比,分享其对微服务设计的参考意义。关于微内核架构设计现在比较热,听起来好像是操作系统内核相关的,作为Java程序员,操作系统内核那么遥远的事情,好像和我们没有什么关系。但是如果我说微内核其实就是插件化(Plug-in)架构,你一定会一脸疑惑,“你居然向Java程序转载 2020-12-15 22:02:26 · 628 阅读 · 0 评论 -
Springboot 常用注解
随着Spring及Spring Boot的发展,基于Java的配置已经慢慢替代了基于xml的配置形式。本篇文章为大家整理和简介Spring Boot中常用的注解及其功能。SpringBoot注解@SpringBootApplication:开启Spring Boot自动配置的核心注解,相关等同于@Configuration,@EnableAutoConfiguration和@ComponentScan三个注解同时使用。@EnableAutoConfiguration:SpringBoot自动配置开启注原创 2020-12-11 10:17:15 · 37 阅读 · 0 评论 -
聊聊Java8之后的JDK升级内容
Java都已经更新到SE12了..公司用的还是Java8,觉得是应该了解下SE8之后的更新内容了,从网上搜集整理了一下核心的功能更新文章概览JDKJDK 全称 Java Development Kit,是 Java 开发环境。我们通常所说的 JDK 指的是 Java SE (Standard Edition) Development Kit。除此之外还有 Java EE(Enterprise Edition)和 Java ME(Micro Edition...原创 2020-11-25 10:32:30 · 1278 阅读 · 0 评论 -
2020年字节跳动面试题
字节跳动一面面试题:自我介绍 聊聊项目,时间大概15种左右,面试官会根据项目的一些设计点来提问,提前做好准备,别自己坑了自己 分布式锁是锁住一部分还是整个系统,既然是锁住整个,为什么不用消息队列? 详细讲下怎么用 mq 实现的最终一致性,还有怎么利用的消息事务? tcp 于 http 的关系,如何基于 tcp 实现 http Java 打开一个 http 流不关闭的后果 io 流是基于抽象类还是接口实现的 数据库的乐观锁和悲观锁是什么 乐观锁实现原理,讲到一半,来写一个乐观锁吧 jav原创 2020-05-19 21:57:57 · 4459 阅读 · 0 评论 -
2016 JAVA面试精选
多线程、并发及线程的基础问题: 1)Java 中能创建 volatile 数组吗? 能,Java 中可以创建 volatile 类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到 volatile 的保护,但是如果多个线程同时改变数组的元素,volatile 标示符就不能起到之前的保护作用了。 2)volatile 能使得一个非原原创 2016-10-27 14:33:11 · 487 阅读 · 0 评论 -
收集了50道基础的java面试题
一、Java基础部分1、面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。2)继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定...转载 2018-05-22 11:56:18 · 285 阅读 · 0 评论 -
2018 某外企大公司Java面试题
最近接到了某个知名外企公司的面试电话,说实话去的路上心里很没底,整个第一轮面试持续了40分钟,问了许多技术问题,总结下来就是潜入深出,特别是对于Java底层实现和多线程实现上面特别深究,最终我也止步于第二轮面试,第二轮面试的问题实在是有点懵逼,下面就整理总结出我这次第一轮面试的问题和回答吧~1.Java 垃圾回收器1.5~1.8官方默认的有哪些?区别是什么?实现原理是什么?1.5说实话我不...原创 2018-12-28 17:48:46 · 2680 阅读 · 3 评论 -
阿里面试题汇总 2019持续更新
Volatile的内存语义:当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存。当读一个volatile变量时,JMM会把线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。Volatile的重排序1、当第二个操作为volatile写操做时,不管第一个操作是什么(普通读写或者volatile读写),都不能进行重排序。这个规则确保volat...转载 2019-02-27 18:23:36 · 2747 阅读 · 1 评论 -
Java 面试精选
1、面向对象的特征有哪些方面?封装,继承,多态和抽象。下面我们会逐个分析这些特性。封装 给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 下面列出了使用封装的一些好处: 通过隐藏对原创 2016-09-08 14:56:13 · 477 阅读 · 0 评论