![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
WQ同学
这个作者很懒,什么都没留下…
展开
-
线程的几种状态以及sleep/wait/yield/join的区别
一.线程通常有五种状态:新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待 获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进...转载 2020-04-14 22:24:50 · 631 阅读 · 0 评论 -
Happens-before原则
如果一个操作Happens-before另一操作,那么第一个操作结果对第二个操作可见.而且第一个执行操作顺序在第二个之前执行.两个操作之间存在Happens-before关系,并不意味着一定要按照Happens-before制定的顺序执行操作,如果重排序后与Happens-before顺序执行的操作结果一致,这样的重排序并不非法happen-before 原则规则:程序次序规则...转载 2020-04-12 19:37:28 · 201 阅读 · 0 评论 -
Java volatile 有什么作用
在由Java语言编写的程序中。有时候为了提高程序的执行效率,编译器会自己主动对其进行优化,把经常被訪问的变量缓存起来,程序在读取这个变量的时候有可能会直接从缓存(比如寄存器)中来读取这个值。而不会去内存中读取。这样做的一个优点是提高了程序的执行效率,但当遇到多线程编程时。变量的值可能由于别的线程而改变了,而该缓存的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。比如,在本次线程内,当...原创 2020-04-12 19:20:38 · 434 阅读 · 0 评论 -
单例模式与线程安全
单例模式我想是平时大家都会经常用到,需要用线程安全的方式去保证对象的唯一。通常会使用两种方式去创建单例模式:1.饿汉式单例这种方式实现起来比较简单 但是会造成资源的浪费如果不使用这个类的话。package Singleton; public class HungerSingleton { private static HungerSingleton singleton=ne...转载 2020-04-12 19:05:58 · 148 阅读 · 0 评论 -
Synchronized与Lock区别
Java里面的两种管程模型之前我们了解了Java里面的一种管程模型monitor,synchronized就是基于Monitor实现的管程模型,在这个模型里面,synchronized中用锁解决了资源互斥问题,然后提供了wait(),notify(),notifyAll() 一组方法解决了线程同步问题,Java里面另一种管程模型就是Lock+Condition, 在此模型中 Lock是用来解决资...原创 2020-04-12 18:23:07 · 329 阅读 · 0 评论 -
synchronized在JDK6做了哪些优化
记得在大学中那个时候刚开始学习java, 需要遇到多线程需要加锁的操作时,不管不顾全部都用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而...转载 2020-04-12 16:18:33 · 1410 阅读 · 0 评论 -
Java都有哪几种锁
一、公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。对于Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。对于Synchronized而言,也是一种非公平锁。由于其...转载 2020-04-11 21:51:56 · 208 阅读 · 0 评论 -
类加载器
虚拟机设计团队把加载动作放到JVM外部实现,以便让应用程序决定如何获取所需的类。Java语言系统自带有三个类加载器:Bootstrap ClassLoader :最顶层的加载类,主要加载核心类库,也就是我们环境变量下面%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclas...转载 2020-04-06 15:53:36 · 104 阅读 · 0 评论 -
Java类加载机制
java 类不能直接运行的需要经过一系列的步骤才能在JVM 中运行 废话不多说,直接来看吧。一、什么是类的加载在介绍类的加载机制之前,先来看看,类的加载机制在整个java程序运行期间处于一个什么环节,下面使用一张图来表示从上图可以看,java文件通过编译器变成了.class文件,接下来类加载器又将这些.class文件加载到JVM中。其中类装载器的作用其实就是类的加载。今天我们要讨论的就是这...转载 2020-04-06 14:58:00 · 104 阅读 · 0 评论 -
https SSL流程原理
前面两章介绍了,我们了解对称加密与非对称加密的特点和优缺点,以及数字证书的作用。https没有采用单一的技术去实现,而是根据他们的特点,充分的将这些技术整合进去,以达到性能与安全最大化。这套整合的技术我们称之为SSL(Secure Scoket Layer 安全套接层)。所以https并非是一项新的协议,它只是在http上披了一层加密的外壳。https的建立先看一下建立的流程图:这里把h...转载 2020-04-05 19:48:43 · 365 阅读 · 0 评论 -
Https的数字证书与数字签名
本文介绍一下为了解决非对称加密中公匙来源的不安全性。我们可以使用数字证书和数字签名来解决。1.数字证书的申请在现实中,有一些专门的权威机构用来颁发数字证书,我们称这些机构为认证中心(CA Certificate Authority)。我们(服务器)可以向这些CA来申请数字证书。申请的过程大致是:自己本地先生成一对密匙,然后拿着自己的公匙以及其他信息(比如说企业名称啊什么的)去CA申请数字证书...转载 2020-04-05 19:33:25 · 728 阅读 · 0 评论 -
https原理及其中所包含的对称加密、非对称加密
一、为什么要使用https使用https的原因其实很简单,就是因为http的不安全。当我们往服务器发送比较隐私的数据(比如说你的银行卡,身份证)时,如果使用http进行通信。那么安全性将得不到保障。首先数据在传输的过程中,数据可能被中间人抓包拿到,那么数据就会被中间人窃取。其次数据被中间人拿到后,中间人可能对数据进行修改或者替换,然后发往服务器。最后服务器收到数据后,也无法确定数据有没有被修改...转载 2020-04-05 16:37:18 · 551 阅读 · 0 评论 -
RPC与Http的区别
一.远程调用方式无论是微服务还是分布式服务(都是SOA,都是面向服务编程),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?常见的远程调用方式有以下几种:RPC:Remote Produce Call远程过程调用,类似的还有RMI(Remote Methods Invoke 远程方法调用,是JAVA中的概念,是JAVA十三大技术之一)。自定义数据格式,基于原生TCP通信,速度快,...转载 2020-03-31 00:13:39 · 981 阅读 · 0 评论 -
HTTP请求与响应步骤
HTTP请求与响应步骤http请求和响应,说白了就是计算机之间的问答对话。http请求是提问者,http响应是回答者。详细步骤如下所示。建立连接先解析DNS,例如把localhost变成ip(127.0.0.1),然后根据127.0.0.1和端口号8080(没有端口号则使用默认的端口)建立socket。也可以理解为通过“三次握手”建立TCP连接,确定通讯正常。发送请求命令sock...转载 2020-03-29 09:43:15 · 992 阅读 · 0 评论 -
详解TCP三次握手和四次挥手
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:讲解一下图中的几个概念:【1】seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,在一个1个TCP连接中传送字节流中国的每一个字节都按照顺序编号,此外序号是循环使用的【2】ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建立后所有的传送...原创 2020-03-29 09:25:22 · 449 阅读 · 0 评论 -
TCP和UDP的区别超完整版本
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接...转载 2020-03-26 00:00:20 · 8107 阅读 · 2 评论 -
理解 JAVA BIO与NIO、AIO
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。看起来比较难理解, 首先我们看一下 什么是同步,异步,阻塞,非阻塞就举个栗子,以银行取款为例:同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写);异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和...原创 2020-03-22 15:56:31 · 153 阅读 · 0 评论 -
Linux内核态与用户态
首先介绍一下特权级无论是不是Unix或者Linux,对于任何操作系统来说,创建一个新的进程都是属于核心功能,因为它要做很多底层细致地工作,消耗系统的物理资源,比如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等等,这些显然不能随便让哪个程序就能去做,于是就自然引出特权级别的概念,显然,最关键性的权力必须由高特权级的程序来执行,这样才可以做到集中管理,减少有限资源的访问和使用冲突。特...原创 2020-03-21 11:02:35 · 173 阅读 · 0 评论 -
招聘季让面试官颤抖吧之为什么阿里巴巴禁止直接使用日志系统中的 API
作为Java程序员,我想很多人都知道日志对于一个程序的重要性,无论是什么方面的应用。很多时候,日志可能是我们了解应用程序如何执行的唯一方式。所以,日志在开发过程中至关重要。一、常用日志框架j.u.lj.u.l是java.util.logging包的简称,是JDK在1.4版本中引入的Java原生日志框架。Java Logging API提供了七个日志级别用来控制输出。这七个级别分别是:...转载 2019-02-16 18:21:05 · 253 阅读 · 0 评论 -
招聘季让面试官颤抖吧之为什么String要设计成不可变的
这是一个老生常谈的话题(This is an old yet still popular question). 在Java中将String设计成不可变的是综合考虑到各种因素的结果,想要理解这个问题,需要综合内存,同步,数据结构以及安全等方面的考虑. 在下文中,我将为各种原因做一个小结。原文链接: Why string is immutable in Java ?一. 字符串常量池的需要字符串...原创 2019-02-16 19:41:10 · 322 阅读 · 0 评论 -
招聘季让面试官颤抖吧之HTTP2.0协议
Http协议,对于拥有丰富开发经验的程序员来说简直是信手拈来,家常便饭。虽然天天见,但是对于http协议的问题,可能很多人在没有积极准备的情况下,不一定能很好的回答出来。今天,我们就来讲讲http 2.0和之前版本的区别。一、HTTP定义HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。二、HTTP发展史...转载 2019-02-11 08:08:57 · 501 阅读 · 0 评论 -
招聘季让面试官颤抖吧之深入理解JVM之JVM内存区域
对于java 开发者来说jvm 只是是非常重要,可以帮助我们理解jvm 是如何工作的,了解Java内存分配的原理,这对于以后JAVA的学习会有更深刻的理解。 先来看看JVM运行时候的内存区域大多数jvm 将内存划分为head(堆),method Area(方法区) ,VM Strack 虚拟机栈,Native method Strack 本地方法栈,程序计数器。其中Method Area...转载 2019-02-17 00:40:27 · 281 阅读 · 0 评论 -
招聘季让面试官颤抖吧之深入理解JVM之JVM内存分配
上一篇文章说到了JVM 内存模型 本篇来讲一下 内存分配预备知识:1.一个Java文件,只要有main入口方法,我们就认为这是一个Java程序,可以单独编译运行。2.无论是普通类型的变量还是引用类型的变量(俗称实例),都可以作为局部变量,他们都可以出现在栈中。只不过普通类型的变量在栈中直接保存它所对应的值,而引用类型的变量保存的是一个指向堆区的指针,通过这个指针,就可以找到这个实例在堆区对应...转载 2019-02-17 01:04:53 · 287 阅读 · 0 评论 -
招聘季让面试官颤抖吧之双亲委派模型
大致就是:Java虚拟机先从最核心的API开始查找,防止不可信的类扮演被信任的类。启动类加载器 Bootstrap ClassLoader:加载<JAVA_HOME>\lib目录下核心库扩展类加载器 Extension ClassLoader:加载<JAVA_HOME>\lib\ext目录下扩展包应用程序类加载器 Application ClassLoader: 加...原创 2019-02-17 09:19:48 · 303 阅读 · 0 评论 -
招聘季让面试官颤抖吧之缓存三大问题及解决方案
1. 缓存来由随着互联网系统发展的逐步完善,提高系统的qps,目前的绝大部分系统都增加了缓存机制从而避免请求过多的直接与数据库操作从而造成系统瓶颈,极大的提升了用户体验和系统稳定性。2. 缓存问题虽然使用缓存给系统带来了一定的质的提升,但同时也带来了一些需要注意的问题。缓存穿透缓存穿透是指查询一个一定不存在的数据,因为缓存中也无该数据的信息,则会直接去数据库层进行查询,从系统层面来看...转载 2019-02-12 07:26:07 · 422 阅读 · 0 评论 -
spark submit参数及调优
两天面试两次被问到submit 参数调优这一块 ,平时都是直接使用没有深入去理解,有点被问的一脸懵的感觉,刚好周末来整理一下这一块的内容,充实一下。首先学习当然要去官网了这里是官网给的一个例子:./bin/spark-submit \ --class &amp;amp;lt;main-class&amp;amp;gt; \ --master &amp;amp;lt;master-url&amp;amp;gt; \ --depl原创 2019-02-23 15:59:52 · 434 阅读 · 0 评论 -
spark推测执行
一. 简介再我们run spark job 的时候 有时候可能会遇到 很少一部分task 运行的时候出错了或者卡住了。又不想直接重新run 一下 这样太不方便了而且还需要手动参与。spark 为了这样的情况提供了了一种机制叫推测执行这种机制默认是关闭的需要手动开启。二. 配置设置 spark.speculation=true即可额外设置1. spark.speculation.inte...原创 2019-02-23 16:36:40 · 651 阅读 · 0 评论 -
招聘季让面试官颤抖吧之一致性hash
一.简介首先以历史的角度和项目发展的角度来分析,探讨一下到底什么是Hash一致性算法!二.Redis集群的使用我们在使用Redis的时候,为了保证Redis的高可用,提高Redis的读写性能,最简单的方式我们会做主从复制,组成Master-Master或者Master-Slave的形式,或者搭建Redis集群,进行数据的读写分离,类似于数据库的主从复制和读写分离。如下所示:同样类似于数据...转载 2019-02-13 08:20:33 · 432 阅读 · 0 评论 -
招聘季让面试官颤抖吧之sql实现分组topN
之前被问到了如何用纯的sql 实现分组top 尽然写不来了,也是大写的尴尬。回来后特地复习了一下sql 知识首先我们创建一张表CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `course` varchar(20) DEFAULT NUL...原创 2019-02-24 23:12:19 · 467 阅读 · 1 评论 -
招聘季让面试官颤抖吧之linux用户操作
今天被问到linux 用户操作竟然忘记了,明明之间还用过大写的尴尬。下面主要复习一下linux 用户操作。Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。每...原创 2019-02-21 00:00:48 · 136 阅读 · 0 评论