<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Liar_27的博客]]></title><description><![CDATA[毕业设计学习相关]]></description><link>https://blog.youkuaiyun.com/Liar_27</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Liar_27]]></copyright><item><title><![CDATA[组内应用频繁FullGC问题排查过程记录]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/127480326</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/127480326</guid><author>Liar_27</author><pubDate>Sun, 23 Oct 2022 21:51:42 +0800</pubDate><description><![CDATA[JVM FullGC问题排查过程记录]]></description><category></category></item><item><title><![CDATA[TPM Emulator简单使用流程记录]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/109806094</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/109806094</guid><author>Liar_27</author><pubDate>Thu, 19 Nov 2020 12:09:49 +0800</pubDate><description><![CDATA[1、首先打开三个teminal

2、第一个用来初始化及启动tpm emulator
初始化：
tpmd deactivated
killall tpmd
tpmd clear

启动：
modprobe tpmd_dev

此时我的本机会出现

此时执行：
depmod -a

继续启动 流程：
tpmd -f -d clear

此时本机出现：

此时执行：
rm /var/run/tpm/tpmd_socket:0

最后再次执行：
tpmd -f -d clear

出现下图内容表示启动成功：

3]]></description><category></category></item><item><title><![CDATA[Ubuntu下常见问题解决方法汇总]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/109571051</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/109571051</guid><author>Liar_27</author><pubDate>Mon, 09 Nov 2020 10:53:24 +0800</pubDate><description><![CDATA[1、更换软件源（国外的源下载速度太慢，最好换成国内的源）
等到再次遇到再更新…
2、下载软件时无法获得锁
现象一

在apt-get install时报错，是由于Linux只允许开一个apt-get，当前存在某个进程占用着这个锁，又因为锁本质就是指定一块内存作为锁，因此有两种方法解决该问题：
（1）直接删除该锁
（2）找到占用这个锁的进程，杀掉这个进程
现象二

解决方法同上
具体命令参考：
https://blog.youkuaiyun.com/ryuali2010/article/details/7831796?u]]></description><category></category></item><item><title><![CDATA[Java标准输入Scanner中的hasNext如何终止（校招笔试踩坑）]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/109063297</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/109063297</guid><author>Liar_27</author><pubDate>Tue, 13 Oct 2020 23:27:48 +0800</pubDate><description><![CDATA[校招时由于有些公司的题的输入是一个数组，但是没有告知数组的长度，所以在使用hasNext时会形成死循环，退出死循环正常来讲只能在while中加入条件来判断，满足条件后break。有些公司直接没有终止符的提示，但是在做携程的笔试题时给了以“#”为终止符，但是笔试时还是没有弄明白如何处理。在用sc.next()判断是否等于“#”时，会将该输入用来作为判断使用，也就是把输入数据“吞了”，笔试后查了查资料，写了个demo测试了一下在这里做一个记录：
利用hasNext的重载方法：
public class Stan]]></description><category></category></item><item><title><![CDATA[数据库建表的一些约束与规则]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/109011316</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/109011316</guid><author>Liar_27</author><pubDate>Sun, 11 Oct 2020 14:38:58 +0800</pubDate><description><![CDATA[一、MySQL数据类型选择问题：
1、整形的存储可选类型：
tinyint
smallint
mediumint
int
bigint
int（10）括号中的10是指显示的宽度，而与存储空间无关。实际上这里的n非常鸡肋，几乎没有什么应用场景。这个n无论填什么数班都不影响存储环节，仅影响在检索时的输出格式，而且在非常严格的情况下才会成立。
具体的MySQL于Java的数据类型对应关系：
https://blog.youkuaiyun.com/diyu122222/article/details/78951467
二、汉字]]></description><category></category></item><item><title><![CDATA[Java官方文档为什么不建议用Stack实现栈的功能？]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/107400968</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/107400968</guid><author>Liar_27</author><pubDate>Fri, 17 Jul 2020 09:43:11 +0800</pubDate><description><![CDATA[JDK的官方文档不建议使用Stack实现栈的功能，转而使用Deque接口的ArrayDeque实现栈的功能。
当初 JDK1.0 在开发时，可能为了快速的推出一些基本的数据结构操作，所以推出了一些比较粗糙的类。比如，Vector、Stack、Hashtable等。这些类中的一些方法加上了 synchronized 关键字，容易给一些初级程序员在使用上造成一些误解！而且在之前的几个版本中，性能还不怎么好。
基于 Vector 实现的栈 Stack。底层实际上还是数组，所以还是存在需要扩容。Vector 是由数]]></description><category></category></item><item><title><![CDATA[删除表内数据使id重新从1增长（truncate和delete）]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106612113</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106612113</guid><author>Liar_27</author><pubDate>Mon, 08 Jun 2020 11:30:29 +0800</pubDate><description><![CDATA[问题情形：
在创建数据库进行测试时，插入了很多测试数据，等到正式上线时，需要删除所有测试时产生的数据，但删除后新生成数据时id不再从头开始，而是接之前产生数据的序号。
解决方法：改delete为truncate
TRUNCATE TABLE TABLENAME;

TRUNCATE删除数据时，速度比DELETE快，它通过释放表数据所用的数据页来删除数据，DELETE是一行一行删除，在日志中也可以做查询。TRUNCATE删除所有行，表结构、列、索引、约束等保持不变;delete可根据条件删除表中满足条件的数据]]></description><category></category></item><item><title><![CDATA[Spring的@Transactional事务包裹和事务回滚]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106238958</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106238958</guid><author>Liar_27</author><pubDate>Sat, 30 May 2020 16:42:49 +0800</pubDate><description><![CDATA[Spring的事务是根据异常来进行回滚操作的
Java的异常包括Error和Exception（Error主要是虚拟机的原因）
Exception又包括RuntimeException和其他
按照编译器是否会检查又分为Checked和Unchecked
Checked包括Exception中除RuntimeException的异常
Unchecked包括Error和RuntimeException
具体见下图



spring aop  异常捕获原理：被拦截的方法需显式抛出异常，并不能经任何处理，这样ao]]></description><category></category></item><item><title><![CDATA[Exception捕捉的全局处理的两种实现方式]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106427628</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106427628</guid><author>Liar_27</author><pubDate>Sat, 30 May 2020 16:15:52 +0800</pubDate><description><![CDATA[场景描述：
公司内部的一些微服务偶尔会出现问题，服务请求超时或一些其他问题。因此需要做一个服务监控的模块，每小时对服务接口进行测试，如果 出现异常则发送邮件给管理员。
方案一：
@ControllerAdvice和ExceptionHandler实现Controler层的异常捕捉并处理
ControllerAdvice注解配置了一个全局异常注解类，来统一处理controller层的异常，ExceptionHandler注解标记的方法实现而且controller层中也可以不用写try/catch，使得代码更加]]></description><category></category></item><item><title><![CDATA[java的异常笔记]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106343421</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106343421</guid><author>Liar_27</author><pubDate>Mon, 25 May 2020 22:04:59 +0800</pubDate><description><![CDATA[抛异常的一些规范：
1、catch里面一定要至少写一些标记，便于异常排查
2、catch中抛出和记录最好只写一种（throw 和 log）
3、抛出自定义异常时，除了字符的信息外，要带着具体的异常栈（也就是e，便于错误排查）
4、关闭资源不要放在try块中，可以放到finally块中，JDK7之后可以将要监控的代码放入try后的括号中，jdk会自动关闭资源
5、抛的异常尽可能写的具体
6、自定义异常加一些注释
7、多个catch块要优先把更具体的异常放在最上面，因为捕获到一个异常后后面就不执行了
8、不要捕]]></description><category></category></item><item><title><![CDATA[mp4格式的视频流传输下实现边下边播]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106166094</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106166094</guid><author>Liar_27</author><pubDate>Sat, 16 May 2020 22:37:06 +0800</pubDate><description><![CDATA[问题描述：
年前有一个私活其中一个需求是客户端发请求，服务端将服务器上的视频传到客户端并实现边下边播。需求其实很快完成了，刚开始由于视频大多比较小，前端得到后经过几秒的加载后可以播，但是甲方不太满意播放速度，希望通过多种手段将视频加载速度缩短。在一阵摸索中终于找到了问题的症结。
问题解决的全部流程：
1、首先考虑的是带宽，带宽是最直接的解决方法，可是考虑到经济性起初购买服务器时带宽买的是5Mbps的，所以首先加带宽测试，加到10M后用postman测试拿视频接口,获得整个视频的速度确实减少了一半，但是客户端]]></description><category></category></item><item><title><![CDATA[登录状态保持分析及使用springboot、redis和token整合案例（自定义注解拓展学习）]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106092110</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106092110</guid><author>Liar_27</author><pubDate>Sat, 16 May 2020 21:39:14 +0800</pubDate><description><![CDATA[一、网站的接口按权限可以分为两种：
1、不需要登录就可以访问的，比如登录的接口
2、需要登录后才能访问的接口，比如登陆后的与用户信息相关的接口
二、为什么需要状态保持？
因为http协议是无状态的，也就是：服务器不知道两个请求是不是同一个用户发过来的；比如：有两个请求，一是登录请求，二是登录后访问个人资料，但是由于无状态的影响，所以，服务器不知道这两个请求是同一个人发送过来的。
所以解决http无状态的问题的解决方案就叫：状态保持
三、Web端是

...]]></description><category></category></item><item><title><![CDATA[@Autowired报错和降低检测级别]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106050419</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106050419</guid><author>Liar_27</author><pubDate>Mon, 11 May 2020 11:30:21 +0800</pubDate><description><![CDATA[问题描述：



刚从远程代码库拉下来的项目，@Autowired无法自动装载，报错。但是项目可运行，运行时查看日志显示该bean已经被创建：

因此考虑是IDEA的问题。



问题解决：

通过查找资料得出是因为IDEA代码检查对于@Autowired注解的检测级别，只需要将error改为warning即可。

具体操作：


...]]></description><category></category></item><item><title><![CDATA[本地Jar包如何加载到maven仓库]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/106039459</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/106039459</guid><author>Liar_27</author><pubDate>Sun, 10 May 2020 18:26:02 +0800</pubDate><description><![CDATA[入职后拿到了公司一个项目的业务代码，但是项目被分成了好几个子项目，有dao、test等子项目（目前还没明白为什么要拆分开，可能是解耦合吧，盲猜），项目之间有依赖关系，但是由于maven是从仓库中自动下载依赖，但是maven仓库中并没有我们需要的自己编写的依赖，因此需要将其中被依赖的项目打成jar包，之后再把本地的jar包加载到仓库中去，最后maven就能从仓库中下载依赖关系了。
1、首先找到被依赖的子项目（该项目没有本地jar包依赖，也是就pom文件里没有标红），运行maven的package命令，将项目打]]></description><category></category></item><item><title><![CDATA[毕业设计——研究思路]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/103064038</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/103064038</guid><author>Liar_27</author><pubDate>Thu, 14 Nov 2019 11:32:52 +0800</pubDate><description><![CDATA[一、普通的虚拟机迁移，由于源主机和目的主机之间可能跨越复杂的网络环境，而他们之间的网络通信是没有任何加密措施的，因此，普通的动态迁移方法实现的Domain U虚拟机迁移便会存在以下两种安全隐患：
1、迁移的数据被监听
监听者可以通过监听源主机和目的主机之间的网络，就能获得迁移过程中传送的全部数据，如果用户在虚拟机上保存的机密资料，那么不加密的网络通信会导致资料泄露而产生重大隐患。另外，监听者也可能...]]></description><category></category></item><item><title><![CDATA[毕业设计——Xen迁移相关源码阅读]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/103043557</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/103043557</guid><author>Liar_27</author><pubDate>Wed, 13 Nov 2019 15:47:39 +0800</pubDate><description><![CDATA[Xen中使用C实现底层核心功能，使用Python**解析输入命令**和**调用底层接口**。在Xen的源码中，与动态迁移相关的代码基本可以分为源端的save部分和目的端的restore部分。

	Xen动态迁移的基本架构：
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20191113101001236.png?x-oss-process=image/wat...]]></description><category></category></item><item><title><![CDATA[毕业设计——Xen虚拟机迁移流程]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/102997429</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/102997429</guid><author>Liar_27</author><pubDate>Sun, 10 Nov 2019 16:59:25 +0800</pubDate><description><![CDATA[1、如果有两台或以上的电脑，可以在裸机上安装Ubuntu，如果只有一台电脑，可以安装虚拟机，但是不能使用vmware，因为vmware不支持xen的linux内核，安装xen后重启会黑屏或重复重启。因此可以使用virtualbox来创建虚拟机。（很重要，卡在这里寻思了一个多月）这边创建两台ubuntu16.04虚拟机，其中主机A作为迁移的源主机和nfs服务器，主机B作为迁移的目的主机。
2、安装X...]]></description><category></category></item><item><title><![CDATA[Spring学习笔记]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/102966632</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/102966632</guid><author>Liar_27</author><pubDate>Fri, 08 Nov 2019 19:58:39 +0800</pubDate><description><![CDATA[1、spring通过应用上下文（Application Context）装载bean的定义并把它们组装起来，Spring的应用上下文全权负责对象的创建和组装。（Spring自带多种应用上下文的实现，区别是如何加载配置，例如XML、Java代码等）
2、依赖注入的三种方式：
（1）构造器注入
即被注入对象可以通过在其构造方法中声明依赖对象的参数列表，让外部（通常是IOC容器）知道它需要哪些依赖对象，...]]></description><category></category></item><item><title><![CDATA[Git与Github的使用]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/102078906</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/102078906</guid><author>Liar_27</author><pubDate>Fri, 04 Oct 2019 23:09:21 +0800</pubDate><description><![CDATA[具体可参考 廖雪峰官方网站
Unix的哲学：没有消息就是好消息
.git不是工作区，是Git的版本库

创建仓库：
（1）mkdir 文件夹
（2）cd 文件夹
（3）pwd （显示当前目录）
（4）git init（将当前目录变为Git可以管理的仓库，即初始化仓库）
将一个文件放到仓库：
（1）git add 文件
（2）git commit -m “(注释)”
第一步git add是把文件添加...]]></description><category></category></item><item><title><![CDATA[Linux下软件的安装]]></title><link>https://blog.youkuaiyun.com/Liar_27/article/details/101840906</link><guid>https://blog.youkuaiyun.com/Liar_27/article/details/101840906</guid><author>Liar_27</author><pubDate>Tue, 01 Oct 2019 13:49:34 +0800</pubDate><description><![CDATA[参考链接：https://www.cnblogs.com/fenglongyu/p/8654991.html
在Windows下安装软件，我们只需要有exe文件，然后双击，下一步后即可，但是在Linux下，每个Linux的发行版，比如Ubuntu，都会维护一个自己的软件仓库，我们常用的所有软件都在这里。这里面的软件绝对安全，而且绝对能正常安装。
那我们要怎么安装呢？在Ubuntu下，我们维护一个源...]]></description><category></category></item></channel></rss>