面试
文章平均质量分 81
不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为,非常反对!我觉得这种方法特别极端,而且在稍有一点经验的面试官面前是根本
最小的帆也能远航
不必借光而行,你我亦是星辰!
展开
-
RocketMQ面试题
类比一下我们生活的邮政系统——邮政系统要正常运行,离不开下面这四个角色, 一是发信者,二 是收信者, 三是负责暂存传输的邮局, 四是负责协调各个地方邮局的管理机构。对应到 RocketMQ 中,这四个角色就是 Producer、 Consumer、 Broker 、NameServer。在操作系统中,使用传统的方式,数据需要经历几次拷贝,还要经历用户态/内核态切换。从磁盘复制数据到内核态内存;从内核态内存复制到用户态内存;然后从用户态内存复制到网络驱动的内核态内存;原创 2024-02-18 16:02:06 · 728 阅读 · 0 评论 -
计算机网络面试题
为什么不能是两次?为了防止服务器端开启一些无用的连接增加服务器开销防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。由于网络传输是有延时的(要通过网络光纤和各种中间代理服务器),在传输的过程中,比如客户端发起了 SYN=1 的第一次握手。如果服务器端就直接创建了这个连接并返回包含 SYN、ACK 和 Seq 等内容的数据包给客户端,这个数据包因为网络传输的原因丢失了,丢失之后客户端就一直没有接收到服务器返回的数据包。原创 2024-02-18 15:52:51 · 1064 阅读 · 0 评论 -
操作系统面试
可以这么说,操作系统是一种运行在内核态的软件。它是应用程序和硬件之间的媒介,向应用程序提供硬件的抽象,以及管理硬件资源。可以这么说,内核是一个计算机程序,它是操作系统的核心,提供了操作系统最核心的能力,可以控制操作系统中所有的内容。内核空间,这个内存空间只有内核程序可以访问;⽤户空间,这个内存空间专⻔给应⽤程序使⽤,权限比较小;⽤户空间的代码只能访问⼀个局部的内存空间,⽽内核空间的代码可以访问所有内存空间。因此,当程序使⽤⽤户空间时,我们常说该程序在⽤户态执⾏,⽽当程序使内核空间时,程序则在内核态。原创 2024-02-18 15:33:09 · 959 阅读 · 1 评论 -
Mysql面试
内连接(inner join):取得两张表中满足存在连接匹配关系的记录。外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。交叉连接(cross join):显示两张表所有记录一一对应,没有匹配关系进行筛选,它是笛卡尔积在 SQL 中的实现,如果 A 表有 m 行,B 表有 n 行,那么 A 和 B 交叉连接的结果就有 m*n 行。原创 2024-02-18 15:21:58 · 769 阅读 · 0 评论 -
MyBatis面试题
先吹一下Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。再说一下缺点。原创 2024-02-18 09:17:13 · 789 阅读 · 0 评论 -
Spring面试
Java 是面向对象的编程语言,一个个实例对象相互合作组成了业务逻辑,原来,我们都是在代码里创建对象和对象的依赖。所谓的IOC(控制反转):就是由容器来负责控制对象的生命周期和对象间的关系。以前是我们想要什么,就自己创建什么,现在是我们需要什么,容器就给我们送来什么。引入IOC之前和引入IOC之后也就是说,控制对象生命周期的不再是引用它的对象,而是容器。对具体对象,以前是它控制其它对象,现在所有对象都被容器控制,所以这就叫控制反转。控制反转示意图DI(依赖注入)原创 2024-02-01 17:32:26 · 1096 阅读 · 0 评论 -
Redis面试
Redis图标Redis是一种基于键值对(key-value)的NoSQL数据库。比一般键值对数据库强大的地方,Redis中的value支持string(字符串)、hash(哈希)、 list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、 HyperLogLog、GEO(地理信息定位)等多种数据结构,因此 Redis可以满足很多的应用场景。而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常出色。原创 2024-02-01 17:30:12 · 715 阅读 · 0 评论 -
Java 虚拟机
JVM——Java 虚拟机,它是 Java 实现平台无关性的基石。Java 程序运行的时候,编译器将 Java 文件编译成平台无关的 Java 字节码文件(.class),接下来对应平台 JVM 对字节码文件进行解释,翻译成对应平台匹配的机器指令并运行。同时 JVM 也是一个跨语言的平台,和语言无关,只和 class 的文件格式关联,任何语言,只要能翻译成符合规范的字节码文件,都能被 JVM 运行。内存分配有两种方式,指针碰撞空闲列表。原创 2024-02-01 17:00:37 · 1077 阅读 · 0 评论 -
Java并发编程
要说线程,必须得先说说进程。进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的, 但是 CPU 资源比较特殊,它是被分配到线程的,因为真正要占用CPU运行的是线程,所以也说线程是 CPU分配的基本单位。比如在Java中,当我们启动 main 函数其实就启动了一个JVM进程,而 main 函数在的线程就是这个进程中的一个线程,也称主线程。原创 2024-02-01 16:58:25 · 946 阅读 · 0 评论 -
Java集合框架面试
将元素放在table数组上面,是用hash值%数组大小定位位置,而HashMap是用hash值&(数组大小-1),却能和前面达到一样的效果,这就得益于HashMap的大小是2的倍数,2的倍数意味着该数的二进制位只有一位为1,而该数-1就可以得到二进制位上1变成0,后面的0变成1,再通过&运算,就可以得到和%一样的效果,并且位运算比%的效率高得多。get也很简单,key通过hash定位到segment,再遍历链表定位到具体的元素上,需要注意的是value是volatile的,所以get是不需要加锁的。原创 2024-01-06 08:44:55 · 1106 阅读 · 0 评论 -
Java SE面试
Java 是一门面向对象的编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的优秀代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。所谓跨平台性,是指 Java 语言编写的程序,一次编译后,可以在多个系统平台上运行。原创 2024-01-06 08:23:35 · 1050 阅读 · 0 评论 -
ArrayList和LinkedList区别
1. 是否保证线程安全:ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全; 2. 底层数据结构:Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别,下面有介绍到!) 3. 插入和删除是否受元素位置的影响:①ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素位置的影响。比如:执行add(E...原创 2021-09-29 10:04:38 · 121 阅读 · 0 评论 -
RabbitMQ基础面试题
1、什么是RabbitMQ?为什么使用RabbitMQ?答:RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的,消息中间件;可以用它来:解耦、异步、削峰。2、RabbitMQ有什么优缺点?答:优点:解耦、异步、削峰;缺点:降低了系统的稳定性:本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性会降低;增加了系统的复杂性:加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保证原创 2021-09-27 20:06:45 · 173 阅读 · 0 评论 -
Hashtable、HashMap、TreeMap的区别
HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。存储的内容是基于key-value的键值对映射,不能有重复的key,而且一个key只能映射一个value。HashSet底层就是基于HashMap实现的。 Hashtable的key、value都不能为null;HashMap的key、value可以为null,不过只能有一个key为null,但可以有.原创 2021-09-26 21:13:32 · 212 阅读 · 0 评论 -
Mybatis 的嵌套查询与嵌套结果的区别
嵌套查询 嵌套结果 嵌套查询是在查询 SQL 后再进行一个(子)查询 嵌套结果是一个多表查询的 SQL 语句 会执行多条 SQL 语句 只有一条复杂的 SQL 语句(多表连接) SQL语句编写较为简单 SQL语句编写较为复杂 ...原创 2021-09-26 19:27:48 · 2286 阅读 · 0 评论 -
HashMap面试基础
1.HashMap底层数据结构JDK1.7及之前:数组+链表 JDK1.8:数组+链表+红黑树关于HashMap基本的大家都知道,但是为什么数组的长度必须是2的指数次幂,为什么HashMap的加载因子要设置为0.75,为什么链表长度大于等于8时转成了红黑树?2.HashMap添加元素分析当添加元素时,会通过哈希值和数组长度计算计算下标来准确定位该元素应该put的位置,通常我们为了使元素时分布均匀会使用取模运算,用一个值去模上总长度,例如:index=hashCode % arr.len原创 2021-09-26 19:04:33 · 152 阅读 · 0 评论 -
Spring常用注解
1.声明bean的注解@Component组件,没有明确的角色@Service在业务逻辑层使用(service层)@Repository在数据访问层使用(dao层)@Controller在展现层使用,控制器的声明(C)2.注入bean的注解@Autowired:由Spring提供@Inject:由JSR-330提供@Resource:由JSR-250提供都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。3.java配置类相关注解...原创 2021-09-26 18:54:51 · 126 阅读 · 0 评论 -
SQL注入详解
一:什么是sql注入 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。二:SQL注入攻击的总体思路 1:寻找到SQL注入的位置 2:判断服务器类型和后台数据库类型 3:针对不同的服务器和数据库特点进行SQL注入攻击三:SQL注入攻击实例String sql = "select * from user_table where username=' "+..原创 2021-09-26 18:26:51 · 198 阅读 · 0 评论 -
MyBatis中#{}和${}的区别
两者都可以在mybatis中用在输入映射{}是预编译处理,${}是字符串替换。mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值,完成的是简单的字符串拼接。补充:在mybatis中使用#{}可以防止sql注入,提高系统安全性。...原创 2021-09-26 18:10:37 · 133 阅读 · 0 评论 -
Mybatis面试大全
1.Mybatis是什么? Mybatis是一款优秀的持久层框架 它支持定制化SQL、存储过程以及高级映射 与传统的jdbc相比,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集 2 .ORM是什么?ORM(Object Relational Mapping),对象关系映射,是一种为了解决关系型数据库数据与简单Java对象(POJO)的映射关系的技术。 ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系...原创 2021-09-14 18:28:52 · 193 阅读 · 0 评论 -
Elasticsearch之集群脑裂
集群脑裂是什么? 所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解。由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况成为集群脑裂(split-brain)现象。这个问题非常危险,因为两个新形成的集群会同时索引和修改集群的数据。Elasticsearch集群出现了查询极端缓慢的情况,通过以下命令查看集群状态: curl -XGET 'http://master:9200/_clu...转载 2021-09-14 18:04:23 · 193 阅读 · 0 评论 -
Elasticsearch面试大全
1.什么是ElasticSearch?Elasticsearch是一个基于Lucene的搜索引擎。它提供了具有HTTP Web界面和无架构JSON文档的分布式,多租户能力的全文搜索引擎。Elasticsearch是用Java开发的,根据Apache许可条款作为开源发布。2.为什么要使用Elasticsearch? 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一.原创 2021-09-14 17:55:18 · 226 阅读 · 0 评论 -
SpringBoot面试大全
1. 什么是 Spring Boot?Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。2. Spring Boot 有哪些优点?Spring Boot 主要有如下优点:容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。 开箱即用,远离繁琐的配置。 提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管原创 2021-09-13 20:14:43 · 137 阅读 · 0 评论 -
MySQL8.0窗口函数之排名函数(rank、dense_rank)的使用
静态窗口函数之排名函数 rank()、dense_rank()有成绩表sc,字段分别是学生编号s_id,课程编号c_id,成绩score题目:按成绩从高到低进行排名代码:select * ,rank() over(order by score desc) 名次 from sc;代码解读:rank()是排名函数,不需要参数;over语句里面没有partition by参数,也就是整个数据视为一个窗口;因为rank函数没有参数,但需要指定按照那个字段进行排名,所以使用rank函数必须用o转载 2021-09-13 18:14:53 · 1340 阅读 · 0 评论 -
MySQL 查询各科前三名(考虑成绩并列情况)
1.在分析问题前,我们先把数据准备好。CREATE TABLE student(name VARCHAR(10),subject VARCHAR(10),score INT(10));2.插入数据INSERT INTO student VALUES("张三","java",71),("李四","java",82),("王五","java",90),("赵六","java",98),("孙七","java",90),("张三","python",81),("李四原创 2021-09-13 17:17:19 · 16261 阅读 · 13 评论 -
MongoDB面试题
1.什么是MongoDBMongoDB是一个文档数据库,提供好的性能,领先的非关系型数据库。采用BSON存储文档数据。BSON()是一种类json的一种二进制形式的存储格式,简称Binary JSON.相对于json多了date类型和二进制数组。...原创 2021-09-12 21:22:25 · 330 阅读 · 0 评论 -
Spring Bean的生命周期
Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。只有四个!是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化原创 2021-09-12 20:42:03 · 85 阅读 · 0 评论 -
SpringCloud面试大全
1. 什么是 spring cloud?spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。2. spring cloud 断路器的作用是什么?在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用原创 2021-09-03 14:49:53 · 250 阅读 · 0 评论 -
Spring面试大全
1、什么是Spring?Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Java应用程序中,但对Java EE平台上的Web应用程序有更好的扩展性。Spring框架的目标是使得Java EE应用程序的开发更加简捷,通过使用POJO为基础的编程模型促进良好的编程风格。2、Spring有哪些优点?轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。控制反转(IOC):Spring使用控制反转技术实现了松耦原创 2021-09-03 13:04:27 · 141 阅读 · 0 评论 -
Redis面试大全
1.什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value D原创 2021-09-03 12:34:13 · 302 阅读 · 0 评论 -
MySQL面试大全
1.Mysql中有哪几种锁1.表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2.行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。3. 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。2.Mysql中有哪些不同的表格共有5种类型的表格:MyISAM Heap Merge INNODB ISAM3.简述在MySQL数据库中MyISAM和InnoD.原创 2021-09-03 10:31:33 · 113 阅读 · 0 评论 -
Java高级部分面试大全
1.IO外存 内存 缓存打开txt文件的步骤:启动一个应用程序[记事本,word,excel],系统会给这个程序分配内存空间 在外存和内存之间建立一个管道 3.将外存中的数据通过管道输送到内存中 4.输送数据的管道叫做数据流对象字节是可以操作的最小的有意义的单位,所有的数据都可以用字节表示。字节输入流:InputStream 所有字节输入流的抽象父类FileInputStream ...原创 2021-09-03 09:00:36 · 201 阅读 · 0 评论 -
JAVA基础面试大全
1.短路与(&&)、短路或(||)、逻辑与(&)、逻辑或(|)的区别:短路与、逻辑与:有假必为假,全真为真逻辑或、短路或:有真必为真,全假为假逻辑或、逻辑与:逻辑中表达式必须全部计算完。短路与、短路或:短路中表达式不需要计算完。2.=="和equals的区别==操作符专门用来比较两个变量的值是否相等equals方法是用于比较两个独立对象的内容是否相同3.Java中的访问限定符public 公共的 同一个项目中可访问protect..原创 2021-09-02 18:37:49 · 168 阅读 · 2 评论