![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java面试
文章平均质量分 87
总结面试
兴趣使然的CV工程师
摆烂高手
展开
-
57.整理网络编程
最基本的Socket模型客户端和服务器之间的通信,依靠socket编程,它支持跨主机之间的通信,双方通信之前,各自需要创建一个socket,双方读取和发送数据的时候,都通过各自的socket,就想一根网线一样,一头插在客户端,一头插在服务端,然后进行通信在创建socket的时候可以指定网络层使用IPV4还是IPV6,传输层使用TCP还是UDP,服务器的程序需要先跑起来,然后等待客户端的连接和数据,以下是基于TCP的Socket编程:服务端首先调用socket函数,创建网络协议为IPV4,以及传输原创 2022-05-13 18:00:19 · 416 阅读 · 0 评论 -
56.整理JavaSE
封装继承多态的详细理解封装将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型的内部,尽可能的隐藏内部的细节,只保留一些对外的接口使之与外部发生联系,其好处在于:可以对成员进行更加自由的修改,比如设置私有属性age的时候,通过函数来setAge(),这样就可以对入参进行判断 隐藏实现细节,只对外提供必要的接口,使得程序的逻辑更好继承继承是使用已存在的类作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以使用父类的功能,但是不能选择性的继承父类,特点如下:子类可以原创 2022-05-13 09:30:56 · 120 阅读 · 0 评论 -
55.整理ElasticSearch
ElasticSearch基础概念?ElasticSearch是基于Lucenne的RestFul的分布式实时全文搜索引擎,每个字段都被索引并可被搜索,可以快速存储,搜索,分析海量的数据全文搜索是值对每个词建立一个索引,指明该次在文章中出现的次数和位置,当查询的时候,根据实现建立的索引进行查找,并将查找的结果反馈给用户的检索方式index索引:类似于mysql中的数据库 type类型:类似于一张表,后续已经被废弃了 document文档:类似于mysql中的一行,不同之处在于ES中的每个原创 2022-05-11 18:05:20 · 269 阅读 · 0 评论 -
54.整理RabbitMQ
消息队列的优点?解耦:将系统按照不同的业务功能拆分,生产者和消费者都不知道对方的存在,一个只负责发布,一个只负责取异步:主流程只需要完成业务的核心功能,对于业务的非核心功能,将消息放入到消息之中进行异步处理,减少请求的等待,提高系统的总体性能削峰/限流:将请求都写到消息队列中,消费服务器按照规定速度处理请求,防止请求并发过高使系统崩溃消息队列的缺点?系统的可用性降低:系统引用的外部依赖越多,越容易挂掉,如果mq挂了,有可能导致整个系统的崩溃系统复杂度提高,数据一致性问题等消息队列原创 2022-05-11 16:00:01 · 413 阅读 · 0 评论 -
53.整理Java EE
Spring的组成Spring Context:提供框架式的Bean访问方式以及企业级功能(HNDI,定时任务) Spring Core:核心类库提供IOC和DI服务 Spring Aop:提供AOP服务 Spring Web:提供面向web的总和特性,对常见web框架的支持 Spring MVC:提供面向web应用的Moel-View-Controller Spring DAO:对jdbc的抽象封装,并且能统一管理JDBC事务 Spring ORM:对现有ORM框架的支持IOC?控制原创 2022-05-10 20:42:56 · 173 阅读 · 0 评论 -
52.整理MySQL
为什么要使用数据库?数据如果保存在内存:存取速度快,但数据不能永久保存数据保存在文件:数据永久保存,速度比内存操作慢,频繁IO,查询数据也不方便数据保存在数据库:数据永久保存,使用sql语句查询很方便,管理数据方便数据库的三大范式?列不可分,非主键列完全依赖于主键,非主键列不依赖于其他非主键,这三大范式是递进关系,比如第二范式需要在第一范式的基础上MyISAM对于Innodb引擎的区别? MyISAM Innodb 存储空间 可以被压缩,存储空间小 需原创 2022-05-09 11:13:54 · 416 阅读 · 0 评论 -
51.整理JVM
JVM调优的原则?不要为了调优而调优,首先确定的应该是项目的架构与代码已经没有优化的空间了,再考虑进行JVM的调优工作,不能指望通过JVM调优来使得性能有一个质的飞越 从三个属性中(吞吐量,延迟,内存)中选择两个进行JVM调优,称之为调优3选2,在处理吞吐量和延迟问题时,GC能使用的内存越大,应用运行也就越流畅,这也叫GC内存最大化原则什么情况下需要进行调优?Full GC数量频繁,GC停顿时间超长(超过1s) 应用出现OOM异常或者吞吐量下降,响应性能不高, 应用CPU占用过高,内存占用过原创 2022-05-08 18:40:23 · 407 阅读 · 0 评论 -
50.整理Redis
Redis是单线程还是多线程的?redis4.0以前是完全单线程的,4.0时引入多线程,但是核心流程依然是单线程的,额外线程只用于后台处理如删除对象等redis6.0中,redis可以利用多线程读取网络IO数据,对数据库的操作依然是单线程的为什么单线程?在redis6.0之前,redis的核心操作是单线程的,由于redis完全基于内存操作,通常情况下cpu不会是redis的瓶颈,最有可能成为瓶颈的是机器内存大小和网络带宽,既然cpu不会成为瓶颈,那么就无需引用多线程,多线程的上下文切换,加锁原创 2022-04-17 15:07:48 · 1074 阅读 · 0 评论 -
49.面经整理
CAS原理CAS操作包括三个操作数-内存位置,期望值,新值,如果内存位置的值与期望值所匹配,那么更新为新值,否则不进行操作,Java中提供对CAS操作的支持,具体在sun.misc.unsafe类,其中的compareAndSwapXXX系列的方法就是通过调用JNI的C语言代码,从而调用cpu底层指令来实现的,对于常规的Intel x86平台来说,最终映射到cpu的指令为cmpxchg,这是一个原子指令,用于比较并且交换的操作CAS存在ABA问题,Java中用于使用AtomicStampedRefe原创 2022-04-15 21:21:06 · 497 阅读 · 0 评论 -
48.面经整理
如何理解函数式编程?函数式编程和过程式编程的区别?过程式编程:数据存储在全局变量中,并且通过函数进行处理,随着程序规模的变大,可能在多个函数中使用全局变量,很难记录哪些地方对一个全局变量进行了修改,可维护性差函数式编程:通过函数之间传递状态,避免了全局状态的问题,不依赖当前函数之外的数据,也不改变当前函数之外的数据面向对象编程:通过对象来保存状态,鼓励代码复用,鼓励拆解问题,减少开发和维护时间Lambda表达式和匿名内部类的区别?所需类型不同:lambda表达式只能是接口,匿名内部类可以原创 2022-04-13 10:37:30 · 1880 阅读 · 0 评论 -
47.整理华子面经
手撕部分反转链表的三种方法:1.放入数组中,倒置数组2.递归方法public ListNode reverseNode(ListNode node) { if(node==null||node.next==null)return node; ListNode reverseNode = reverseNode(node.next); node.next.next=node; node.next=null; re原创 2022-04-08 10:27:32 · 1404 阅读 · 0 评论 -
46.整理华子面经+笔试+排序算法
算法题对于一个给定的数字N,找出从1到N中能被N整除的数?public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ int i = scanner.nextInt(); Set<Integer> solve = solve(i);原创 2022-04-04 16:20:40 · 904 阅读 · 0 评论 -
45-查漏补缺4
Java和C++的区别?为什么Java要使用单继承?不同点:C++创建对象之后,需要再使用完调用delete方法将其销毁,Java有自己的垃圾回收机制,用来监视所有new出来的对象,辨别不会再被引用的对象,然后释放内存空间 C++会将较大作用域的变量隐藏起来,但是Java不允许,代码如下:{ int x = 12; { int x = 96; }}Java不可以将一个非布尔值当做布尔值在逻辑表达式中使用 Java拥有无符号的右移操作符>&g原创 2022-03-30 13:26:44 · 1631 阅读 · 0 评论 -
44-查漏补缺3
操作系统中运行到就绪有几种转换方式?运行->就绪态:时间片使用完或者处理机被抢占但是进程还没有结束就绪->运行态:进程被调度进入执行态写代码的时候应该如何避免死锁?将系统中所有的资源设置标志位,排序,规定所有的进程申请资源以一定的顺序来操作,避免死锁a给b端发fin包,b端在没有收到的时候,b给a也发了一个fin包会怎样HTTP的请求头,请求行,请求体分别存放什么数据结构?请求行:方法字段,URL字段和HTTP协议版本字段构成,用空格分割请求头:由关键字/原创 2022-03-22 18:48:03 · 630 阅读 · 2 评论 -
43-查漏补缺2
触发Full gc的条件调用System.gc() 老年代空间不足 永久代空间不足 统计得到的minor GC晋升到旧生代的平均大小大于老年代的剩余空间 堆中产生的大对象超过阈值,-XX PretenureSizeThreashold进行设定 老年代连续空间不足 CMS GC的时候出现promotion failed(在Minor GC的过程中,幸存者to区容量不足以容纳Eden区和另一个Survivor区存活的对象,那么多余的被移动到老年代叫做过早提升,这会导致老年代中短期存活对象的增长,原创 2022-03-15 20:04:24 · 905 阅读 · 0 评论 -
42-计算机网络总结
讲讲OSI协议应用层:为应用程序间提供通信和交互的协议,比如DNS,HTTP传输层:为两台主机中的进程提供通用的数据传输服务,为应用层把报文封装成TCP报文段或者UDP用户数据进行传送,比如TCP和UDP网络层:为两台主机提供通信服务,为传输层产生的报文段或用户数据报封装成IP数据报进行传送,协议为ARP,ICMP数据链路层:为两台主机之间的数据传输提供服务,两台主机之间的传输,总是在一段一段的链路上传送的,这就需要链路层协议,为网络层把IP数据包封装成帧,在链路上进行传递,协议为CSMA,原创 2022-03-11 20:45:30 · 3354 阅读 · 0 评论 -
41-操作系统总结
用户态和内核态根据进程访问资源的特点,我们可以把进程在系统上的运行分为两个级别:用户态:用户态运行的进程可以直接读取用户程序的数据 系统态(内核态):系统态运行的进程或者程序几乎可以访问计算机的任何资源,不受限制什么是系统调用?我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能该如何操作呢?答案是系统调用,也就是说在我们运行的用户程序中,凡是与系统态级别的资源有关的操作(比如说文件管理,进程控制,内存管理),都必须通过系统调用方式向操作系统剔除服务请求,并由操作原创 2022-03-10 23:52:26 · 841 阅读 · 0 评论 -
40-查漏补缺
Spring如何解决循环依赖问题?首先明确,Spring不能解决由构造器注入产生的循环依赖并且不能解决原型模式下的循环依赖,此问题解决的前提是:单例模式,set方法注入采用三级缓存的方式:一级缓存:这里存放的都是初始化完成的bean--ConcurrentHashMap 二级缓存:实例化已经完成了但是属性还没有进行填充--HashMap 三级缓存:存放Bean的工厂--HashMap流程说明:A的创建过程需要B,A首先把自己放到三级缓存中,去实例化B 在B实例化的过程中,发现需要A,原创 2022-03-06 21:25:04 · 388 阅读 · 0 评论 -
39-面经总结
Spring的启动流程?对于一个web应用,其部署在web容器中,web容器提供一个全局的上下文环境,这个上下文就是ServletContext,为后面的IOC容器提供宿主环境在web.xml里提供contextLoaderListener,它会监听容器的初始化事件,调用contextInitialized方法启动上下文WebApplicationContext,这个就是IOC容器,初始化完毕后会以key-value的形式存储到ServletContext中随后开始配置web.xml中配置的Se原创 2022-03-05 18:58:58 · 289 阅读 · 0 评论 -
38-面经整理
阿里+字节说一下红黑树?红黑树是一种自平衡的二叉查找树,除了BST的基本特性之外有以下特性:节点是红色或者黑色,根节点是黑色,叶子节点是黑色的空节点 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径不能有两个连续的红色节点) 从任一节点到每个叶子节点的所有路径都包含相同数目的黑色节点 为了保证以上特性红黑树可以进行变色和旋转来控制新增的节点为什么要使用微服务?解决了复杂性问题,把一个巨大的应用分成了一组服务,在功能没有改变的同时,应用程序被分解成立可管理的模块利于开原创 2022-03-05 15:09:24 · 362 阅读 · 0 评论 -
37-面经整理
腾讯+阿里C++中变量的定义与声明?定义:用于变量分配空间,可以为变量指定初始值,只能定义一次声明:向程序表明变量的类型和名字,可以进行多次声明,声明不进行分配空间,它仅仅用作说明变量定义在程序的其他地方String,StringBuilder和StringBuffer?String是只读字符串,底层char数组,offset和Count和类都被final修饰,因此不能被继承同时拥有不可变性质,因此线程是安全的被final修饰的char[]只是不能改变引用指向的地址值,char[]原创 2022-03-04 16:50:15 · 296 阅读 · 0 评论 -
36-面经整理
京东java八大基本数据类型byte1 boolean 1 char 2 short 2 int 4 float 4 double 8 long 8Float a=1.4f,float b=1.1f a-b是多少最后输出的类型自动转为double,但是存在精度丢失问题,输出的结果是0.29999995,如果想要精确计算应该使用BigDecimal float a=1.4f; float b=1.1f; BigDecimal decimal原创 2022-03-03 23:12:04 · 510 阅读 · 0 评论 -
35-面经整理
京东物流==和equals的区别?==比较的对象是基本数据类型和包装类,判断数值是否相等,如果是引用数据类型比较的是地址值是否相等equals:在不重写的情况下和==一样,如果重写的话一般用来判断内容是否相等public static void main(String[] args) { String s1 = "Programming"; String s2 = new String("Programming"); String s3 =原创 2022-03-01 11:13:32 · 155 阅读 · 0 评论 -
34-面经整理
人人网ArrayList和LinkedList的区别首先两者都是List接口的不同实现,并且线程都是不安全的,ArrayList底层使用动态数组来存储元素,LinkedList内部使用双向链表来存储元素;ArrayList占用的内存在声明的时候就已经确定了,默认为10当超出后,会自动扩容为原来的1.5倍,LinkedList在声明的时候不需要指定大小,元素增加与删除的时候大小会随之改变对于ArrayList:get()方法的时间复杂度为O(1),因为直接从底层数组下标获取,与数组长度无关原创 2022-02-28 19:48:50 · 331 阅读 · 0 评论 -
33-面经整理
百度实习-2介绍一下JVM运行时数据区?程序计数器:线程私有,记录当前线程所执行的位置,这样当线程重新获得cpu的执行权的时候,就直接从记录的位置开始执行本地方法栈:线程私有,为虚拟机使用到的Native方法服务,Native方法是java调用非java代码的接口方法区:线程共享区域,用于存储已经被虚拟机加载的类信息,常量,静态变量,当方法区无法满足分配内存需求的时候,会抛出outofmemoryError的异常虚拟机栈:线程私有,在每个方法执行的时候都会同时创建出一个栈帧,用于存储局部原创 2022-02-28 17:13:33 · 547 阅读 · 0 评论 -
32-面经整理
spring使用了哪些设计模式?简单工厂设计模式:工厂根据传入的参数,动态决定应该创建哪一个产品,BeanFactory根据传入的一个唯一标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建,这个需要依据情况来定 工厂方法:应用程序将对象的创建以及初始化职责交给工厂对象;如果将应用程序自己的工厂对象交给spring管理,那么就是工厂bean 单例模式:保证一个类仅有一个实例,并且提供一个访问它的全局访问点,spring默认下的bean就是单例的,如果想更改需要更改scope属性 适配原创 2022-02-27 17:59:29 · 482 阅读 · 0 评论 -
31-面经总结
快手面经介绍MyBatis,底层是什么?来自于apache的一个开源项目iBatis,支持普通SQL查询,存储过程和高级映射的优秀持久层框架;MyBatis消除了几乎所有JDBC代码和参数的手工设置以及结果集的检索;使用简单的XML或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录MyBatis的底层是JDBC,使用JDBC有以下步骤加载数据库驱动 建立连接:指定数据库URL和Connecttion 执行SQL语句:createStatement()/prepa..原创 2022-02-25 17:55:24 · 826 阅读 · 0 评论 -
30-面经总结
如何编写代码计算2的15次方?快速幂法:依次计算2的7次方,2的3次方,2的1次方class Solution { public double myPow(double x, int n) { long N = n; return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N); } public double quickMul(double x, long N) { i原创 2022-02-24 22:55:55 · 742 阅读 · 0 评论 -
29-面经整理
小米日常实习面经hashMap的结构,负载因子为什么是0.75java8以前:数组+链表,java8以后:数组+链表+红黑树:在链表节点数超过8的时候转换为红黑树,在红黑树节点数小于6的时候转换为链表负载因子和扩容机制有关,比如容器的容量为16,负载因子为0.75,那么在容量达到12的时候就会进行扩容操作;HashMap是一个数据结构,既然是数据结构最主要的就是节省时间和空间,负载因子的存在也是为此服务的;考虑两种极端情况,0.75是空间与时间权衡后的结果如果负载因子是1.0的时候,意味着只原创 2022-02-21 19:13:54 · 531 阅读 · 0 评论 -
28.高频考点整理
原文链接HashMap的线程安全问题HashMap只要维护了一个Entry类型的数组来存储变量transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;其中transient是用于表示不需要序列化的标志,再看一下Entry类的源码,通过Entry的源码我们发现它主要包括key/value/hash/next几个部分,在jdk1.7中HashMap的结构如下:其中每一块值是一个Entry类型的链表(.转载 2021-11-04 20:45:37 · 83 阅读 · 0 评论 -
27.整理RabbitMQ
RabbitMQ的使用场景有哪些跨系统的异步通信,所有需要异步交互的地方都可以使用消息队列。就像我们除了打电话(同步)以外,还需要发短信,发电子邮件(异步)的通讯方式。 多个应用之间的耦合,由于消息是平台无关和语言无关的,而且语义上也不再是函数调用,因此更适合作为多个应用之间的松耦合的接口。基于消息队列的耦合,不需要发送方和接收方同时在线。在企业应用集成(EAI)中,文件传输,共享数据库,消息队列,远程过程调用都可以作为集成的方法 应用内的同步变异步,比如订单处理,就可以由前端应用将订单信息放到队.原创 2021-11-03 16:44:57 · 62 阅读 · 0 评论 -
26.整理Spring
SpringMVC的工作原理MVC的常用注解@RequestMapping用于请求url映射 @RequestBody注解实现接收http请求的json数据,将json数据转换为java对象 @ResponseBody注解实现将controller方法返回对象转化为json响应给客户如何开启注解处理器和适配器在springmvc.xml中通过开启<mvc:annotation-driven>来实现注解处理器和适配器的开启如何解决get和post乱码问题解决post.原创 2021-11-02 19:57:08 · 142 阅读 · 0 评论 -
25.整理mysql和Redis
sql中的聚合函数avg:平均值 count:个数 max:最大值 min:最小值 sum:列的和sql左连接和右连接的区别左连接:左表为基准查询,左表数据会全部显示出来,右表如果和左表匹配的数据显示相应字段,不匹配显示null 右连接:与左连接相反 全连接:先以左表进行左连接,再以右表进行右连接 内连接:显示表之间有连接匹配的所有行sql注入是什么通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句:select原创 2021-11-01 20:48:34 · 110 阅读 · 0 评论 -
24.整理JavaWeb
原生JDBC的操作数据库的流程Class.forName()加载数据库连接驱动 DriverManager.getConnection()获取数据连接对象 根据SQL获取sql会话对象,有两种方式Statement和PreparedStatement 执行SQL,执行SQL前如果有参数值就设置参数值setXXX() 处理结果集,关闭结果集,关闭会话,关闭连接基础代码:public static Connection getConnection() throws Exception {原创 2021-11-01 20:05:47 · 103 阅读 · 0 评论 -
23.整理JavaSE(3/3)
并行和并发的区别并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件线程和进程的区别,守护线程是什么进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少拥有一个线程 进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源 线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位,一个进程的多个线程可以并发执行守护线程是一个服务线程,它可能随时中原创 2021-11-03 12:51:12 · 140 阅读 · 0 评论 -
22.整理JavaSE(2/3)
Java中有几种类型的流?按照流的方向:输入流(inputStream)和输出流(outputStream)按照实现功能分:节点流(可以从或向一个特定的地方(节点)读写数据。如 FileReader)和处理流(是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如 BufferedReader。处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。)按照处理数据的单位: 字节流和字符流。字节流继承于 InputStream 和 Outp.原创 2021-10-31 12:19:33 · 189 阅读 · 0 评论 -
21.整理JavaSE内容(1/3)
传送门String类可以被继承吗?作为Java语言的开发者为什么把String类定义为final呢?String类在声明的时候使用final关键字修饰,被final关键字修饰的类无法被继承,除此之外String的底层char[ ]也是由final修饰的,因此String具有不可变性质当字符串不可变的时候,字符串池才有可能实现,因为不同的字符串变量都指向池中的同一个字符串,这样可以节省很多堆空间 由于字符串是不可变的,所以它是多线程安全的,当一个字符串被多个线程共享的时候,就不用担心线程安全问题原创 2021-10-30 17:13:15 · 252 阅读 · 0 评论 -
20.整理华为面经--4
Java抽象类和接口的区别:抽象类: 可以存放普通成员函数,成员变量可以是各种类型,只能继承一个,目的是代码复用接口:接口中原来只能存在public abstract方法,现在可以有静态方法和默认方法,成员变量只能是public static final类型的,接口可以实现多个,目的是对类的行为进行约束当关注事务的本质.蜂鸟是一种鸟的时候使用抽象类,当关注一个操作的时候,蜂鸟可以飞,使用接口内存溢出和内存泄漏怎么分析:内存溢出:out of memory,指的是要求的内存超出了系统所能分原创 2021-10-29 18:07:33 · 101 阅读 · 0 评论 -
19.华为笔试题整理
1.两数之和数组可以有重复元素,所以与力扣的第一题稍微有点不同 public int[] twoSum(int[] numbers, int target) { int n = numbers.length; HashMap<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < n; i++) { int realTarge.原创 2021-10-26 22:41:25 · 3774 阅读 · 0 评论 -
18.整理华为面经(笔试)--3
积木可以旋转,即[3,6]可以变为[6,3] public int solve(int[][] arr){ if(arr==null||arr.length==0)return 0; standard(arr); //按照长度升序排列,相等宽度升序 Arrays.sort(arr,(a,b)->{ return a[0]==b[0]?a[1]-b[1]:a[0]-b[0]; });...原创 2021-10-23 12:13:29 · 227 阅读 · 0 评论