面试
文章平均质量分 94
程序员世杰
公众号『程序员世杰』,就职过各互联网大厂,资深码农,专注Java后端技术栈、AIGC等领域的技术分享
展开
-
Java实现阻塞队列+生产者消费者
Java实现阻塞队列package test.blockqueue;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class BlockQueue<T...原创 2020-03-28 23:07:25 · 594 阅读 · 0 评论 -
Tomcat的非双亲委派加载
一、tomcat的非双亲委派加载双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。【违背双亲委派】: tomcat 为了实现隔离性,没有遵守这个约定,每个 webappClassLoader 加载自己的目录下的 class 文件,不会传递给父类加载器。例如:如果 tomcat 的 Common ClassLoader 想加载 WebApp ClassLo...原创 2020-03-27 11:06:09 · 295 阅读 · 0 评论 -
面试题目补充
1.Spring 的 AOP 关于拦截 private 方法一些问题用 java 反射机制可以获取 private 修饰的方法,进行拦截。注意,私有构造函数需要设置使用权限conInt.setAccessible(true);否则报错2.项目中数据字典怎么做的缓存,如何做的通信,有没有用什么模块。3. spring 事务传播行为的配置方法:(1)spring 对事务传播行为和隔离级别的二次...原创 2020-03-24 14:59:03 · 281 阅读 · 0 评论 -
反射与代理模式
一、反射(一)概述JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。实际上,我们创建的每一个类也都是对象,即类本身是 java.lang.Class 类的实例对象。这个实例对象称之为类对象,也就是 Class 对象。反射就是把 ...原创 2020-03-09 22:16:14 · 1905 阅读 · 0 评论 -
Java对象克隆详解
全局变量和局部变量值传递和引用传递序列化和反序列化深拷贝和浅拷贝原创 2020-03-09 15:27:36 · 756 阅读 · 1 评论 -
Java异常详解
一、异常分类1.Java 标准库内建了一些通用的异常,这些类以 Throwable 为顶层父类。Throwable 又派生出 Error 类和 Exception 类。错误:Error 类以及他的子类的实例,代表了 JVM 本身的错误。错误不能被程序员通过代码处理,Error 很少出现。因此,程序员应该关注 Exception 为父类的分支下的各种异常类。异常:Exception...原创 2020-03-09 11:16:59 · 691 阅读 · 0 评论 -
数据库优化详解
一、优化方向可以看出来,数据结构、SQL、索引是成本最低,且效果最好的优化手段。数据库优化从以下几个方面优化:数据库设计—三大范式、字段、表结构数据库索引存储过程 (模块化编程,可以提高速度)分表分库 (水平分割,垂直分割)主从复制、读写分离SQL 调优对 MySQL 配置优化 (配置最大并发数 my.ini, 调整缓存大小)定时清除不需要的数...原创 2020-03-06 10:59:44 · 2126 阅读 · 0 评论 -
数据库面试知识点(八)内连接,外连接,左连接,右连接,全连接
数据库中内连接和外连接其实可以理解为交集与并集 ,内连接看做是取两个表的交集 其中只有两条互相对应着的数据才能被存入结果表中 而外连接就是取并集 和内连接是相反的 如果一张表的数据在另一张表中没有找到 但是并不影响他在结果集出现 。一、内连接以下三种都是内连接语法:inner join…onjoin…oncross join…on【示例】mysql&...原创 2020-03-04 22:29:17 · 1210 阅读 · 2 评论 -
数据库面试知识点(七)主从复制和读写分离
【Java 面试那点事】这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】面试路上,你不孤单!...原创 2020-03-04 16:04:36 · 1448 阅读 · 0 评论 -
数据库面试知识点(六)数据库锁
一、锁的种类(一)悲观锁(Pessimistic Lock):悲观锁特点: 先获取锁,再进行业务操作。即 “悲观” 的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。通常所说的 “一锁二查三更新” 即指的是使用悲观锁。通常来讲在数据库上的悲观锁需要数据库本身提供支持,即通过常用的 select … for update 操作来实现悲观锁。当数据库执行 select for...原创 2020-03-04 12:09:20 · 639 阅读 · 0 评论 -
数据库面试知识点(五)数据库优化相关概念
【Java 面试那点事】这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】面试路上,你不孤单!...原创 2020-03-04 10:42:13 · 979 阅读 · 0 评论 -
数据库面试知识点(四)存储引擎
1.MySQL 常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别?【Java 面试那点事】这里致力于分享 Java 面试路上的各种知识,无论是技术还是经验,你需要的这里都有!这里可以让你【快速了解 Java 相关知识】,并且【短时间在面试方面有跨越式提升】面试路上,你不孤单!...原创 2020-03-04 10:25:51 · 772 阅读 · 0 评论 -
SQL注入攻击详解
一、什么是SQL注入SQL 注入(SQLi)是一种注入攻击,,可以执行恶意 SQL 语句。它通过将任意 SQL 代码插入数据库查询,使攻击者能够完全控制 Web 应用程序后面的数据库服务器。攻击者可以使用 SQL 注入漏洞绕过应用程序安全措施;可以绕过网页或 Web 应用程序的身份验证和授权,并检索整个 SQL 数据库的内容;还可以使用 SQL 注入来添加,修改和删除数据库中的记录。SQL 注...原创 2020-03-03 17:23:20 · 8186 阅读 · 1 评论 -
HTTP协议的补充(POST、GET请求方法、幂等性)
一、幂等性1.定义:HTTP 方法的幂等性是指一次和多次请求某一个资源应该具有同样的副作用。说白了就是,同一个请求,发送一次和发送 N 次效果是一样的!幂等性是分布式系统设计中十分重要的概念,而 HTTP 的分布式本质也决定了它在 HTTP 中具有重要地位。我们不能轻易假设分布式环境的可靠性。【问题】withdraw 的语义是从 account_id 对应的账户中扣除 amount 数额...原创 2020-03-02 16:31:31 · 2655 阅读 · 0 评论 -
剑指offer刷题总结——树篇(三)
星级:11.按之字形顺序打印二叉树【题目】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。【代码】package swear2offer.tree;import java.util.ArrayList;import java.util.LinkedList;import java....原创 2020-03-01 21:26:35 · 441 阅读 · 0 评论 -
剑指offer刷题总结——数组篇(五)
1.数字在排序数组中出现的次数【题目】统计一个数字在排序数组中出现的次数。【代码】public int GetNumberOfK(int [] array , int k) { if (array.length==0 || array==null) return 0; int i,n,count; n = array.length; ...原创 2020-02-29 18:16:14 · 488 阅读 · 0 评论 -
剑指offer刷题总结——数组篇(四)
1.数组中的逆序对【题目】在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数 P。并将 P 对 1000000007 取模的结果输出。 即输出 P%1000000007题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%1...原创 2020-02-29 15:51:12 · 467 阅读 · 0 评论 -
剑指offer刷题总结——字符串篇(一)
星级:11.字符串的排列【题目】输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc, 则打印出由字符 a,b,c 所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba。输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。【代码】package swear2offer.strs;import java.util...原创 2020-02-27 10:58:14 · 552 阅读 · 1 评论 -
剑指offer刷题总结——树篇(二)
星级:11.二叉树中和为某一值的路径【题目】输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。【代码】 /** * 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路...原创 2020-02-26 10:46:48 · 419 阅读 · 0 评论 -
剑指offer刷题总结——数组篇(三)
1.顺时针打印矩阵【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4 矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.【代码】public ArrayList<Integer> printMatr...原创 2020-02-24 20:51:40 · 499 阅读 · 0 评论 -
剑指offer刷题总结——数组篇(二)
1.斐波那契数列【题目】大家都知道斐波那契数列,现在要求输入一个整数 n,请你输出斐波那契数列的第 n 项(从 0 开始,第 0 项为 0)。【代码】package swear2offer.array;public class FeiBoNaQi { /** * 大家都知道斐波那契数列,现在要求输入一个整数 n, * 请你输出斐波那契数列的第 n 项(...原创 2020-02-23 16:55:28 · 478 阅读 · 0 评论 -
剑指offer刷题总结——堆、栈、队列篇
1.用两个栈实现队列【题目】用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。 队列中的元素为 int 类型。【代码】package swear2offer.construction;import java.util.Stack;public class StackToQueue { /** * 用两个栈来实现一个队列,完成队列的 Push 和 P...原创 2020-02-22 16:58:23 · 501 阅读 · 0 评论 -
剑指offer刷题总结——树篇(一)
1.重建二叉树【题目】输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6},则重建二叉树并返回。【代码】package swear2offer.tree;public class ReCreateTree { ...原创 2020-02-22 12:17:01 · 521 阅读 · 0 评论 -
剑指offer刷题总结——链表篇(一)
1.从尾到头打印链表【题目】输入一个链表,按链表从尾到头的顺序返回一个 ArrayList。【代码】package swear2offer.linkednode;import java.util.ArrayList;public class ReturnArrayList { /** * 输入一个链表,按链表从尾到头的顺序返回一个 ArrayList。 ...原创 2020-02-22 10:57:19 · 524 阅读 · 0 评论 -
剑指offer刷题总结——数组篇(一)
1.排序次序【题目】返回一个数字数组的排序值,比如数据 [6,2,5,0] 的返回是 [4,2,3,1]【代码示例】package swear2offer.array;import java.util.Arrays;public class SortSequence { /** * 返回一个数字数组的排序值 * 比如数据 [6,2,5,0] 的返回是 [...原创 2020-02-21 16:03:10 · 1149 阅读 · 0 评论 -
DDoS 攻击详解
一、介绍1.什么是DDoS全称 Distributed Denial of Service,中文意思为 “分布式拒绝服务”,就是利用大量合法的分布式服务器对目标发送请求,从而导致正常合法用户无法获得服务。通俗点讲就是利用网络节点资源如:IDC 服务器、个人 PC、手机、智能设备、打印机、摄像头等对目标发起大量攻击请求,从而导致服务器拥塞而无法对外提供正常服务,只能宣布 game over。2...原创 2020-02-20 21:36:56 · 2718 阅读 · 0 评论 -
网络攻击(XSS、CSRF)详解
一、XSS(一)XSS 原理Xss(cross-site scripting) 攻击:全称跨站脚本攻击,通过向某网站写入 js 脚本或插入恶意 html 标签来实现攻击。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取 cookie 中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。(二...原创 2020-02-20 20:14:52 · 2853 阅读 · 0 评论 -
Https 加密过程详解
一、Https介绍HTTPS 是 HyperText Transfer Protocol Secure 缩写,相较于 HTTP,突出了安全!因为在网络信息传输过程中服务端和客户端的信息都会被 SSL,TSL 加密,在传输的过程中,即便被截取了,别人也不知道你们的会话内容是什么,只有收发方才有对应的密钥去解开,再对内容进行回应。其中的原理就是:服务端和客户端都有两把钥匙:公钥和私钥,公钥用来加密数...原创 2020-02-20 17:44:27 · 1506 阅读 · 5 评论 -
Http/1.0、Http/1.1、Http2
一、HTTP1.建立连接和断开连接(三次握手和四次挥手)HTTP 是 HyperText Transfer Protocol 的缩写,译为超文本传输协议。是一种应用于 OSI 七层模型中应用层的协议,是我们平常互联网网络通信传输的基础。它的作用就是规定了服务器和客户端之间的建立连接,请求数据,响应数据,关闭连接(我们常说的三次握手,四次挥手)。进行请求阶段:进行三次握手:1. 客户端向服务...原创 2020-02-17 17:04:48 · 726 阅读 · 1 评论 -
【自用】刷算法题路径
知识点总结:排序算法(堆排序、快排、归并)动态规划回溯算法链表、二叉树、数组、堆、栈路径:把总结的题目复习一遍复习牛客网的剑指offer66道题目LeetCode题目进行针对性训练...原创 2020-02-17 16:11:45 · 179 阅读 · 0 评论 -
Linux IO 模式及 select、poll、epoll 详解
一、概念说明1、内核态(内核空间)和用户态(用户空间)的区别和联系?用户空间是用户进程所在的内存区域,系统空间是操作系统所在的内存区域。为了保证内核的安全,处于用户态的程序只能访问用户空间,而处于内核态的程序可以访问用户空间和内核空间。2、文件描述符 fdLinux 将所有设备都当做文件来处理,文件描述符来标识每个文件对象。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个...原创 2020-02-17 16:01:39 · 812 阅读 · 0 评论 -
操作系统知识点回顾—互斥和同步
一、概念1.同步指在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。2.互斥指散布在不同进程之间的若...原创 2020-02-17 11:19:07 · 1073 阅读 · 0 评论 -
操作系统知识点回顾—内存和中断
一、虚拟内存(一)概念1.定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充得一种存储器系统。其逻辑容量由内存之和和外存之和决定。2.与传统存储器比较虚拟存储器有以下三个主要特征:多次性,是指无需在作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行。对换性,是指无需在作业运行时一直常驻内存,而是允许在作业的运行过程中,进行换进和换出。虚拟性,是指从逻辑上扩充...原创 2020-02-16 16:49:53 · 1530 阅读 · 1 评论 -
操作系统知识点回顾—线程进程部分
一、进程的通信方式1.管道:管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的道端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单的流控制机制。进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样地,管道已经满时,进程再试图写管道,在其它进程从管道中移...原创 2020-02-02 10:39:49 · 694 阅读 · 1 评论 -
Lock底层原理
一、概述Lock 有三个实现类,一个是 ReentrantLock, 另两个是 ReentrantReadWriteLock 类中的两个静态内部类 ReadLock 和 WriteLock。LOCK 的实现类其实都是构建在 AbstractQueuedSynchronizer 上,为何图中没有用 UML 线表示呢,这是每个 Lock 实现类都持有自己内部类 Sync 的实例,而这个 Sync...原创 2020-01-19 11:03:55 · 6184 阅读 · 0 评论 -
多线程不安全的底层原因以及两种加锁方式的区别
如何保证多线程的安全运行1.线程的安全性问题体现在:原子性:一个或者多个操作在 CPU 执行的过程中不被中断的特性可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到有序性:程序执行的顺序按照代码的先后顺序执行2.导致原因:缓存导致的可见性问题线程切换带来的原子性问题编译优化带来的有序性问题3.解决办法:JDK Atomic 开头的原子类、synchronize...原创 2020-01-19 10:36:27 · 4566 阅读 · 0 评论 -
synchronized的底层实现
一、概念作用确保线程互斥的访问同步代码保证共享变量的修改能够及时可见有效解决重排序问题2.使用场景修饰代码块修饰方法(普通方法和静态方法)3.可重入锁和不可重入锁重入锁:如果某个线程试图获取一个已经由他自己持有的锁,这个请求可以成功,那么此时的锁就是可重入锁不可重入锁:当前线程执行某个方法已经获取了该锁,那么在方法中尝试再次获取锁时,就会获取不到被阻塞。不可重入锁...原创 2020-01-17 17:26:42 · 1361 阅读 · 0 评论 -
atomic 包底层实现原理
一、概念介绍(一)volatile关键字Java 因为指令重排序,优化我们的代码,让程序运行更快,也随之带来了多线程下,指令执行顺序的不可控。1.volatile关键字的作用:内存可见性,修饰的变量发生改变之后对所有线程立即可见禁止指令重排序volatile的底层是通过内存屏障实现的,第一个作用是禁止指令重排。内存屏障另一个作用是强制更新一次不同 CPU 的缓存。synchron...原创 2020-01-17 16:41:33 · 3454 阅读 · 1 评论 -
集合(List、Set)遍历和Iterator迭代器
一、Iterator迭代器1.介绍迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为 “轻量级” 对象,因为创建它的代价小。Iterator,所有的集合类,都实现了 Iterator 接口(因为Collection 接口继承Iterator接口),这是一个用于遍历集合中元素的接口,并且只能单向移动。主要包含以下三种方法:...原创 2020-01-14 15:21:12 · 1966 阅读 · 2 评论 -
ConcurrentHashMap线程安全的实现原理
一、介绍1.概念ConcurrentHashMap是HashMap的线程安全版本,相对 HashMap 和 Hashtable, ConcurrentHashMap 增加了 Segment 层,每个 Segment 原理上等同于一个 Hashtable, ConcurrentHashMap 为 Segment 的数组。向 ConcurrentHashMap 中插入数据或者读取数据,首先都要讲...原创 2020-01-13 15:16:41 · 2084 阅读 · 1 评论