自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Panda的学习日常

记录学习过程中的收获以及遇到的问题

  • 博客(29)
  • 收藏
  • 关注

原创 JVM 垃圾收集

文章目录判断是否可回收引用计数算法可达性分析算法如何判断⼀个类是⽆⽤的类?回收方法区垃圾收集算法标记-清除算法复制算法标记-整理算法回收时机安全点安全区域垃圾收集器CMS收集器CMS 三色标记法G1收集器划分规则运作过程回收策略索引策略ZGC 垃圾回收器回收过程并发转移着色指针读屏障处理过程卡表(Card Table)杂识分代垃圾回收器中新生代和老年代为什么新生代有两个Survivor分区?判断是否可回收引用计数算法对象中加一个计数器保存引用该对象的地方的个数缺点是不能解决循环依赖的问题可达性分析

2021-09-29 17:44:27 445

原创 Java 中的各种锁及其原理

概览在并发编程中,锁是一种常用的保证线程安全的方法。Java 中常用的锁主要有两类,一种是 Synchronized 修饰的锁,被称为 Java 内置锁或监视器锁。另一种就是在 J2SE 1.5 版本之后的 java.util.concurrent 包(下称 j.u.c 包)中的各类同步器,包括 ReentrantLock(可重入锁),ReentrantReadWriteLock(可重入读写锁),Semaphore(信号量),CountDownLatch 等。这些同步器都是基于 AbstractQueue

2021-09-23 17:59:22 2050

原创 MySQL 三大日志:binlog、redo log 和 undo log 使用与原理

文章目录binlogbinlog日志格式binlog 使用场景binlog 刷盘时机查看 binlog 日志redo logredo log日志格式redo log使用场景redo log刷盘时机LSNredo log与binlog区别为什么 binlog 没有 crash-safe 能力两阶段提交怎么保证两份日志之间的逻辑一致组提交undo log事务提交undo log处理过程insert undo logupdate undo logpurge 线程的清理过程MySQL 崩溃恢复日志是mysql数

2021-09-17 16:44:28 806

原创 MySQL 事务管理

重点:begin/start transaction 命令并不是一个事务的起点,在执行到它们之后的第一个操作 InnoDB 表的语句,事务才真正启动。如果想要马上启动一个事务,可以使用 start transaction with consistent snapshot 这个命令。事务隔离级别根据读和提交的关系来分类的读未提交:一个事务还没提交时,它做的变更就能被别的事务看到;读提交:一个事务提交之后,能被其他事务看到;可重复读:一个事务执行过程中看到的数据,总是根这个事务在启动时看到的数据一致

2021-09-17 16:35:13 439

原创 MVCC (Multi-Version Concurrency Control 多版本的并发控制协议)

数据结构隐藏列InnoDB中每行数据都有两个隐藏列,一个保存了行的事务ID(DB_TRX_ID),一个保存了行的回滚指针(DB_ROLL_PT)。每开始一个新的事务,都会自动递增产生一个新的事务id。事务开始时刻的会把事务id放到当前事务影响的行事务id中,当查询时需要用当前事务id和每行记录的事务id进行比较。数据的历史版本就是不同事务修改数据的过程事务id,这个过程不一定是递增或者递减的基于undo log的版本链前面说到每行数据的隐藏列中包含了指向undo log的指针,而每条undo lo

2021-09-17 16:25:41 372

原创 JVM 中的内存屏障

java内存屏障的原理与应用_Java_breakout_alex的博客-CSDN博客 - 掘金 (juejin.cn)一文解决内存屏障 | 程序猿说你好 (monkeysayhi.github.io)内存屏障 - 简书 (jianshu.com)内存屏障的作用确保一些特定操作执行的顺序影响一些数据的可见性(其中一种方式就是强制更新一次不同 CPU 的缓存)可见性可见性:当一个线程修改了线程共享变量的值,其它线程在使用前,能够得到最新的修改值。有两种可见性问题:CPU 在硬件架构上的

2021-09-07 22:32:13 503

原创 select、poll、epoll 底层探讨

select概述将监听的文件描述符分为三组,每一组监听不同的需要进行的IO操作(读、写、异常)。当select返回时,无差别轮询所有流,找出能读出数据,或者写入数据的流,每组文件描述符会被select过滤,只留下可以进行对应IO操作的文件描述符。有数量限制:受单个进程能打开的文件描述符数量受 FD_SIZE(默认1024) 限制,修改这个宏需要重新编译内核。也看到有另一种说法如下(说法来源于《网络编程实战》C10K问题章节):使用 ulimit -n 查看单个进程能打开的文件描述符数量(默认

2021-08-19 21:13:25 402

原创 修改U盘、移动硬盘时提示目标文件夹访问被拒绝的问题解决思路

今天遇到一个很奇怪的现象,那就是在向移动硬盘复制东西的时候一直提示我目标文件夹访问被拒绝,即使是管理员权限或者登录到管理员账号也没用,折腾着半天,在用一些网上的解决方法的时候,又遇到了一些其他问题,因此在这里总结一下,基本上网上能找到的方法在这里都能找到,找不到的方法也能在这里找到。分析在解决问题之前,一定要先对问题进行分析,才能做到对症下药,是药三分毒,找错方向浪费了时间可就找不回来了,列举出需要分析的情况如下:是否是只读对外接磁盘(将 U盘、移动硬盘统称为外接磁盘)的修改,不论是增删改都不行检

2021-07-10 18:29:58 13231 3

原创 mysql8.x 出现不能登录的情况(ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password:YS)

如果不是粗心,那么可能是密码错误,也可能是修改远程访问错误导致不能在本地访问。进入mysql关闭mysql的验证:修改配置文件 /etc/my.cnf,在下面加入一行skip-grant-tables=1重启mysql服务:systemctl restart mysqld使用root用户登录到mysql:mysql -u root修改密码使用命令:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_passwor

2021-02-01 13:51:29 312

原创 将SSM(Spring + SpringMVC + MyBatis) + JSP项目中的Spring重构为Spring Boot

整体思路参考这篇博客:https://blog.csdn.net/xiaocxyczh/article/details/78681374Spring MVC 到 Spring Boot 的简化之路https://juejin.cn/post/6844903573453537294Spring Boot 与 Spring MVC是两种不同的配置方式,一种是使用starter启动器来完成自动配置,另一种是在xml中进行配置,将Spring MVC重构为Spring Boot之后,已经不识别xml了,这个

2021-01-27 19:47:22 517 1

原创 彻底解决MyBatis映射失败的问题(Invalid bound statement (not found))

解决问题要从问题的本质去找方法,比如MyBatis映射不对,只有两种可能,一种是因为名字对应不上,比如接口的名字和namespace不对应,或者里面的方法名字不对应之类的;另一种就是找不到文件,或者找不到接口文件,或者找不到Mapper.xml文件所以MyBatis映射失败的时候,应该从以下几个方向去解决检查名字检查接口名字和mapper中的namespace检查方法名是否一致这两个方法都可以通过插件来很好的解决,如果装上MyBatis插件之后可以相互跳转,说明名字没有问题。检查文件检查接

2021-01-19 10:18:30 7941 1

原创 Ubuntu安装Redis

刚开始用apt来安装的,结果一直报错,安装好了之后,版本太低,并且不能启动,最后放弃了,改为使用源码安装。使用源码安装参考这篇文章:https://www.geek-share.com/detail/2775832907.html需要注意的是在运行的时候要指定配置文件,比如./redis-server ../redis.conf,不然修改的配置文件都没用。如果没有改为 bind 0.0.0.0 ,虽然远程能够连接上,但是一旦使用命令,比如ping,set之类的,就会出现 “Error: 在驱动器

2021-01-18 00:42:20 400

原创 JDK、Mybatis、Mysql、Maven、Spring Boot以及Spring Cloud的版本对应关系

背景之前做个Spring Cloud的demo,光是配环境就花了不少时间,所以留个记录同时也帮助大家更方便的找到对应的版本关系。Spring Boot 与 MybatisMysql 与 JavaSpring Boot 版本+ jdk 版本 + Maven 版本的对应关系Spring Cloud 与 Spring Boot在Spring Cloud的官网中有进入官网之后,查看对应版本的参考文档最开始的地方就有对应的Spring Boot版本Spring Cloud的各个组件

2021-01-16 20:13:28 3398

原创 “==”和“equals”的底层探讨(Stirng与字符串常量池)

String有两种声明方式一种是直接String str1 = “xxx”,另一种是String str2 = new String(“xxx”)前者是在字符串常量池中找相应的对象引用,如果有就直接引用,后者是不管有没有都会创建一个新的对象(可以通过intern关键字将new创建的字符串引用放到字符串常量池中)几种创建方式常量赋值String str1 = "ab";直接在字符串常量池中创建字符串常量编译器优化String str1 = "ab";String str2 = "a" +

2020-12-28 09:51:20 123

原创 Java的四种引用类型的回收时机以及使用场景

强引用Object obj = new Object();Java默认创建的对象都是强引用类型抛出OutOfMemoryError终止程序也不会回收具有强引用的对象;通过将对象设置为null来弱化引用,使其被回收;软引用Object obj = new Object();SoftReference sf = new SoftReference(obj);这里sf是对obj的一个软引用,软引用引用的对象会在系统将要发生内存溢出之前,被列入垃圾回收的范围进入回收。可以用来实现高速缓存弱引用

2020-12-28 09:35:54 706

原创 常见的Java容器总结

前言:写的比较简略,主要是用作记录与总结HashMap的底层实现数据结构HashMap底层是用数组实现的,以链表的方式来解决散列冲突,当链表长度达到一定数值之后,将链表重构为红黑树初始化刚开始创建一个HashMap的时候,可以指定初始容量的大小,之后的HashCode就是在这个基础上生成的,以及数据的增长因子插入判断是否为空计算hash值,判断是否存在插入之后判断是否需要扩容扩容时机:当size > 允许的最大元素数量threshold,就会触发扩容,threashold默认

2020-12-28 09:14:45 129

原创 从一个对象的“生命周期”来讲解JVM

从一个对象的生命周期来讲解JVM首先是 Java 虚拟机架构图,后面很多地方都会用到这个图,首先是一个 Class 文件,通过 ClassLoader 将类加载到方法区中然后是对象被创建到堆区中,程序中的变量等数据保存在Java虚拟机运行时数据区中图源网络,侵删对象是来源于类的,所以首先讲解类的创建类的创建一个Class文件通过双亲委派机制,经过加载、验证、准备、解析以及初始化这五个步骤之后,被加载到JVM虚拟机中等待被使用双亲委派机制流程图,对应有如下类加载器:BootstrapCla

2020-12-19 12:10:28 130 1

原创 最最基础Java后端

最最基础Java后端最最基础的Java后端,仅供了解后端运作的过程,里面的方法和套路拿来就能实现一个Java后端,但深入需要学习额外的知识,比如Servlet和JDBC,文中除Java基础知识外,只涉及这两方面的知识,学习了Servlet和JDBC之后,可以了解Java后端的运作过程,对学习Spring和Mybatis等知识都有帮助整体理解Servlet过程已经在图中展示出来,这里直接贴...

2020-04-23 11:23:18 237 2

原创 idea打包web项目为war包,并部署到服务器的正确做法(图文详细教程)

在网上找了很久,发现很多方法是错误的,有的连web.xml文件以及classes文件夹、lib文件夹都没生成。同时在部署过程中还出现本地调试正常,但是放到服务器上就不能访问的问题。因此有很多注意事项,写下这篇博客以作记录。Idea打包web项目为war包(详细图文步骤)打开Projec Structure创建WEB-INF文件夹以及在这个文件夹下的子目录classes...

2020-04-23 09:17:02 6555 2

原创 如何获取MIPS汇编对应的机器码

在看《自己动手写CPU》的时候,里面需要将MIPS转换成机器码作为输入的指令,不过书上的工具以及一些步骤在实际中是不能用的,因此在这里将“从MIPS汇编转换成机器码”的完整过程下来安装Linux虚拟机因为汇编工具需要在Linux的环境下运行,所以需要安装Linux虚拟机,我用的软件是VMware,Linux系统是Ubuntu 18.04,具体的安装过程网上有很多教程,这里就不再详细的叙述了安...

2020-04-20 17:24:45 5007 2

原创 Typora + PicGo + Github 无缝完成写博客操作

Typora + PicGo + Github 无缝完成写博客操作一、什么是无缝操作无缝操作就是在 Typora 本地就完成写博客的操作,不需要去其他地方上传图片到图床再复制连接,在 Typora 内就能完成上传图片到图床的操作相比其他网页编辑博客,Typora的访问速度更快,并且可以随时随地写博客,缺点就是图片只能保存在本地,不过在 Typora 更新之后,就可以使用 PicGo 直接上传...

2020-03-24 20:30:34 822 2

原创 如何从零开始在ubuntu上安装hpcc或者hpl

由于安装hpl与hpcc的过程是类似的,所以这里只介绍如何安装hpcc一、在ubuntu上安装mpi首先是下载mpi的源文件:http://www.mpich.org/static/downloads/下载最新版的mpich就可以了解压并安装tar zxvf mpich-3.3rc1.tar.gz //这里我用的是mpich-3.3cd mpich-3.3rc1sudo ....

2019-10-07 09:37:53 3020 3

原创 在编译时,如果遇到“xxx 未定义的引用”,或者是“/usr/bin/ld 找不到 xxx”这类问题的解决方法

在遇到这类问题的时候,建议上谷歌根据关键字搜索一下,你会得到你想要的答案,因为这类问题通常是在编译时缺少相应的flag导致的我所遇到过的这类问题:“/usr/bin/ld 找不到 lgcc_s”:我在百度上找了很多方法解决这个问题,比如重装ld:sudo apt autoremove binutilssudo apt install binutils不过没有用,最后上谷歌的时候才...

2019-10-06 20:22:38 1314 2

原创 安装Ubuntu之后一些配置

一、Ubuntu启动界面的切换修改设置为启动默认字符界面分别使用下面的三条命令# systemctl enable multi-user.target# systemctl set-default multi-user.target# reboot修改设置为启动默认图形界面分别使用下面的三条命令# systemctl enable graphical.target# syste...

2019-08-29 00:04:31 723

原创 线程之间传递信息的几种方法 Android

一、需求分析在使用okhttp的时候,有时会遇到需要在onresponse中将数据传送到其他线程中,或者是发送消息给UI线程,通知其更改UI的情况,并且我想返回的数据不是普通数据,而是一个类的对象。下面说的几种方法,并不局限于在Okhttp中使用,而是线程之间传递数据(或者消息)都可以用到二、使用的方法使用全局变量的方法将数据从onresponse中获取下来,然后在将其返回用Ha...

2019-06-13 13:15:35 3110

原创 Android开发 遇到网络内容无法加载时

之前在学习郭大神的《第一行代码》时,在最后的酷欧天气那里一直不能将天气加载出来,查资料后发现是因为书上的接口为http,而现在要是https才行,所以有了下面的内容Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android ...

2019-05-23 20:34:55 241

原创 在Androidstudio中将数据库litepal升级为2.0需要进行的操作

将轻量级数据库litepal升级为2.0版本需要的操作很少,分别是依赖库的升级、实体类继承的改变以及升级静态CRUD方法一、升级依赖库将依赖库改为implementation 'org.litepal.android:core:2.0.0'二、实体类继承的改变原来是继承自DataSupport,不过现在以及将其标为了废弃,使用方法如下:public class Province...

2019-05-23 20:22:47 319

原创 运用Gson解析Json的方法步骤(包括对数组以及多层嵌套的处理)

运用Gson解析Json的方法步骤:先对应网页上的内容创建实体类,创建实体类的方法:如果是同一级的,则只需要将其声明便可过程中可用@SerializedName来将网页中的字符与自己创建的字符对应起来public class Forecast { public String date; @SerializedName("tmp_max") public St...

2019-05-16 11:18:32 2000

原创 查看并彻底清除掉流氓软件、弹窗广告

利用ViewWizard来查看弹窗广告来自哪个应用如图图片来自网络,侵删用everything查出相关文件并删除如果不能删除的话,就用unlocker解锁后删除

2019-05-09 00:09:20 6313 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除