自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 资源 (1)
  • 收藏
  • 关注

原创 我的个人博客网站上线啦!!!

最近在阿里云上部署了我的个人博客,域名也刚申请下来,http://www.philpy.top,这里的所有文章都会同步到那里,后续该站点也会增加更多好玩的东西,欢迎关注,敬请期待 ~ ~ ~

2021-04-29 22:18:05 2291 2

原创 Spring拦截器通过Stream拦截请求体后Controller无法通过@RequestBody获取的解决方案

核心:javax.servlet.http.HttpServletRequestWrapperWebMvcConfig:@Configurationpublic class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterc

2022-03-06 20:13:01 931 1

原创 Spring 编程式定时任务

(其实不单单事务有编程式和声明式,定时任务也有哦…)Spring 声明式定时任务大家都用的很频繁并且很熟练了吧,通过@EnableScheduling和@Schedule(cron)注解即可实现。虽然声明式定时任务配合上强大的cron表达式已经可以满足我们的大多数需求了,但是如果说在程序运行期间我们需要更改定时任务的执行频率,通过编程式@Schedule注解是不容易去实现的。为此Spring为我们提供了一个接口SchedulingConfigurer可以让定时任务在运行时更改执行频率,我们只需要一个实

2022-02-17 17:34:04 540

原创 MySQL之 事务和MVCC

文章目录事务What?Why?事务的四大特性事务并发存在的问题事务的隔离级别MVCC隐藏字段undo log版本链快照读和当前读Read ViewRead Committed 下的 MVCCRepeatable Read 下的 MVCC事务What?Why?什么是事务?为什么要有事务?事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 元。如果扣完A的10

2022-02-11 15:20:49 1101

原创 JVM虚拟机 字节码指令表

字节码助记符指令含义0x00nopNone0x01aconst_null将null推送至栈顶0x02iconst_m1将int型-1推送至栈顶0x03iconst_0将int型0推送至栈顶0x04iconst_1将int型1推送至栈顶0x05iconst_2将int型2推送至栈顶0x06iconst_3将int型3推送至栈顶0x07iconst_4将int型4推送至栈顶0x08iconst_5将int型5推送...

2022-01-25 17:44:35 636

原创 Java并发编程之 final

final是Java中的一个关键字,final可用于修饰类、方法、参数和变量(包括实例变量和类变量)。final修饰类final修饰的类具有不可继承性,也就是如果一个类是final类型的,则这个类不允许有子类。final修饰方法final修饰的方法具有不可变性,也就是说final的方法不允许在子类中被重写(@Override)。final修饰参数如果参数用final修饰,那么在方法中我们不能对这个final参数进行修改。final修饰的基本数据类型的参数不可以修改其值:final修饰的

2022-01-18 15:20:11 329

原创 Elasticsearch 根据 _id 排序

我这里有一个测试索引数据如下:如果用普通的排序方法对_id中的数据进行排序的话:GET _search{ "query": { "term": { "_index": "test" } }, "sort": { "_id": { "order": "asc" } }, "size": 20}因为_id的数据为字符串类型,因此排序出来的结果其实并不是我们想要的:{ "took" : 5, "timed_out"

2021-12-05 21:19:14 2051

原创 Java并发编程之 ThreadLocal

多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的另一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线

2021-10-06 16:09:28 301 1

原创 Java并发编程之 ConcurrentHashMap

JDK1.7——分段锁首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment是一种可重入锁(ReentrantLock),在ConcurrentHashMap里扮演锁的角色;HashEntry则用于存储键值对数据。一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap类

2021-10-05 19:23:53 479

原创 Java并发编程之 Excutor

在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。在HotSpot VM的线程模型中,Java线程(java.lang.Thread)

2021-10-04 10:26:59 670

原创 Java并发编程之 locks

锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁

2021-10-02 08:57:49 490

原创 Java并发编程之 AQS

队列同步器AbstractQueuedSynchronizer(AQS),是用来构建锁或者其他同步组件的基础框架(ReentrantLock、CountDownLatch、Semaphore…),它使用了一个int成员变量表示同步状态(private volatile int state;),通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。state用关键字volatile修饰,代表着该共享资源的状态一更改就能被所有线程可见,而A

2021-09-30 16:51:04 413

原创 Java并发编程之 atomic

当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作:public class Main { int i = 0; void inc() { this.i++; } public static void main(String[] args) throws In

2021-09-29 16:13:41 759

原创 Java并发编程之 CAS

乐观锁乐观锁假设数据一般情况不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果冲突,则返回给用户异常信息,让用户决定如何去做。乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。CAS是乐观锁。CASCAS即比较并交换(compare and swap)。是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS 操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值(V)与预期原值(A)相匹配,那么处理器会自动将该位置值更新为新值(B)。

2021-09-24 10:03:27 377

原创 Java并发编程之 synchronized

Java中的每一个对象都可以作为锁。具体表现为以下3种形式:对于普通同步方法,锁是当前实例对象对于静态同步方法,锁是当前类的Class对象对于同步代码块,锁是synchonized括号里配置的对象都对于同步代码块而言,JVM是使用monitorenter和monitorexit实现的:monitorenter指令是在编译后插入到同步代码块的开始位置,而monitorexit是插入到方法结束处和异常处,JVM要保证每个monitorenter必须有对应的monitorexit与之配对。任何对象

2021-09-22 20:39:16 686 1

原创 Java并发编程之 volatile

并发编程三大特性原子性、有序性、可见性volatile可以保证有序性和可见性,不能保证原子性happens-before原则在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。程序顺序规则:一个线程中,按照程序顺序,前面的操作 happens-before 于后续的任意操作监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁volati

2021-09-21 16:31:20 443

原创 Java并发编程之 JMM内存模型

硬件内存架构现代计算机的基本硬件架构如图所示:多CPU:一个现代计算机通常由两个或者多个CPU。其中一些CPU还有多核。从这一点可以看出,在一个有两个或者多个CPU的现代计算机上同时运行多个线程是可能的。每个CPU在某一时刻运行一个线程是没有问题的。这意味着,如果你的Java程序是多线程的,在你的Java程序中每个CPU上一个线程可能同时(并发)执行。CPU寄存器(CPU Registers):每个CPU都包含一系列的寄存器,它们是CPU内内存的基础。CPU在寄存器上执行操作的速度远大于在主存上执

2021-09-21 08:51:36 384

原创 Spring 声明式事务

项目结构:表结构:基于xml的声明式事务配置IAccountDao.java:package tx.dao;import java.math.BigDecimal;public interface IAccountDao { void add(String name, BigDecimal money); void sub(String name, BigDecimal money);}AccountDaoImpl.java:package tx.servi

2021-09-20 20:11:39 703

原创 JVM初探

一个Java文件的执行流程粗略地讲就是这样:1、javac编译器2、类装载子系统

2021-09-16 16:53:55 331

原创 JVM初探之 字节码执行引擎

字节码执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。在不同的虚拟机实现中,执行引擎在执行字节码的时候,通常会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,还可能会有同时包含几个

2021-09-16 11:52:27 480

原创 JVM初探之 堆和垃圾回收

对于Java应用程序来说,Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java世界里“几乎”所有的对象实例都在这里分配内存(The heap is the runtime data area from which memory for all class instances and arrays is allocated)。Java堆既可以被实现成固定大小的,也可以是可扩展的,不过

2021-09-15 17:41:28 455

原创 JVM初探之 方法区

方法区是一个规范,永久代、元空间是它的具体实现jdk1.8以前,方法区的实现叫永久代,是存储在堆上的。字符串常量池、静态变量、类型信息等是存储在永久代的jdk1.8及以后,方法区的实现叫元空间,是存储在本地内存上的。jdk1.7时,常量池、静态变量被移动到了堆内存,到了jdk1.8,永久代彻底不存在了,变成了元空间...

2021-09-14 17:58:23 368

原创 JVM初探之 Java虚拟机栈

Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;如果Java虚拟机栈容量可以动态扩展,当栈扩展时无法申请到足够的内存会抛出OutOfMemo

2021-09-14 10:43:23 331

原创 JVM初探之 类装载子系统(类加载器)与双亲委派机制

java的类加载步骤大概分为三步:1、加载加载阶段的主要任务是将.class文件中的类转化为java.lang.Class对象,具体步骤为:通过一个类的全限定类名获取其二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在堆中创建一个该类的java.lang.Class对象,作为方法区中这个类的各种数据的访问入口2、连接2.1、验证验证的主要目的是确保被加载的类的正确性。包括:文件格式的验证元数据的验证字节码的验证符号引用的验证验证阶段虽然重要,但是也可

2021-09-12 19:59:07 388

原创 JVM初探之 javac编译器

javac编译器的编译过程大概分为三步:1、解析与填充符号表1.1、词法分析1.2、语法分析1.3、填充符号表2、注解处理器3、语义分析与字节码生成3.1、标记检查3.2、数据及控制流分析3.3、解语法糖3.4、字节码生成1、解析与填充符号表1.1、词法分析将源代码的字符流转变为标记(Token)集合,单个字符是程序编写时的最小元素,而单个Token是程序编译时的最小元素。关键字、变量名、字面量、运算符都可以看作是Token。1.2、语法分析根据词法分析产生的Token生成一个抽象语法树(Abs.

2021-09-09 10:38:49 466

原创 TCP的三次握手与四次挥手

TCP协议头部的构成握手挥手过程主要与TCP协议头部的三个字段有关,分别是序号seq、确认号ack以及TCP标记序号:序号一共占用32个比特位,所以它可以表示的范围是0~232。因为TCP协议是面向字节流的,因此,每一个字节都有一个唯一的序号,这个序号就是用来标记传输的每一个字节的(一个字节一个序号)。这里的序号所代表的就是,这个TCP报文所传输的数据的第一个字节序号是什么确认号:确认号所表示的范围也是0~232,也是一个字节一个确认号。确认号表示的就是期待收到数据的首字节序号是什么TCP标记:

2021-09-08 17:51:16 483

原创 OSI七层模型与TCP/IP五层模型orTCP/IP四层模型

OSI七层模型:TCP/IP五层模型:就是将OSI七层模型最上面的三层(会话层、表示层、应用层)合并为应用层TCP/IP四层模型:就是将TCP/IP五层模型中最下面的两层(物理层、数据链路层合并为网络接口层)...

2021-09-08 11:22:50 585

原创 IDEA Scanner 无法在 Junit 控制台中进行输入(This view is read-only)的解决方案

解决方案在IDEA的安装目录下的/bin目录下找到文件idea64.exe.vmoptions,在文件末尾添加一行:-Deditable.java.test.console=true在IDEA中Help -> Edit Custom VM Options ...中也添加上这一行:-Deditable.java.test.console=true重启IDEA即可...

2021-08-27 17:59:08 4577 4

原创 JSP 中 <%%> 和 <%!%>的区别

先来看一道题,猜猜它的输出:<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title></head><body><% int x=5; %><%! int x=7; %><%! int getX(){return x;}%>&l

2021-08-25 21:59:50 4597 1

原创 IDEA2021.2 解决双击shift弹出全局搜索窗口问题

之前修改注册表的方法已经不管用了,连ide.suppress.double.click.handler那个选项都没了…新的解决方法:

2021-08-24 09:30:34 1721 12

原创 Oracle 存储结构简介

物理存储结构Oracle的物理存储大致分为三种:数据文件(.DBF)、日志文件(.LOG)和控制文件(.CTL)数据文件每一个ORACLE数据库有一个或多个物理的数据文件。一个数据库的数据文件包含全部数据库数据。逻辑数据库结构(如表、索引)的数据物理地存储在数据库的数据文件中。数据文件有下列特征:一个数据文件仅与一个数据库联系一旦建立,数据文件不能改变大小一个表空间(tablespace,数据库存储的逻辑单位)由一个或多个数据文件组成。数据文件中的数据在需要时可以读取并存储在ORACLE内

2021-08-23 19:49:58 1081

原创 Win10通过wsl2使用Ubuntu以及GUI的安装

文章目录1、开启Windows的虚拟机平台功能2、启用适用于 Linux 的 Windows 子系统3、启用虚拟机功能4、下载 Linux 内核更新包5、将 WSL 2 设置为默认版本6、安装所选的 Linux 分发7、为新的 Linux 分发版创建用户帐户和密码8、安装 Windows Terminal(可选)9、安装GUI图形界面10、安装Microsoft远程桌面(可选)1、开启Windows的虚拟机平台功能前往系统设置-应用-程序和功能-启用或关闭Windows功能,勾选上述目标项,确定即可:

2021-08-18 10:44:26 7736 4

原创 PL/SQL 基操示例

文章目录1、PL/SQL2、新建一个测试用表3、基础语法3.1、基本输出语句3.2、变量3.2.1、常量3.2.1、引用类型变量3.2.2、记录类型变量3.3、分支语句3.3.1、语法一:`if 条件 then 语句; end if;`3.3.2、语法二:`if 条件 then 语句; else 语句; end if;`3.3.3、语法三:`if 条件 then 语句; elsif 条件 then 语句; ... else 语句; end if;`3.4、循环语句3.4.1、语法一:`while 条件 lo

2021-08-06 21:36:53 637 2

原创 基本数据结构之栈、队列及其数组实现

栈栈是一种“先进后出”的数据结构用数组实现栈:接口IStack:public interface IStack { /** * 元素入栈(压栈) * * @param o * @return */ boolean push(Object o) throws Exception; /** * 元素出栈(弹栈) * * @return */ Object pop() throws

2021-07-27 19:47:29 640

原创 Spring の HelloWorld

Maven创建项目mvn archetype:generate -DgroupId=com.philpy -DartifactId=springExample -DarchetypeArtifactId=maven-archetype-quickstart新建的Spring项目目录结构为:配置pom.xmlpom.xml添加jdk版本配置:<properties> <java.version>11</java.version> <ma

2021-07-22 22:20:29 274

原创 基于Django+Pyecharts的COVID19新冠肺炎疫情监控面板

去年年初写了疫情可视化的一系列文章:pyecharts实现新冠肺炎疫情可视化BI数据大屏pyecharts实现新冠肺炎疫情可视化并搭建BI数据大屏(Plus)pyecharts新功能体验 | pyecharts-Map3D实现新冠肺炎疫情全国数据立体可视化虽是Pyecharts绘制,但是是静态页面,没有与Web整合,正好最近期末课设是相关作业,就趁机再更新一下吧…最终效果: 基于Django

2021-06-29 19:49:07 1866 6

原创 基于 Django + (tensorflow)keras/face-recognition 【python3.6】的人脸识别签到系统

基于 Django + (tensorflow)keras/face-recognition 【python3.6】的人脸识别签到系统建议使用Anaconda新建一个python3.6的虚拟环境进行操作conda create -n your_env_name python=3.6conda activate your_env_namepip install requirements.txt项目地址https://github.com/sleepyyoung/AttendanceSyst

2021-06-26 16:50:36 786

原创 Springboot + Elasticsearch + Layui + Echarts 构建一个简易的微博历史热搜查询系统

简介Springboot用作后端请求处理以及展示页面以及爬取微博热搜数据Elasticsearch用作存储微博热搜数据页面采用Layui的组件Echarts用来可视化图表程序运行后,访问http://127.0.0.1:8080即可看到结果结果展示首页按时间查询放大:按内容查询模糊查询放大:精确查询放大:代码地址https://github.com/sleepyyoung/wblsrs-Springboot...

2021-06-09 21:34:08 740 1

原创 Springboot + layui 构建简易集群管理系统

1、UI界面结果展示UI界面基于 layui - layout 构建1.1、Shell控制台首页1.2、HDFS 操作页面1.3、SparkStreaming & Kafka 操作页面1.4、MapReduce の WordCount 操作界面1.5、HBase 操作界面新建表:查看详情:添加/更新/修改 数据:删除列族:删除行键:删除表:2、准备操作:2.1、本机环境本机所需环境:javascalamysqlmaven2.2、

2021-05-26 19:48:52 1397 4

原创 Jsch 执行jps命令没有结果 - 解决方案

ChannelExec exec = (ChannelExec)session.openChannel("exec");执行jps命令时:exec.setCommand("jps");/* ... */不会输出结果因为jps不是虚拟机内置的命令,而是java提供的一个显示当前所有java进程pid的命令,所以需要用source命令将java的环境变量以及bash"刷"一遍:exec.setCommand("source /etc/profile;source ~/.bash_profile;

2021-05-23 21:01:10 863

Typora安装程序

Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术。支持十多种文本格式的导出.(HTML,PDF,Word文档⋯)。同时他还能将文本导出为图片。

2020-04-10

空空如也

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

TA关注的人

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