- 博客(28)
- 收藏
- 关注
原创 JAVA 面试 MySQL
2、善用EXPLAIN分析,在定位到一个慢SQL后,使用EXPLAIN查看SQL的执行计划,重点关注type、possible_keys和key、rows及Extra列。”,只获取需要的字段,减少网络传输和内存消耗,并且如果能走覆盖索引不用回表的话性能也会有很大提高。关于MySQL的性能优化,可以从SQL和索引优化、设计优化、配置优化、硬件优化等维度来分析。首先是SQL和索引优化,这部分优化的成本最低,一般80%的问题都可以通过SQL和索引优化。设计优化,良好的设计是高性能的基石。
2025-09-09 22:05:16
760
原创 JAVA 面试 分布式锁
另外就是超时问题的处理,可以设置一个足够长的值,来保证一定会完成,但是如果太长,宕机时又会导致其他服务都卡死在这里,这个时候接需要使用看门狗机制,在主线程执行业务逻辑的同时,让一个子线程不断给锁续期,直到主线程执行完业务逻辑,然后才会释放锁,redis对此有专门的Redisson来处理,使用起来很简单。针对释放其他的服务的分布式锁的问题,可以设置一个识别是自己的值,可以是一个uuid,在删除前判断一下是否是自己加的锁,是自己的锁才会释放锁。我们可以通过setnx命令简单的实现一个分布式锁。
2025-09-07 16:48:33
436
原创 JAVA 面试 Redis
方案二有可能导致数据不一致问题,写线程A先删除缓存,然后读线程B进来发现没有缓存,就会去数据库读取缓存,把旧数据放到缓存,然后A再更新数据库数据,数据就不一致了,而且高并发下这种情况很容易出现。但是极端情况下,还是可能会导致数据不一致,就是读线程A读缓存,发现没有缓存,然后再去数据库读数据,但是还没有写入缓存,这时写线程B进来把数据更新了,然后删除缓存,然后A把读到的旧数据写入到了缓存,导致数据不一致。另一个是写线程,写线程有两个方案,方案一是先更新数据库,再删除缓存,方案二是先删除缓存,再更新数据。
2025-09-07 16:01:37
688
原创 JAVA 面试 分布式事务
在我看来,分布式事务分为跨库事务和跨服务事务两种。事务有ACID四大特性,保证了数据的强一致性。但是分布式系统不太一样,首先说一下CAP理论,这是分布式领域的公认定理。在使用2PC提交时,AP接收到请求后,访问TM发起全局事务,进入阶段一提交事务阶段,向所有分支事务发送事务内容,在分支事务执行完时候操作后返回是否执行成功,TM接收到所有的分支事务都执行成功的信息后,就会进入阶段二执行事务提交阶段,给所有分支事务发送Commit请求,分支事务接收到Commit请求后,会提交分支事务,然后释放连接资源,当所有
2025-09-06 23:29:20
785
原创 JAVA 面试 Spring事务
因此可以通过rollbackFor来配置需要回滚的异常,与之对应的还有noRollbackFor属性,配置不需要回滚的异常,这两个属性配置的是Class对象,另外还有rollbackForClassName和noRollbackForClassName,通过品类全路径名配置。Spring事务使用分为编程式事务和声明式事务,编程式事务像MySQL的事务一样,显式的通过Start和commit开始和提交,不常用,我们常用的是声明式事务,也就是在方法上加一个@Transactional 来使用。
2025-09-06 07:23:40
1055
原创 JAVA 面试 Spring
答题思路:首先介绍一下项目中的使用,然后讲一下底层AOP就是面向切面编程,它是一种编程范式,用于将那些散布在应用程序多处、与核心业务逻辑无关的公共功能(通常称为‘横切关注点’)剥离出来,进行模块化封装。在项目中,经常会有一些重复的代码,如日志记录、安全权限校验、事务管理等,如果不使用AOP,这些代码就会零散的嵌入各个业务方法中,出现很多重复代码,导致代码混乱难以维护。
2025-09-03 22:59:19
1582
原创 Boolean
1、构造函数Boolean(String s)传入"true"返回 true ,忽略大小写Boolean(boolean value)2、静态变量public static final Boolean FALSE = new Boolean(false);public static final Boolean TRUE = new Boolean(true);...
2020-01-17 15:15:00
366
1
原创 修改mysql数据库密码
1. 设置无密码登录编辑/etc/my.cnf 添加 skip-grant-tables 不实用密码登录MySQL下边是样例[mysqld]datadir=/usr/local/mysql/databasedir=/usr/local/mysqlsocket=/tmp/mysql.sockuser=mysqlport=3306character-set-server=utf8...
2020-01-14 13:55:05
193
原创 linux安装mysql
1、下载tar包2、将mysql安装到/usr/local/mysql下 1. 解压tar -xvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 2. 移动mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/ 3. 重命名mv /usr/local/mysql-5.7.22-linux-gli...
2020-01-14 13:48:06
223
原创 javax.servlet.http.HttpServletRequest一些路径
HttpServletRequest request请求:http://localhost:8080/hellorequest.getRequestURI() —— /hellorequest.getRequestURL() —— http://localhost:8080/hellorequest.getServletPath() —— /hellorequest.getRemote...
2020-01-08 11:19:28
249
原创 Mybatis插入数据返回主键ID
dao.java,必须是Entitylong add(Entity Entity);dao.xml,useGeneratedKeys=“true” keyProperty=“id”。keyProperty写主键ID<insert id="add" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterTyp...
2020-01-07 17:03:39
210
原创 Java收藏
1.Switch的参数类型 Only convertible int values, strings or enum variables are permitted 只允许使用可转换的int值,字符串或枚举变量byte、char、short、int、String可以使用long、float、double、boolean不可以使用以及他们对应的包装类2. char型变量中能不能存...
2019-09-20 14:22:36
264
原创 Java特殊关键字和保留字
关键字assert表示“断言”,两种使用方法:1.若表达式为真,程序继续执行,否则抛出AssertionError异常assert 表达式assert false ;2.与第一种相同,只是异常中有自己设置的错误信息;assert 表达式:错误信息;assert false : "哈哈哈!错误!不能继续执行了";constJava的保留关键字,没有实际意义,但是不...
2019-09-17 18:26:14
421
原创 HTTP头部信息
通用头(General)Request URL: 请求的urlRequest Method: 请求的方法,GET、POSTStatus Code: 状态码(常用状态码)Remote Address: 远程IP地址Referrer Policy: no-referrer-when-downgrade响应头(Response Header)Cache-Control: 用来指定当前的请求...
2019-09-15 18:12:11
2157
原创 Linux
1.linux 查看端口是否被监听查看指定的端口号的进程情况netstat -anutp | grep 80-a 显示所有-n 以ip形式显示当前建立的有效连接和端口-u 显示UDP协议-t 显示TCP协议-p 显示对应PID与程序名查看某一端口的占用情况lsof -i:80...
2019-09-15 15:19:29
168
转载 Cloneable接口和Object的clone()方法
Java中实现了Cloneable接口的类有很多。像我们熟悉的ArrayList、Calendar、Date、HashMap、Hashtable、HashSet、LinkedList 等等。1、Cloneable 接口(1)一个类如果实现了 Cloneable 接口,就表示 Object 的 clone() 方法可以合法地对该类实例进行按字段复制。(2)如果在没有实现 Cloneabl...
2019-09-15 08:59:15
211
原创 Java的理解
1.简单Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。2.面向对象Java语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持...
2019-09-14 14:33:39
457
转载 Java 程序员常用资源工具集合(建议收藏)
搜索资源网站学习技术过程我们经常需要使用搜索引擎来检索资料,国内常用的也就是某度了。当然有条件的话,搜索引擎首先还是推荐使用 Google,如果没办法使用,可以使用以下几个作为备用:BingBing 国际版:https://cn.bing.com/比某度好用,之前还被停用了几天,最近可以了。DuckDuckGoDuckDuckGo:https://duckduckgo.com/从官...
2019-09-14 13:46:12
161
原创 Java反射应用
1. 获取一个Class对象其中Class<?> 和Class<? extends Object>等效,可以接收所有java类//方法一:新建一个对象,调用它的getClass()方法Object object = new Object();Class<? extends Object> c1 = object.getClass();//方法二:直接调...
2019-09-11 11:54:29
312
1
原创 两个链表,可能有环,可能无环;可能相交,可能不相交;若相交,返回相交的第一个节点,若不相交,返回null。
初始头结点分别为 node1、node6 Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node node5 = new Node(5); Node node6 = new Node(6); Node node...
2019-09-10 18:19:26
244
原创 原型模式
定义 用一个已经创建的实例作为原型,通过复制该对象来创建一个与原型相同或相似的新对象。UML图原型模式的实现深拷贝和浅拷贝1.浅拷贝直接使用Object的clone()方法public class Sex { private String type; public Sex() { super(); } public Sex(String type) { s...
2019-09-10 11:25:15
154
原创 单例模式
定义一个类只有一个实例,且该类能自行创建这个实例的一种模式。特点只有一个实例对象。该实例对象必须由单例类自行创建。单例类对外提供一个访问该类的方法。UML图单例模式的实现主要有两种:饿汉式单例、懒汉式单例饿汉式单例类一旦加载就创建为一个实例对象,保证在调用getInstance()方法前该实例对象就已经存在懒汉式单例类加载时不创建唯一实例,在调用getInsta...
2019-09-10 10:11:23
123
原创 数据库MySQL
1.数据库NULL值NULL和0不能比较,不等价;sql语句不能使用比较运算符,例如 + < >,必须使用 IS NULL 和IS NOT NULL操作符。
2019-09-09 21:35:42
252
原创 一篇搞定23种设计模式
设计模式设计模式是面向对象中反复出现的问题的解决方案,是有众多软件开发人员经过长时间的实现和错误总结出来的,可以说是最佳的经验。使用设计模式可以增加代码的可重要性、可读性、可靠性。软件开发的七项原则开闭原则:对扩展开放,对修改关闭。历史替换原则:继承必须保证父类所拥有的性质在子类中仍然成立。依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖...
2019-09-09 21:26:06
199
原创 String相关
String相关1.String、StringBuffer和StringBuilder的区别String和StringBuilder线程不安全,StringBuffer线程安全;String不可变,StringBuffer和StringBuilder可变;运行效率从快到慢:StringBuilder > StringBuffer > String;(StringBuffer基...
2019-09-09 15:33:38
127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅