面试准备
为寒假回去后的面试做准备,记一下自己觉得重要的知识点也顺便复习。
特别重要::由于有些知识点参考了很多篇博客和书籍,害怕被骂抄袭就设置成粉丝可见了。包括各个专栏如果是粉丝能看到全部文章(害怕被骂。。)
不穿鞋的猫丶
这个作者很懒,什么都没留下…
展开
-
百度面经
http与https的区别? http通过明文传输,不提供任何方式的加密,所以不是那么的安全,而https是带有ssl的http。增加了加密和认证机制,所以更加安全。http的端口号是80,https的端口号是443。https需要购买证书,并且https会消耗更多资源tcp三次握手,为什么是三次? 第一次握手:客户端发送带有syn的数据包给服务端请求建立连接。(假设sy...原创 2020-04-13 19:38:41 · 200 阅读 · 1 评论 -
fork/join
fork/join框架? 这是一个用于并行执行任务的框架,首先通过fork类来对大任务进行分割,直到子任务足够小,然后执行任务并合并结果。分割的子任务是分别放在双端队列里的,然后启动线程从队列中获取任务并执行工作窃取算法? 该框架使用了工作窃取算法。 也就是当我们需要做一个比较大的任务时,可以把任务分割为若干个互不依赖子任务,为了减少线程间的竞争,会将子任务放到不...原创 2020-04-08 14:22:30 · 132 阅读 · 0 评论 -
进程调度算法
什么是进程调度算法? 根据系统的资源分配策略所规定的资源分配算法1.时间片轮转调度算法? 给每个进程固定的执行事件,根据进程到达的先后顺序让进程在单位时间片内执行,当时间片消耗完成后无论是否执行完成都会执行下一个进程,属于抢占式调度。适用于分时系统2.先来先服务调度算法? 根据进程到达的先后顺序执行进程,不考虑等待时间和执行事件,会产生饥饿现象,...原创 2020-04-03 15:03:56 · 498 阅读 · 0 评论 -
Linux
用linux命令,统计文档中出现字符串的次数? awk命令?awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk...原创 2020-03-30 20:05:54 · 108 阅读 · 0 评论 -
FutureTask
Future接口和实现Future接口的FutureTask类,代表异步计算的结果FutureTask? FutureTask除了实现Future接口外,还实现了Runnable接口,因此,FutureTask可以交给Executor执行,也可以由调用线程直接执行(FutureTask.run())。FutureTask的三种状态:未启动,已启动,已完成。 当Future...原创 2020-03-30 20:05:32 · 215 阅读 · 0 评论 -
redis
为什么要使用redis?高性能:假如用户第一次访问数据库中的某些数据,会比较慢,将用户访问的数据存在缓存中,下一次访问就可以直接从缓存中获取,操作缓存就是直接操作内存,所以速度快高并发:直接缓存操作能够承受的请求远远大于直接访问数据库,所以我们可以考虑把数据库中的部分数据转移到缓存中,这样用户的一部分请求会直接到缓存而不用去数据库redis的好处redis被称为分布式缓存,在...转载 2020-02-09 21:31:38 · 147 阅读 · 0 评论 -
RPC
什么是RPC?rpc远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC能够使程序像访问本地资源一样去访问远程资源,简单来说,RPC就是从一台机器上通过参数传递的方式去调用另一台机器上的函数或方法并得到返回值RPC架构组件?1)客户端(client):服务调用方(服务消费者)2)客户端存根(client stub):存放服务端地址...转载 2020-02-03 13:19:00 · 209 阅读 · 0 评论 -
Dubbo
dubbo是什么?是阿里巴巴开源的基于Java的高性能RPC分布式服务架构核心能力:面向接口的远程方法调用,智能容错和负载均衡,服务自动注册和发现为什么要用Dubbo?使用dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用,灵活扩展,使前端应用能够响应多变的市场需求dubbo与Spring Cloud的区别?两个没有关联...原创 2020-02-03 15:34:15 · 278 阅读 · 0 评论 -
智力题+场景题
我原以为自己已经准备得差不多了,结果还发现居然还有智力题这种东西。。可我智商本来就不够用,,,还来智力题岂不是要凉凉。。。没办法,,只有提前去了解一些常用的智力题了。哦,,还有场景题,我的天。。哭了1. 100层楼,给你两个鸡蛋,怎么确定在哪一层是摔坏的,而在那一层之下不会碎? 1)首先假设在X层碎,如果碎了,就将第二个鸡蛋从1~x-1进行遍历的摔,如果没有碎,那么第二次...原创 2020-03-17 21:20:09 · 8095 阅读 · 1 评论 -
操作系统
进程和线程的区别?进程是系统进行资源调度和分配的基本单位,实现了操作系统的并发线程是进程的子任务,是cpu调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发一个程序至少有一个进程,一个进程至少有一个线程,线程依赖于进程每个进程都有独立的内存空间,而多个线程共享相同的内存空间线程同步的方式?互斥量 synchronized/Lock信号量 se...原创 2020-02-21 22:48:47 · 556 阅读 · 0 评论 -
java基础
重载和覆盖的区别?重载是一个类中多态的一种表现,指的是一个类中定义了多个同名的方法,他们要么参数类型不一样,要么参数个数不一样,要么顺序不一样注意:1)重载是通过不同方法的参数来区分的 2)不能通过方法的访问权限,返回值类型或抛出的异常类型来重载 3)对于继承,如果父类的方法是私有的,就不能再子类中进行重载,如果子类也定义一个同名的方法,那么是一个...原创 2020-02-21 22:27:37 · 130 阅读 · 0 评论 -
String,StringBuilder,StringBuffer的区别
执行速度上:StringBuilder>Stringbuffer>StringString最慢的原因:String是字符串常量,其他两个都是字符串变量,String对象一旦创建不可更改线程安全上:StringBuilder线程不安全,StringBuffer线程安全StringBuffer中很多方法带有synchronized关键字,可以保证线程安全,如果处理多线程就...转载 2020-02-21 22:16:33 · 82 阅读 · 0 评论 -
ZooKeeper
1.ZooKeeper是怎么保证事务的顺序一致性的?ZooKeeper采用了递增的事务id来标识,所有的proposal都在被提出的时候加上了zxid,当产生proposal的时候,会根据数据库的两阶段过程,首先向其他的server发出事务执行请求,如果超过半数的机器都能够执行成功,那么会开始执行ZooKeeper如何选取主leader的?当leader崩溃或者leader失去大...原创 2020-02-20 23:25:53 · 115 阅读 · 0 评论 -
分布式事务
什么是分布式事务?事务的每个操作步骤都位于不同的节点上,但是还是要保证事务的ACID特性产生原因?分布式系统下,有多个服务器,多个数据库解决方案:1)两阶段提交协议2)消息中间件3)本地消息表消息中间件过程?1)向mq发送一个准备消息,如果发送失败则直接取消操作2)消息发送成功后,接着执行本地事务,成功就告诉mq确认消息,失败则告诉mq回滚...原创 2020-02-18 23:04:53 · 91 阅读 · 0 评论 -
消息队列-RabbitMQ
为什么要使用消息队列?1.通过异步处理提高系统性能(削峰,减少响应所需时间)2.降低系统耦合性怎么提高系统性能的?在不使用消息队列的时候,用户的请求直接写入数据库,在高并发的情况下数据库压力剧增,使得响应速度变慢。但是在使用消息队列后,用户的请求数据发送给消息队列之后立即返回,再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列服务器处理速度快于数据库(...原创 2020-02-17 23:18:45 · 193 阅读 · 0 评论 -
分布式锁
一种基于redis的实现的分布锁叫做RedLock,此种方式比原来的单节点的方法更安全,他可以保证以下特性:1.安全特性:互斥访问,即永远只有一个client能拿到锁2.避免死锁:最终client都可能拿到锁,不会出现死锁的情况3.容错性:只要大部分redis节点存活就可以正常提供服务怎么在单节点上实现分布式锁?set resource_name my_random_va...原创 2020-02-17 22:39:48 · 84 阅读 · 0 评论 -
Linux常用命令
ls 显示文件或目录 -l 列出文件详细信息 -a 列出当前目录下所有文件和目录mkdir 创建目录 -p 创建目录,若无父目录,则创建pcd 切换目录touch 创建空文件cat...原创 2020-02-08 17:59:25 · 116 阅读 · 0 评论 -
计算机网络
1.HTTP和HTTPS的区别http协议运行在tcp上,明文传输,客户端与服务端都无法验证对方的身份https是带有SSl的http,运行于ssl上,ssl运行于tcp上,是添加了加密和认证机制的http。端口不同:http用的80,https用的443资源消耗:https由于加密解密会消耗更多的cpu和内存资源开销:https需要证书,证书需要买2.对称加密与非对...原创 2020-02-08 17:21:48 · 284 阅读 · 0 评论 -
类加载与双亲委托
在Java语言里面,类型的加载,连接和初始化过程都是在程序运行期间完成的,虽然会令类加载时稍微增加一些性能开销,但是为Java应用程序提供了高度的灵活性为什么Java天生就可以动态扩展?依赖运行期加载和动态连接类加载的生命周期?加载,验证,准备,解析,初始化,使用,卸载 (验证,准备,解析)称为连接加载,验证,准备,初始化,卸载的顺序的固定的,解析某些情况下可以在初始...原创 2020-02-08 16:18:53 · 148 阅读 · 0 评论 -
Lock与synchronized
什么是Lock?Lock接口提供了与synchronized关键字类似的同步功能,只是在使用时显示地获取和释放锁,虽然缺少了隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性,可中断的获取锁以及超时获取锁等多种synchronized不具备的同步特性使用synchronized关键字将会隐式地获取锁,但是扩展性没有显示的锁好。Lock的经典使用方式:在finall...原创 2020-02-08 13:26:52 · 126 阅读 · 0 评论 -
Volatile
什么是Volatile?Java语言机制提供了一种稍弱的同步机制,即Volatile变量,用来确保将变量的更新操作通知到其他线程,当把变量声明为Volatile后,编译器与运行时都会注意到这个变量是共享的,因此不会把对该变量的操作与其他内存操作一起重排序。Volatile变量不会被缓存在寄存器或对其他处理器不可见的地方,因此读取Volatile类型的变量总会返回最新写入的值Volat...原创 2020-02-08 12:41:47 · 191 阅读 · 0 评论 -
ThreadLocal
先看一下ThreadLocal类在并发编程实战中的说法:这个类能使线程中的某个值与保存值的对象关联起来。ThreadLocal提供了get与set等访问接口或方法,这些方法为每个使用该变量的线程存有一份独立的副本,因此get总是返回由当前执行线程在调用set时设置的最新值。ThreadLocal类的用法呢?1)通常用于防止对可变的单实例变量或全局变量进行共享。2)当某个频繁执...原创 2020-02-06 14:15:05 · 212 阅读 · 0 评论 -
单例模式
什么是单例模式,为什么会有单例模式?单例模式主要是为了避免因为创建了多个实例造成的资源浪费,使用单例模式能够保证整个应用只有一个实例(可以保证类在内存中的对象的唯一性)单例模式的设计思想?1)不允许其他程序new对象2)在该类中创建对象3)对外提供一个可以让其他程序获取该对象的方法设计思想的代码实现:1)私有化该类的构造函数(那么其他类就不能new出一个该类...原创 2020-02-06 13:14:43 · 184 阅读 · 0 评论 -
synchronized
synchronized的作用:1)原子性:确保线程互斥的访问同步代码2)可见性:保证共享变量之间的修改及时可见(通过java内存模型中的‘对一个变量unlock之前,必须要同步到主内存中’)3)有序性:有效解决重排序问题,即一个unlock操作happen-before后面对同一个锁的lock操作synchronized实现同步的基础:java中每一个对象都可以作为锁...原创 2020-01-31 13:53:16 · 150 阅读 · 0 评论 -
equals和hashcode
equals()?Object的equals方法和"=="是一样的,没有区别,即两个对象的比较是比较他们的栈内存中存储的内存地址。而String类,Integer类重写了equals方法才使得equals()和"=="不同,他们比较的是值相不相等。当你自己创建一个类时如果想要实现不同的等于比较,必须重写equals()方法重写equals方法的思路:判断是否为null->判断比...原创 2020-01-30 13:38:10 · 80 阅读 · 0 评论 -
线程Thread
什么是线程?线程是操作系统能够进行运算调度的最小单位,被包含在进程中。线程也叫作轻量级进程,在一个进程里可以创建多个线程,每个线程都有独立的计数器,堆,栈和局部变量,并且能够访问共享的内存变量线程和进程的区别?线程是一个轻量级进程,一个进程可以有多个线程,各条线程能够执行不同的任务,不同的进程使用不同的内存空间,而所有的线程共享相同的内存空间如何在java中实现线程?...原创 2020-01-30 12:38:27 · 125 阅读 · 0 评论 -
spring IOC与AOP
spring是什么?spring是一个轻量级的ioc和aop容器框架常见的配置方式:基于XML配置,基于注解的配置,基于java的配置spring的优点?1)spring属于低侵入式设计,对代码的污染极低2)spring的DI机制将对象之间的依赖关系交由框架处理,降低组件的耦合性3)spring提供了AOP技术,支持将一些通用任务集中管理,从而得到更好的复用4)s...转载 2020-01-30 10:23:36 · 384 阅读 · 0 评论 -
InnoDB多版本并发控制(MVCC)
Mysql的大多数事务性存储引擎的实现都不是简单的行级锁。基于提升并发性能的考虑,他们一般都实现了多版本并发控制可以认为MVVC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低,虽然实现机制有所不同,但大都实现了非阻塞的读操作,写操作也只是锁定必要的行MVCC的实现是通过保存数据在某个时间点的快照来实现的。也就是不管执行多长时间,每个事务所看到的数据都是一致的。根据...原创 2020-01-30 10:23:50 · 177 阅读 · 0 评论 -
Mysql数据库相关
存储引擎MyISAM 和InnoDB区别?1)InnoDB支持事务,MyISAM不支持事务2)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用3)InnoDB支持外键,MyISAM不支持外建4)Mysql5.5后,InnoDB是默认引擎5)MyISAM支持全文索引,InnoDB不支持全文索引6)InnoDB不保存表的总行数,可以使用...原创 2020-01-30 10:24:02 · 192 阅读 · 0 评论 -
悲观锁和乐观锁
悲观锁?总是假设最坏的情况,每次去拿数据的时候都会认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(贡献资源每次只给一个线程使用,其他线程阻塞,用完之后再把资源转让给其他线程) Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现乐观锁?总是假设最好的情况,每次去拿数据都认为别人不会修改,所以不会上锁,...原创 2020-01-30 10:24:13 · 114 阅读 · 0 评论 -
07-线程池及其原理
线程池的好处?在开发过程中,合理地使用线程池,能够带来3个好处:a:降低资源消耗 通过重复利用已经存在的线程降低线程创建和销毁线程造成的消耗b:提高响应速度 当任务到达时,任务可以不需要等待线程创建就可以立即执行c:提高线程的可管理性 线程是稀缺资源,如果无限制地创建,不仅会消耗系统系统资源,还会降低系统的稳定性线程池的工作原理?1)判断核心线程池是否已满...原创 2020-01-30 10:24:25 · 135 阅读 · 0 评论 -
06-垃圾回收器
什么是垃圾回收器?垃圾回收器是垃圾回收算法的具体实现,不同商家,不同版本的jvm所提供的垃圾收集器可能会存在很大的差别新生代的垃圾回收器:Serial,parNew,Parallel Scavenge老年代的垃圾回收器:CMS,Serial Old,Parallel Old整堆收集器:G1垃圾回收器并行垃圾收集?指多条垃圾收集线程并行工作,但此时用户任然处于等待...原创 2020-01-30 10:24:36 · 145 阅读 · 0 评论 -
05-jvm内存结构
java运行时内存划分?线程共享的:堆区,方法区线程私有的:程序计数器,虚拟机栈,本地方法栈程序计数器:每一个线程都有一个程序计数器,是一个指针,指向方法区中的方法字节码,在虚拟机的概念模型里,字节码解释器工作就是通过改变程序计数器的值来实现的,分支,循环,跳转,异常处理,线程恢复都需要依赖程序计数器。程序计数器记录的是正在执行的虚拟机字节码指令的地址本地方法栈:本地方...原创 2020-01-30 10:24:48 · 134 阅读 · 0 评论 -
04-Error和Exception
Error和Exception都是继承自ThrowableError是发生在jvm层面的错误,不可捕捉到,无法采取任何操作,最多只能显示出错误信息Exception是可恢复的异常,可以捕捉到,并且可以进行操作主要有两类主要的异常:RuntimeException和checkedExceptionCheckedException是非运行时异常,例如I/O异常,SQL异常,这种类...原创 2020-01-30 10:25:00 · 123 阅读 · 0 评论 -
03-接口和抽象类
接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类,抽象类中可以有静态的main方法定义一个abstract class,该class中可以没有一个抽象方法,如果一个类继承于抽象类,要么该类也是abstract类,可以不用实现父类中的abstract方法,要么子类实现了父类的所有抽象类。所以不能抽象构造方法或者静态方法,因为构造方法和静态方法不能再子类中实现,被final修饰的类是不能...原创 2020-01-30 10:25:08 · 109 阅读 · 0 评论 -
02-ArrayList和LinkedList
ArrayList?基于数组实现的,从名称可以看出来,既然是基于数组实现,当然也就有数组的特点了,查找速率非常快,在最后位置添加元素也特别快。当然也有有了数组的缺点,从某个位置删除元素或者添加元素就会慢一些,因为那个位置之后的所有元素都需要向前或者向后移动位置,在某个位置添加元素时,是用到复制覆盖方法,将某个位置(包括该位置)以及后面的元素都从该位置复制一遍,相当于此时整个数组有两个i位置的同...原创 2020-01-30 10:25:22 · 142 阅读 · 0 评论 -
准备01-HashMap与ConCurrentHashMap
为什么不用HashTable?虽然HashTable是线程安全的,里面的每个方法都有Synchronized,但是正是这样极大地增加了开销,因为锁住了整个HashTable,所以在多线程里面使用ConCurrentHashMap来代替,而且HashTable的key和value都不能为null 而HashMap可以存储null键和null值,虽然不是线程安全的,但是在单线程环境下速度比Has...原创 2020-01-30 10:25:33 · 206 阅读 · 0 评论