面经
-玫瑰少年-
别管,拼!
展开
-
建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。类型:创建类模式类图:四个要素产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。建原创 2021-08-11 20:34:45 · 79 阅读 · 0 评论 -
zk分布式锁
基于ZooKeeper的分布式锁Zookeeper 是一个分布式的,开放源码的的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop、HBase的重要组件。是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。Zookeeper是架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端可以询问另一台Zookeeper主机。Zookeeper节点将它们的数据存储在一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户.原创 2021-08-11 09:55:13 · 1047 阅读 · 0 评论 -
表锁和行锁
表锁和行锁转载 2021-04-20 16:21:41 · 76 阅读 · 0 评论 -
进程状态及其状态转换图
进程由数据、程序、PCB(进程控制块)组成进程状态及其状态转换图转载 2021-04-19 17:37:52 · 623 阅读 · 0 评论 -
为什么redis没有使用多线程?
单线程编程容易并且更容易维护;Redis 的性能瓶颈不再 CPU ,主要在内存和网络;多线程就会存在死锁、线程上下文切换等问题,甚至会影响性能。JavaGuide转载 2021-04-19 15:52:23 · 435 阅读 · 0 评论 -
线程间同步方式
线程间同步方式转载 2021-04-19 15:07:38 · 71 阅读 · 0 评论 -
MyBatis中#{}和${}的区别详解 区别
MyBatis中#{}和${}的区别详解转载 2021-04-16 14:44:34 · 111 阅读 · 0 评论 -
一致性哈希算法
使用普通的哈希算法出现的问题;当缓存服务器数量发生变化时,由于缓存位置的改变,会引起缓存的集体失效(缓存雪崩),可能会引起整体系统压力过大而崩溃(大量缓存同一时间失效)。一致性哈希算法:服务器的数量如果发生改变,并不是所有缓存都会失效,而是只有部分缓存会失效,前端的缓存仍然能分担整个系统的压力,而不至于所有压力都在同一时间集中到后端服务器上。一致性哈希算法...转载 2021-04-16 11:44:42 · 62 阅读 · 0 评论 -
http短连接和长连接、TCP/IP协议
http短连接和长连接对于HTTP 1.0的http标准而言,默认连接是短连接,啥叫短连接?就是服务器当发送完最后一个字节的数据之后将关闭连接,这样,如果客户端再发送数据给服务器,将直接丢弃。即使此时客户端还有这样的结构,但是我们说连接已经关闭或者已经断了。那客户端知不知道啥时候服务器的连接关闭?不知道,双方可以在任何时候来关闭自己的连接而没有必要通知对方。不过,对于短连接而言,通知不通知也没有意义了。那短连接的弊端,大家可能都已经知道了,如果对一个服务器要连续发送多个请求,还需要为每次请求建立新的连原创 2021-04-16 10:24:42 · 201 阅读 · 0 评论 -
TopK算法
TopK算法原创 2021-04-15 09:39:27 · 2795 阅读 · 0 评论 -
多叉树的先序遍历、后序遍历、层次遍历
package com;import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;import java.util.List;import java.util.Queue;/** * @author liushihao <liushihao@kuaishou.com> * Created on 2021/4/12 4:38 下午 */public class TreeTest原创 2021-04-12 17:56:02 · 942 阅读 · 0 评论 -
DNS
DNS世界上有13组根服务器,150台根服务器,这些服务器负责着域名的转发例如访问www.baidu.com,我们先给就近的一台根服务器发送请求,根服务器看到我们访问的域名的后缀是.com,于是将.com的服务器告诉我们,然后我们去访问.com服务器。根服务器记录着每个域服务器的ip地址,这样我们才能去访问到对应的域服务器(.com、.cn、.net域名服务器)。以上讲的一级域名、二级域名、三级域名并不叫DNS服务器。为什么有DNS服务器这个中间过程呢?DNS服务器有高速缓存,DNS服务器会在高原创 2021-04-12 10:20:24 · 681 阅读 · 0 评论 -
TCP拥塞控制
讲解视频其实可以类比早高峰,早高峰车比较多,需要三车道才能走得开,但实际上只有两车道。(需要三台路由器,但只有两台路由器)这就需要交警进行交通控制(拥塞控制)。如果不进行交通控制,交通就会越来越堵。(如果不进行拥塞控制,网络的吞吐量就会随输入负载的增大而下降)但其实拥塞控制很难设计的,因为这是一个动态的问题。转发节点缓存不够大造成分组的丢失,但分组的丢失是网络发生拥塞的征兆,而不是原因。TCP的四种拥塞控制算法:1、慢开始2、拥塞避免3、快重传4、快恢复使用快重传算法可以让转载 2021-04-04 21:26:20 · 133 阅读 · 0 评论 -
线程间通信的5种方式
题目:要求三个线程A、B、C按照顺序的输出A、B、C。1. volatile关键字(保证内存可见性)基于 volatile 关键字来实现线程间相互通信是使用共享内存的思想,大致意思就是多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。package com.kuang.xianchengjiantongxin;import java.util.concurrent.TimeUnit;public class volatileTest { static原创 2021-03-10 11:49:34 · 3181 阅读 · 1 评论 -
在项目中trycatch过哪些异常
SQLExceptiontry{ … //JDBC调用 s.executeQuery(sql); … }catch(SQLException ex){ throw new DataAccessException(“数据库查询失败”+sql,ex); } } ParseExceptiontry{ SimpleDateFormat format = new SimpleD原创 2021-03-02 20:33:32 · 238 阅读 · 0 评论 -
redis缓存预热
缓存预热1、定义缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!2、解决方案1)直接写个缓存刷新页面,上线时手工操作下。2)数据量不大,可以在项目启动的时候自动进行加载。3)定时刷新缓存。...转载 2021-03-02 17:56:28 · 1603 阅读 · 0 评论 -
小米(实习一面之牛客面经)
序列化:将java对象转化为字节序列的过程。反序列化:将字节序列转化为java对象的过程。 == 与equals方法有什么区别?== 操作符专门用来比较两个变量的值是否相等,也就是用来比较变量所对应的内存中所存储的数值是否相同。如果要比较两个基本类型的数据或者两个变量是否相等,只能用== 操作符equals方法是用来比较两个独立对象的内容是否相同?在实际开发中,我们经常使用比较传递进来的字符串内容是否相等。注意:字符串的比较基本上都是使用equals方法。总结:是用于比较两个变量的值.原创 2020-11-04 09:38:04 · 371 阅读 · 0 评论 -
续科天下(实习笔试题)
简答题:当你在百度搜索框输入一个关键字到搜索结果出来,百度的后端都做了什么?搜索引擎工作原理:当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果。深究其背后的故事,搜索引擎做了很多事情。在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关键词,而每个关键词又对应着很多网址,这些网址是百度程序从茫茫的互联网上一点一点下载收集而来的,这些程序称之为“搜索引擎蜘蛛”或“网络爬虫”。这些勤劳的“蜘蛛”每天在互联网上爬行,从一个链接到另一个链接,下载其中的内容,进行分析提炼,原创 2020-11-04 09:40:42 · 202 阅读 · 1 评论 -
Spring的AOP、IOC、DI
spring的IOC和AOPAOP:作用:给容器中的组件做增强编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。对某些方法要做参数校验、或者验证是否登录。在往常OOP中,有多少个接口就要对多个个接口copy多少次,它导致了大量代码的重复,而不利于各个模块的重用。而在AOP中,就相当于提出一个公共方法,每个接口都来调用它。之前做增强是通过oop(面向对象)编程,继承父类(静态代理)或传入委托类对象(动态代理)。aop是给容器中的组件批量生成代理对象,把要增强的方法放到一.原创 2020-11-04 09:40:11 · 306 阅读 · 0 评论 -
StringBuffer的delete方法与deleteCharAt方法
delete方法与deleteCharAt两个方法都是用来删除StringBuffer字符串指定索引字符的方法,delete(int a,int b)有两个参数,使用时删除索引从a开始(包含a)到b(不包含b)的所有字符;deleteCharAt(int a)只有一个参数,使用时删除索引为a的字符;...原创 2020-11-03 09:37:59 · 1431 阅读 · 0 评论 -
HTTP与HTTPS的区别、http1.0、http1.1、http2.0的区别
HTTP与HTTPS的区别转载 2020-11-04 09:43:37 · 238 阅读 · 0 评论 -
京东数科(大数据部门二面)
算法题:青蛙跳台阶LRU缓存机制剑指 Offer 30. 包含min函数的栈创建bean对象的三种方式SpringBoot自动装配Aop如何处理全局异常堆页面置换算法银行家算法ACID、事务的四种经常出现的问题。...原创 2020-11-04 09:43:18 · 464 阅读 · 0 评论 -
TCP三次握手和四次挥手
TCP三次握手和四次挥手转载 2020-11-04 09:41:24 · 88 阅读 · 0 评论 -
简单说一下SpringMVC
SpringMVC是基于servlet开发(底层是用Servlet开发的),面向软件开发人员,我们可以不再去使用servlet。SpringMVC提供了一个统一的处理器DispatcherServlet客户端发送请求给DispatcherServlet,DispatcherServlet根据HandlerMaping(映射)去找到相应的Handler,其中HandlerInterceptor起到拦截器的作用,类似于JavaEE阶段的Filter。然后利用HandlerAdapter去做一些适配性的工作原创 2020-11-04 09:45:00 · 450 阅读 · 0 评论 -
Tomcat处理HTTP请求的过程
原创 2020-11-04 09:45:55 · 220 阅读 · 0 评论 -
前后端分离
浏览器发送一个请求,DNS域名服务首先将域名转换成ip,根据ip地址去访问前端服务器。前端服务器接收请求并解析请求,a.返回html、css、js代码以及vue对象代码等给浏览器,b.并告诉浏览器数据的地址。浏览器进行解析html、css、js代码,生成一个页面的大致框架。浏览器进行dom解析(解析vue对象代码)的时候生成对象在浏览器里发起请求调用浏览器向后台获取数据(根据前端服务器返回的数据的地址)-浏览器发起请求获取返回值(java后台提供)把返回值又给到刚刚调用浏览器的对象-对象拿来使用原创 2020-11-04 09:44:45 · 124 阅读 · 0 评论 -
JDBC、数据库连接池
JDBC用 Java 程序操作数据库的过程和之前的操作很类似,分为以下几个步骤:注册驱动建立连接获取 SQL 语句执行平台执行 SQL 语句处理结果退出 (关闭连接,释放资源)public void testGetConnection1() throws SQLException { // 注册驱动 Driver driver = new com.mysql.jdbc.Driver(); // 建立连接 String url = "jdbc:mysql://local原创 2020-11-04 09:46:45 · 71 阅读 · 0 评论 -
泛型
泛型的好处:a. 提高了程序的安全性b. 将运行期遇到的问题转移到了编译期c. 省去了类型强转的麻烦public class GenericDemo1 { public static void main(String[] args) { List list = new ArrayList(); list.add("hello"); list.add("world"); list.add("java"); //编原创 2020-11-04 09:39:45 · 80 阅读 · 0 评论 -
static的用法有哪些?
static的用法有哪些?a. 静态代码块:对类进行初始化,类加载的时候执行,并且只执行一次b. 静态变量:该变量是类所有,被该类的所有成员共享c. 静态方法d. 静态内部类e. 静态导入:导入静态方法package com.cskaoyan.jdk5;import java.util.Date;//静态导入//使用Math的所用方法用import static java.lang.Math.*;//使用Math的某一个方法用import static java.lang.Math.s原创 2020-11-04 09:39:27 · 289 阅读 · 0 评论 -
谈一下你对注解的理解
注解体的定义格式: @interface 注解名 { 返回值类型 方法名1(); // 这就是某种类型额外信息中的,一条信息的标准化的格式定义 // 方法名代表一条信息的名字 // 返回值类型表示该条信息数据取值类型 返回值类型 方法名2(); ... }和Java程序的一致,注解有3种保留级别:SOURCE:注解将被编译器丢弃(class文件中没有)CLASS:注解在class文件中可用,但会被JVM丢弃(内存没原创 2020-11-04 09:39:11 · 239 阅读 · 0 评论 -
Spring常用注解总结
@SpringBootApplication这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。@Autowired我们一般使用 @Autowired 注解让 Spring 容器帮我们自动装配 bean。要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,可以采用以下注解实现:@Component :通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。原创 2020-10-29 15:05:15 · 722 阅读 · 1 评论 -
百度一面
用过哪些线程池,并说一下各自的特点。Java四种线程池1.newCachedThreadPool创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程, 那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。2.newFixedThreadPool创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池原创 2020-11-04 09:38:48 · 242 阅读 · 0 评论 -
京东数科(大数据部门实习一面)
sql语句中select、 from、 where、 group by 、having、 order by的执行顺序分析前面从from(表)where(按条件取出数据)goup by(再对取出的数据进行分组)having(分组之后再过滤得到最新数据集)select(按照设置列从数据集里面取出数据)order by(对取出的数据进行排序)所以执行顺序:from—where–group by—having—select—order by反射的第一步是获取class对象,那如何获取class对象?通过对原创 2020-11-04 09:45:39 · 545 阅读 · 0 评论 -
京东数科(实习一面)
数据库、索引、范式线程通信反射快速排序树的最大深度二叉搜索树原创 2020-11-04 09:38:21 · 338 阅读 · 0 评论 -
东方国信(实习一面)
wheres=s+“hello”spring中哪些注解,注解的功能说一下。项目中用到了事务吧,怎么实现的?线程池。抽象类和接口的区别。原创 2020-11-04 09:45:12 · 1142 阅读 · 0 评论 -
小米(实习一面)
我的面经:HashMap的底层实现原理是什么?jdk8做了哪些优化?在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构。JDK 1.8 之所以添加红黑树是因为一旦链表过长,会严重影响 HashMap 的性能,而红黑树具有快速增删改查的特点,这样就可以有效的解决链表过长时操作比较慢的问题。上面介绍了 HashMap 的组成结构,但面试官想要知道的远远不止这些,和 Hash原创 2020-11-04 09:37:35 · 334 阅读 · 2 评论 -
string和stringbuffer和stringbuilder的区别
原创 2020-10-16 09:44:53 · 111 阅读 · 0 评论 -
为什么要重写hashCode()方法和equals()方法以及如何进行重写?
首先,为什么要重写equals()方法。我们在定义类时,我们经常会希望两个不同对象的某些属性值相同时就认为他们相同,所以我们要重写equals()方法,按照原则,我们重写了equals()方法,也要重写hashCode()方法。Java中的超类Object类中定义的equals()方法是用来比较两个引用所指向的对象的内存地址是否一致。a. 在java应用程序运行时,无论何时多次调用同一个对象时的hashCode()方法,这个对象的hashCode()方法的返回值必须是相同的一个int值;b. 如果两个转载 2020-10-15 22:38:50 · 174 阅读 · 0 评论