<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weijia521的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weijia521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weijia521]]></copyright><item><title><![CDATA[Linux纯干货知识总结]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109244137</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109244137</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:54:35 +0800</pubDate><description><![CDATA[Linux纯干货知识总结 | 面试专用





绝对路径和相对路径



绝对路径

以正斜杠开始
完整的文件的位置路径
可用于任何想置顶一个文件名的时候

相对路径

不以斜线开始
置顶相对于当前工作目录或某目录的位置
可以作为一个简短的形式指定一个文件名

-基名：basename，就是文件本身的名字

-目录名：dirname ，就是它所在的文件夹名





更改目录

cd 改变目录

使用绝对或相对路径
cd/home/wang
cd home/wang
切换至父目录：cd
切换至以...]]></description><category></category></item><item><title><![CDATA[优雅停止 SpringBoot 服务]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109246301</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109246301</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:53:35 +0800</pubDate><description><![CDATA[优雅停止 SpringBoot 服务，拒绝 kill -9 暴力停止！

Java后端编程7月17日

来源：http://39sd.cn/F2DD1



在使用 SpringBoot 的时候，都要涉及到服务的停止和启动，当我们停止服务的时候，很多时候大家都是kill -9 直接把程序进程杀掉，这样程序不会执行优雅的关闭。而且一些没有执行完的程序就会直接退出。

我们很多时候都需要安全的将服务停止，也就是把没有处理完的工作继续处理完成。比如停止一些依赖的服务，输出一些日志，发一些信号给其他的应用系统，..]]></description><category></category></item><item><title><![CDATA[Java四种引用类型]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109246450</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109246450</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:53:08 +0800</pubDate><description><![CDATA[Java四种引用类型：强引用、软引用、弱引用、虚引用



Java中的四种引用

Java中有四种引用类型：强引用、软引用、弱引用、虚引用。

Java为什么要设计这四种引用

Java的内存分配和内存回收，都不需要程序员负责，都是由伟大的JVM去负责，一个对象是否可以被回收，主要看是否有引用指向此对象，说的专业点，叫可达性分析。

Java设计这四种引用的主要目的有两个：


	可以让程序员通过代码的方式来决定某个对象的生命周期；
	
	
	有利用垃圾回收。
	
强引用

强引用是最普遍的一种引用，我.]]></description><category></category></item><item><title><![CDATA[HashMap 夺命二十一问]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109246160</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109246160</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:51:48 +0800</pubDate><description><![CDATA[面试题汇总：HashMap 夺命二十一问



1：HashMap 的数据结构？

A：哈希表结构（链表散列：数组+链表）实现，结合数组和链表的优点。当链表长度超过 8 时，链表转换为红黑树。





transient Node&lt;K,V&gt;\[\] table;



2：HashMap 的工作原理？

HashMap 底层是 hash 数组和单向链表实现，数组中的每个元素都是链表，由 Node 内部类（实现 Map.Entry接口）实现，HashMap 通过 put &amp; get...]]></description><category></category></item><item><title><![CDATA[一文搞懂主流的扫码登录技术原理]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109245990</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109245990</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:51:02 +0800</pubDate><description><![CDATA[一文搞懂主流的扫码登录技术原理



1、引言

扫码登录这个功能，最早应该是微信的PC端开始搞，虽然有点反人类的功能（不扫码也没别的方式登录），但不得不说还是很酷的。

下面这张图，不管是IM开发者还是普通用户，应该很熟悉：



于是，搞IM产品的老板和产品经理们，从此又多了一个要抛给程序员们的需求——“为什么微信有扫一扫登录，而我们的没有？”。

好吧，每次只要是微信有的功能，IM程序员们想甩锅，难度就有点大了，毕竟老板们都都会想当然认为，微信有的“我”的IM产品里也得有。



既然无法回避，那就.]]></description><category></category></item><item><title><![CDATA[MySQL 主从复制读写分离]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109245045</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109245045</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:50:37 +0800</pubDate><description><![CDATA[一文读懂 MySQL 主从复制读写分离



前言

在很多项目，特别是互联网项目，在使用MySQL时都会采用主从复制、读写分离的架构。

为什么要采用主从复制读写分离的架构？如何实现？有什么缺点？让我们带着这些问题开始这段学习之旅吧！

为什么使用主从复制、读写分离

主从复制、读写分离一般是一起使用的。目的很简单，就是为了提高数据库的并发性能。你想，假设是单机，读写都在一台MySQL上面完成，性能肯定不高。如果有三台MySQL，一台mater只负责写操作，两台salve只负责读操作，性能不就能大大提高.]]></description><category></category></item><item><title><![CDATA[SpringBoot 使用 Redis 缓存]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109245446</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109245446</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:47:59 +0800</pubDate><description><![CDATA[SpringBoot 使用 Redis 缓存





1、pom.xml引入jar包，如下：


&lt;dependency&gt;
  &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt;
&lt;/dependency&gt;



2、修改项目启动类，增加注解@EnableCachin...]]></description><category></category></item><item><title><![CDATA[必须了解的 MySQL 三大日志]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109245336</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109245336</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:42:48 +0800</pubDate><description><![CDATA[必须了解的 MySQL 三大日志



来源：juejin.im/post/6860252224930070536

日志是mysql数据库的重要组成部分，记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。

作为开发，我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log)，本文接下来会详细介绍这三种日志。

binlog

binlog用于记录数据库执行的写入性操作(不包括查询)...]]></description><category></category></item><item><title><![CDATA[11000 字梳理多线程]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109245110</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109245110</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:39:44 +0800</pubDate><description><![CDATA[11000 字梳理多线程



线程

线程和进程的区别

进程是一个可执行的程序，是系统资源分配的基本单位。线程是进程内部相对独立的可执行单元，是操作系统进行任务调度的基本单位。

多线程的优缺点

优点：


	充分利用多核多cpu的资源，提高cpu的使用率，提高了程序的运行效率。缺点：
	
	
	线程数过多会影响性能，操作系统会在线程切换之间增加内存的开销。
	
	
	存在线程同步和安全问题
	
	
	可能产生死锁
	
	
	增加了开发人员的技术难度
	
线程有几种状态

一共五种状态：分别是新建，.]]></description><category></category></item><item><title><![CDATA[13000 字的 Spring MVC 总结]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109244930</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109244930</guid><author>weijia521</author><pubDate>Sun, 25 Oct 2020 23:38:27 +0800</pubDate><description><![CDATA[13000 字的 Spring MVC 总结





概述

SpringMVC再熟悉不过的框架了，因为现在最火的SpringBoot的内置MVC框架就是SpringMVC。我写这篇文章的动机是想通过回顾总结一下，重新认识SpringMVC，所谓温故而知新嘛。

为了了解SpringMVC，先看一个流程示意图：



从流程图中，我们可以看到：


	接收前端传过来Request请求。
	
	
	根据映射路径找到对应的处理器处理请求，处理完成之后返回ModelAndView。
	
	
	进行视图解析，视.]]></description><category></category></item><item><title><![CDATA[JVM 的核心知识]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109244864</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109244864</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 16:21:55 +0800</pubDate><description><![CDATA[15000 字梳理 JVM 的核心知识



前言

随着cpu运行速度的提高和内存的增大，我们的应用程序的用户响应时间和系统吞吐量也发生了质的提高。但是只有硬件设备的提高是不行的，软件的性能和运行在硬件上的虚拟机的各项参数都影响着系统的质量。在越来越多的大厂面试中，jvm逐渐成为面试官青睐的考点。

本文讲解了运行时数据区域，内存溢出，如何判断对象是否存活，垃圾回收算法和垃圾收集器，类加载机制和双亲委派模型以及对象的创建存储和访问几个方面，涵盖jvm的核心考点，希望你有所收获。





运行时数据区..]]></description><category></category></item><item><title><![CDATA[Java 中的内存模型]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109244819</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109244819</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 16:19:44 +0800</pubDate><description><![CDATA[13 张图解 Java 中的内存模型

Java后端8月30日

点击上方Java后端，选择设为星标

优质文章，及时送达

前言


	了解Java中的对象、变量等存放的内存区域十分重要
	
	
	本文将全面讲解Java虚拟机中的内存模型 &amp; 分区，希望你们会喜欢
	
目录



1. 内存模型 &amp; 分区



Java虚拟机在运行Java程序时，会管理着一块内存区域：运行时数据区

在运行时数据区里，会根据用途进行划分：


	Java虚拟机栈（栈区）
	
	
	本地方法栈
	
...]]></description><category></category></item><item><title><![CDATA[史上最全的数据库面试题，不看绝对后悔]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109244744</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109244744</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 16:17:38 +0800</pubDate><description><![CDATA[史上最全的数据库面试题，不看绝对后悔

追寻自我Java后端8月28日

点击上方Java后端，选择设为星标

优质文章，及时送达

一、基本概念

1.主键、外键、超键、候选键

超键：在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键，多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。

候选键：是最小超键，即没有冗余元素的超键。

主键：数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键，且主键的取值不能缺失，即不能为空...]]></description><category></category></item><item><title><![CDATA[分布式锁用 Redis 还是 Zookeeper]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109243943</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109243943</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:48:26 +0800</pubDate><description><![CDATA[分布式锁用 Redis 还是 Zookeeper

为什么用分布式锁？

在讨论这个问题之前，我们先来看一个业务场景：

系统A是一个电商系统，目前是一台机器部署，系统中有一个用户下订单的接口，但是用户下订单之前一定要去检查一下库存，确保库存足够了才会给用户下单。

由于系统有一定的并发，所以会预先将商品的库存保存在redis中，用户下单的时候会更新redis的库存。

此时系统架构如下：



但是这样一来会产生一个问题：假如某个时刻，redis里面的某个商品库存为1，此时两个请求同时到来，其中一个请求执]]></description><category></category></item><item><title><![CDATA[最简单的 6 种防止数据重复提交的方法]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109243784</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109243784</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:42:17 +0800</pubDate><description><![CDATA[最简单的 6 种防止数据重复提交的方法！(干货)



有位朋友，某天突然问磊哥：在 Java 中，防止重复提交最简单的方案是什么？

这句话中包含了两个关键信息，第一：防止重复提交；第二：最简单。

于是磊哥问他，是单机环境还是分布式环境？

得到的反馈是单机环境，那就简单了，于是磊哥就开始装*了。

话不多说，我们先来复现这个问题。

模拟用户场景

根据朋友的反馈，大致的场景是这样的，如下图所示：



简化的模拟代码如下（基于 Spring Boot）：


importorg.springfr..]]></description><category></category></item><item><title><![CDATA[Spring Security]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109243695</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109243695</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:39:57 +0800</pubDate><description><![CDATA[万字搞定 Spring Security！

小小____Java后端7月12日





链接：22j.co/bBbq

权限系统躲不开的概念，在Shiro和Spring Security之间，你一般选啥？在前后端分离的项目中，你知道怎么Spring security整合JWT么，来看看这篇文章哈！

思维导图如下：



RBAC 全称为基于角色的权限控制，本段将会从什么是 RBAC，模型分类，什么是权限，用户组的使用，实例分析等几个方面阐述 RBAC.

思维导图

绘制思维导图如下什么是 R...]]></description><category></category></item><item><title><![CDATA[RabbitMQ 总结]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109243601</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109243601</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:34:10 +0800</pubDate><description><![CDATA[非常强悍的 RabbitMQ 总结，写得真好





RabbitMQ是基于AMQP协议的，通过使用通用协议就可以做到在不同语言之间传递。

AMQP协议

核心概念


	server：又称broker，接受客户端连接，实现AMQP实体服务。
	
	
	connection：连接和具体broker网络连接。
	
	
	channel：网络信道，几乎所有操作都在channel中进行，channel是消息读写的通道。客户端可以建立多个channel，每个channel表示一个会话任务。
	
	
	mes..]]></description><category></category></item><item><title><![CDATA[一个HTTP请求的曲折经历]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109242996</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109242996</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:13:47 +0800</pubDate><description><![CDATA[一个HTTP请求的曲折经历





从一个经典的面试题说起，输入URL到页面展现的过程:


	输入URL后，会先进行域名解析。优先查找本地host文件有无对应的IP地址，没有的话去本地DNS服务器查找，还不行的话，本地DNS服务器会去找根DNS服务器要一个域服务器的地址进行查询，域服务器将要查询的域名的解析服务器地址返回给本地DNS，本地DNS去这里查询就OK了。
	
	
	浏览器拿到服务器的IP地址后，会向它发送HTTP请求。HTTP请求经由一层层的处理、封装、发出之后，最终经由网络到达服务器，...]]></description><category></category></item><item><title><![CDATA[一口气说出 6 种 @Transactional 注解的失效场景]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109242925</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109242925</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:11:15 +0800</pubDate><description><![CDATA[一口气说出 6 种 @Transactional 注解的失效场景





一、事务

事务管理在系统开发中是不可缺少的一部分，Spring提供了很好事务管理机制，主要分为编程式事务和声明式事务两种。

编程式事务：是指在代码中手动的管理事务的提交、回滚等操作，代码侵入性比较强，如下示例：


try{
//TODO something
transactionManager.commit(status);
}catch(Exceptione) {
transaction...]]></description><category></category></item><item><title><![CDATA[面试官：你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景]]></title><link>https://blog.youkuaiyun.com/weijia521/article/details/109242873</link><guid>https://blog.youkuaiyun.com/weijia521/article/details/109242873</guid><author>weijia521</author><pubDate>Fri, 23 Oct 2020 15:08:52 +0800</pubDate><description><![CDATA[面试官：你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

数据库开发今天


来自公众号：小林coding


前言



那在编程世界里，「锁」更是五花八门，多种多样，每种锁的加锁开销以及应用场景也可能会不同。

如何用好锁，也是程序员的基本素养之一了。

高并发的场景下，如果选对了合适的锁，则会大大提高系统的性能，否则性能会降低。

所以，知道各种锁的开销，以及应用场景是很有必要的。

接下来，就谈一谈常见的这几种锁：



正文

多线程访问共享资源的时候，避免不了资源竞争而导致数据错乱的..]]></description><category></category></item></channel></rss>