- 博客(36)
- 收藏
- 关注
原创 面试题总结(七)
目录1、1000个多并发线程,10台机器,每台机器4核的,设计线程池大小。2、数据库如何加快数据查询3、网络传输中的分包、粘包与丢包4、 ArrayList 和 LinkedList 遍历操作效率比较?5、什么是内部类?内部类的作用6、synchronized与static synchronized 的区别: 7、如何控制某个方法允许并发访问线程的个数?8、什么导致线程阻塞?9、两个进程同时要求写或者读,能不能实现?如何防止进程的同步?10、j...
2021-08-22 22:24:48
536
原创 面经总结(六)
1、Java IO 和 NIO的区别IO是面向字节流的,NIO是面向缓冲区。IO是阻塞的,NIO是基于Selector的非阻塞。 NIO的核心组件包括:Channel(通道),Buffer(缓冲区),Selector(选择器),其中Channel和Buffer比较好理解 。简单来说NIO是面向通道和缓冲区的,意思就是:数据总是从通道中读到buffer缓冲区内,或者从buffer写入到通道中。Selector 一般称 为选择器 ,当然你也可以翻译为 多...
2021-08-21 20:53:37
167
原创 面经总结(五)
1、什么是一致性hash一致性Hash算法也是使用取模的方法,不过,上述的取模方法是对服务器的数量进行取模,而一致性的Hash算法是对2的32方取模。即,一致性Hash算法将整个Hash空间组织成一个虚拟的圆环,Hash函数的值空间为0 ~ 2^32 - 1(一个32位无符号整型),整个哈希环如下:整个圆环以顺时针方向组织,圆环正上方的点代表0,0点右侧的第一个点代表1,以此类推。第二步,我们将各个服务器使用Hash进行一个哈希,具体可以选择...
2021-08-20 22:59:11
274
原创 面经总结(四)
1、多线程执行顺序怎么保证使用join()方法,让其他线程等待。使用join的线程会独占执行资源,直到使用完毕,其它线程才能获取执行权。 使用juc包下的Executors线程池保证子线程按顺序执行,我们使用Executors中的newSingleThreadExecutor()方法,创建一个单线程的线程池,也可以达到控制线程执行顺序的目的。2、平时遇到幻读的场景幻读:是指在同一个事务中,前后两次查询相同范围时,得到的结果不一致,后一次查询到新插入的行。这里需...
2021-08-19 23:55:18
404
原创 面试总结(三)
1、JVM的内存区域?具体介绍一下每个区域的作用 jvm的内存区域包括方法区,堆,pc计数器,本地方法区和虚拟机栈。其中方法区在JDK8中更名为元空间。程序计数器和虚拟机栈都不会发生GC,程序计数器也不会发生溢出异常,虚拟机栈有溢出错误。堆空间和方法区有GC和OOM异常,但是方法区GC条件苛刻,GC效率低,GC主要发生在堆区。 虚拟机栈:虚拟机栈由一个个的栈帧组成,栈帧的大小决定了栈的最大深度,而栈帧的大小主要取决于局部变量表和操作数栈。虚拟机栈由局部变量表 、操作数栈、动态链接和方...
2021-08-18 23:47:09
163
原创 面经总结(二)
1、一亿个数据找出前K个大的数维护容量为k的小顶堆,从源数据中取出前k个填充实例化堆,然后对剩下的n-k个数据迭代,对于每个遍历到的数字x,如果x >minValue,用x把minValue替换掉,然后调整堆最小值的位置。时间复杂度O(K + (n-k)*lgk),空间复杂度O(k)。2、求数组中第k大的数字 使用类似快排的方法,但是只要找到对应位置的值即可,时间复杂度可以达到o(n),最坏时间复杂度o(n^2).3、排序算法稳定与不稳定是什么意...
2021-08-17 22:31:49
161
原创 面经总结(一)
1、JAVA如何开启线程?继承Thread类,重写run方法。 实现Runnable接口,实现run方法。 实现Callable接口,实现call方法。通过FutureTask创建一个线程,获取到线程执行的返回值。callable和Runnable的区别是callable可以有返回值,也可以抛出异常的特性,而Runnable没有。 通过线程池来开启线程。2、怎么保证线程安全?synchronized修饰 volatile实现同步(只能保证可见性,不能保证原子性) 使用局部变量Thread
2021-08-16 00:55:52
217
1
原创 java锁的常见面试题
1、Lock锁和synchronized锁的区别Lock锁是对象,而synchronized是java关键字 Lock锁需要手动加锁释放锁,synchronized的该操作是全自动的。对于异常前者需要手动释放锁,不然容易导致死锁。而后者由jvm自动管理。 Lock锁的属性可以配置,而synchronized只能是可重入的、非公平的、不可中断的。 在实现原理上synchronized主要是基于对象的monitor。而Lock的实现是java层面的,基础是AQS2、wait和sleep的区别wa
2021-08-11 17:08:45
1278
原创 操作系统面试题总结(二)
1、目录结构单级目录结构:整个系统中只建立一张目录表,不允许重名,不适用于多用户操作系统。 两级目录结构:早期的操作系统采用两级目录结构。分为主文件目录和用户文件目录。允许不同用户的文件重名,也可以在目录上实现访问限制,但是仍然缺乏灵活性,不能对自己的文件进行分类。 多级目录结构(树形目录结构):可以实现用户文件分类的功能。但是不方便实现文件的共享。 无环图目录结构:可以用不同的文件名指向同一个文件,甚至可以指向同一个记录(共享同一目录下所有的文件),需要为每个共享节点设置共享计数器,只有当共享.
2021-08-06 15:25:23
340
原创 操作系统面试题总结(一)
1、什么是进程以及线程?二者之间的区别有哪些?进程是系统进行资源调度与分配的基本单位,线程是CPU进行资源调度与分配的基本单位,它是比进程更小的能独立运行的基本单位。一个线程只能属于一个进程,一个进程中可以包含多个线程,系统分配给进程的资源,进程内部的线程可以多线程的共享,不同进程内的线程通过消息通信的方式实现同步。进程有独立的内存空间,线程没有独立的内存空间。2、解释一下什么是操作系统操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计...
2021-08-02 16:54:05
411
原创 计算机网络面试题总结(四)
1、ICMP差错报告报文 ICMP差错报告报文有5中情况:终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。 时间超过:当路由器收到生存时间为0的数据包时,丢弃数据包并向源点发送时间超过报文。当终点在规定的时间内不能接受到一个数据报的全部数据报片时,就把已经收到的数据报篇都丢弃,向源主机发送时间超过报文。 参数问题:当路由器或目的主机收到的数据报的首部中有的字段值不正确,就丢弃该数据报,并向源主机发送参数问题报文。 改变路由:路由器把改变路由报文发送给主机,让...
2021-07-28 16:05:58
1396
1
原创 计算机网络面试题总结(三)
1、SQL 注入 SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。SQL注入攻击的总体思路寻找到SQL注入的位置 判断服务器类型和后台数据库类型 针对不通的服务器和数据库特点进行SQL注入攻击SQL注入攻击实例比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:用户名: ‘or 1 = 1 --密 码:因为存在or,前面的查询必然成立,后方用--分...
2021-07-27 21:29:15
394
原创 计算机网络面试题总结(二)
1、HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。2、如何理解HTTP协议是无状态的?HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户...
2021-07-24 13:33:22
449
原创 计算机网络面试题总结(一)
1、TCP 三次握手三次握手的详解:握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”:首先客户端向服务器端发送一段TCP报文 标记位为SYN,表示“请求建立新连接”; 序号为Seq=X(X一般为1); 随后客户端进入SYN-SENT阶段。 服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文 标志位为SYN和ACK,表示“确认客户端的报文Seq序号...
2021-07-22 20:11:30
281
2
原创 Mysql面试题总结(二)
1、数据库高并发解决方案页面静态化- 用户可以直接获取页面,不用走那么多流程,比较适用于页面不频繁更新。 使用缓存- 第一次获取数据从数据库准提取,然后保存在缓存中,以后就可以直接从缓存提取数据。不过需要有机制维持缓存和数据库的一致性。 使用储存过程-那些处理一次请求需要多次访问数据库的操作,可以把操作整合到储存过程,这样只要一次数据库访问就可以了。 批量读取 - 高并发情况下,可以把多个请求的查询合并到一次进行,以减少数据库的访问次数 延迟修改 - 高并发情况下,可以把多次修改请求,先保存在.
2021-07-21 15:01:54
1672
1
原创 Mysql 面试题总结(一)
目录1、聚集索引与非聚集索引2、为什么用自增列作为主键3、为什么使用数据索引能提高效率4、B+树索引和哈希索引的区别5、B树和B+树的区别6、为什么说B+比B树更适合实际应用中操作系统的文件索引和数据库索引?7、什么情况下应不建或少建索引?8、什么是表分区,表分区与分表的区别?9、表分区有什么好处?10、分区表的限制因素?11、如何判断当前MySQL是否支持分区?12、MySQL支持的分区类型有哪些?13、四种隔离级别?14、什么是MVCC?1
2021-07-20 22:01:57
234
原创 Mysql基础(二)
1、truncate 语法:truncate table 表名,删除表内的所有信息,不能回滚,相当于删除了表(drop table)然后再创建一个表。2、DDL语言库的管理create database 【if not exists 】库名 【character set 字符集名】# 案例:创建 Bookscreate database if not exists books;修改库ALTER DATABASE [数据库名] { [ DEFAULT ] ...
2021-07-20 15:16:24
66
原创 Mysql基础(一)
1、Mysql 常见的命令介绍 启动和停止Mysql服务启动:net start mysql 【服务的名称】停止:net stop mysql 【服务的名称】Mysql 登录/退出登录:mysql -h 主机名 -P 端口号 -u用户名 -p密码【例如】mysql -h localhost -u root -proot退出:exit 或 ctrl+cmysql 常见命令1、进入mysql,在命令行中输入 mysql -uroot -proot例 : mysq...
2021-07-20 12:41:00
72
原创 Mysql高级(四)
1、Mysql 日志在任何一种数据库中,都会有各种各样的日志,记录着数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件。MySQL 也不例外,在 MySQL 中,有 4 种不同的日志,分别是错误日志、二进制日志(BINLOG 日志)、查询日志和慢查询日志,这些日志记录着数据库在不同方面的踪迹。1.1 错误日志错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息...
2021-07-19 21:39:59
68
原创 Mysql高级(三)
目录1、应用优化1.1使用连接池1.2减少对MySQL的访问1.2.1避免对数据进行重复检索1.2.2 增加cache层1.3 负载均衡1.3.1 利用MySQL复制分流查询1.3.2 采用分布式数据库架构2. Mysql中查询缓存优化2.1操作流程2.2查询缓存配置2.3开启查询缓存2.4查询缓存SELECT选项2.5查询缓存失效的情况3.Mysql内存管理及优化3.1内存优化原则3.2MyISAM 内存...
2021-07-19 19:48:23
114
原创 Mysql高级(二)
1、Mysql的体系结构整个MySQL Server由以下组成:Connection Pool : 连接池组件 Management Services & Utilities : 管理服务和工具组件 SQL Interface : SQL接口组件 Parser : 查询分析器组件 Optimizer : 优化器组件 Caches & Buffers : 缓冲池组件 Pluggable Storage Engines : 存储引擎 File System : 文件..
2021-07-19 03:18:18
211
原创 Mysql高级(一)
1、InnoDB和MyISAM对比对比项 MyISAM InnoDB 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,即使操作一条记录也会锁住整张表,不适合高并发操作 行锁,操作时只锁某一行,不对其他行有影响,适合高并发操作 缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,対内存要求较高,而且内存大小対性能有决定性影响 表空间 小 大 关注点 性能 事务 默认安装
2021-07-18 16:33:10
189
原创 字符串常量池StringTable
1、String的基本特性String:字符串,使用一对""引起来表示。 String sl = "hello";//字面量的定义方式 String s2 = new String("hello") ; String声明为final的, 不可被继承 String实现了Serializable接口:表示字符串是支持序列化的。 实现了Comparable接口:表示String可以比较大小 String在jdk8及以前内部定义了final char[],value用于存储字符串数据。jdk9时
2021-07-16 03:46:49
196
原创 执行引擎(Execution Engine)
1、执行引擎概述执行引擎是Java虚拟机的核心组成部分之一 虚拟机是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。 JVM的主要任务是==负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被
2021-07-16 01:23:37
1528
原创 JVM的命令行与运行时参数
目录1、GC日志相关参数2、JVM监控及诊断工具3、JVM监控及诊断工具-命令行篇4、JVM运行时参数1、GC日志相关参数 -XX:+PrintGC或-verbose:gc输出简单GC日志信息 -XX:+PrintGCDeatils输出详细GC日志信息常用 -XX:+PrintGCTimeStamps需要搭配输出GC信息使用,输出程序运行时间常用 -XX:+PrintGCDateStamps需要搭配输出GC信息使用,输出时间...
2021-07-15 21:05:35
302
原创 线程安全与锁优化
1、线程安全与锁优化不把线程安全当作一个非真即假的选项,从线程安全的程度上由强到弱可以排序为: 不可变,绝对线程安全,相对线程安全,线程兼容,线程对立。不可变的对象一定是线程安全的,因为不可变在多线程中不可以修改,因此不可变对象在外部的可见状态不会变。基本类型可以使用final来保证它不可变,引用类型自行保证不会对其状态发生改变,参考(String,Integer等类,将内部状态变量设置为final)。绝对线程安全不管运行环境如何,调用者都不...
2021-07-15 21:01:29
156
原创 JVM虚拟机类加载器
目录1、ClassLoader2、类加载的分类3、命名空间4、双亲委派机制4.1双亲委派模型的原理4.2 双亲委派模型的优点4.3双亲委派模型在代码中的实现步骤4.4双亲委托模式的弊端4.4 破环双亲委派机制5、类加载机制的基本特征6、类的加载器分类6.1引导类加载器(Bootstrap ClassLoader) 6.2 扩展类加载器(Extension ClassLoader)6.3系统类加载器(AppClassLoader)...
2021-07-11 23:24:11
120
原创 类的加载过程
1、class中的对象加载入内存以及使用所经过的一系列过程。 引用对象进入内存经历三个阶段,加载、链接和初始化。其中链接过程又可以细分为验证、准备和解析。2、加载阶段(loading)2.1加载的概叙所谓加载,简而言之就是将Java类的字节码文件加载到机器内存中,并在内存中构建出Java类的原型一一类模板对象。所谓类模板对象,其实就是Java类在JVM内存中的一个快照,JVM将从字节码文件中解析出的常量池、类字段、类方法等信息存储到类模板中,这样JVM在运...
2021-07-10 15:57:31
73
原创 字节码文件相关知识
1、前端编译器vs后端编译器javac是一种能够将Java源码编译为字节码的前端编译器。HotSpot VM并没有强制要求前端编译器只能使用javac来编译字节码,其实只要编译结果符合JVM规范都可以被JVM所识别即可。在Java的前端编译器领域,除了javac之外,还有一种被大家经常用到的前端编译器,那就是内置在Eclipse中的ECJ (EclipseCompiler for Java)编译器。和Javac的全量式编译不同,ECJ是一种增量式编译器。前端编译器并不...
2021-07-09 22:12:59
193
原创 垃圾回收器相关面试题
1、JVM GC算法有哪些,目前的JDK版本采用什么回收算法? JVM的 垃圾回收算法主要有三种,标记清楚算法,标记压缩算法和复制算法。JDK8采用的是parallel scavenge和parallel old 组合,它们分别采用的是复制算法和标记压缩算法。JDK9采用的是G1垃圾回收器,采用的是复制算法和标记压缩算法。2、G1回收器的回收过程 G1垃圾回收器的垃圾回收主要分为三个阶段,年轻代GC,并发标记和混合回收。在YGC阶段,分为四个阶段,分别为:根节点扫...
2021-07-09 14:51:34
241
原创 垃圾回收器
1、评估GC的性能指标吞吐量:运行用户代码的时间占总运行时间的比例 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例。 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。 收集频率:相对于应用程序的执行,收集操作发生的频率。 内存占用: Java堆区所占的内存大小 在设计(或使用) GC算法时,我们必须确定我们的目标: 一个GC算法只可能针对两个目标之一(即只专注于较大吞吐量或最小暂停时间),或则尝试找到一个二者的折衷。现在标准:...
2021-07-09 00:45:41
125
原创 垃圾回收相关知识点
1、System.gc()在默认情况下,通过System.gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(无法保证马上触发GC),只有在垃圾回收线程抢到时间片时才会触发垃圾回收。2、内存溢出与内存泄漏2.1、内存溢出 内存溢出也就是内存被完全占用,后续程序无法正常运行,内...
2021-07-08 12:00:45
124
原创 JVM垃圾回收
1、什么是垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。2、为什么要进行垃圾回收如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空 间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。 除了释放没用的对象,垃圾回收也可以清除内存里的记录碎片。碎片整理将所占用的堆内存移到堆的一端,以便JVM 将整理出的内存分配给新的对象。3、Java垃圾回收机制自动内存管理,无需开发人员手动参与内...
2021-07-07 01:10:25
80
原创 对象实例化
目录1、创建对象的方法2、创建对象的步骤3、对象的内存布局4.对象的访问定位5、直接内存(Direct Memory)1、创建对象的方法new 最常见的方式 变形1 : Xxx的静态方法 变形2 : XxBuilder/XxoxFactory的静态方法 Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public Constructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构...
2021-07-06 13:22:29
216
原创 JVM内存相关的面试题
1、什么情况下会发生栈内存溢出 栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型,栈内存的大小既可以是固定的,也可以是动态扩展的。如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常,方法递归调用产生这种结果。如果Java虚拟机栈可以动态扩展,并且扩展的动作已经尝试过,但是无法申请到足够的...
2021-07-06 01:15:48
94
原创 JVM运行时数据区
常见JVM面试题及答案整理1、运行时数据区的结构运行时数据区包括,方法去、堆、pc计数器、本地方法区和虚拟机栈。其中方法区在JDK8中更名为元空间。程序计数器和虚拟机栈都不会发生GC,程序计数器也不会发生溢出异常,虚拟机栈有溢出错误。堆空间和方法区有GC和OOM异常,但是方法区GC条件苛刻,GC效率低,GC主要发生在堆区。2.虚拟机栈栈帧的组成虚拟机栈由一个个的栈帧组成,栈帧的大小决定了栈的最大深度,而栈帧的大小主要取决于局部变量表和操作数栈。...
2021-07-05 23:00:33
1148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人