- 博客(41)
- 收藏
- 关注
原创 Jpa 自动建表的时候在数据库中添加注释。
github地址本项目可以让 Jpa 自动建表的时候在数据库中添加注释。为什么做这件事过去想要让 Jpa 在建表的时候自动添加注释一般需要使用 Column#columnDefinition 属性。示例如下:@Column(columnDefinition = "INT COMMENT '...'")private int unitId;但是这样做有如下几个问题:编写麻烦。需要将 Sql 片段写入到注解中。维护成本高。在做数据库迁移的时候很可能遇到 Sql 不兼容的问题。为了解决以上
2022-02-11 15:57:32
5585
1
原创 Java 读写 Csv 利器 EasyCsv
最新需要解析 csv 发现了一个很好用的工具:github 地址使用方式如下:EasyCsvEasyCsv 是一个基于Java的简单、省内存的读写 csv 的开源项目。快速开始maven 依赖<dependency> <groupId>com.github.biyanwen</groupId> <artifactId>easycsv</artifactId> <version>1.0.0</
2022-02-11 15:06:51
4644
2
原创 Vue--深入理解.sync 修饰符
结论:.sync 是 Vue 提供的语法糖,用来简化代码的。下面就通过代码示例来说明。业务场景:父组件有一个 total 变量,每当子组件的按钮被点击时 total 都会按照子组件提供的逻辑对 total 进行更改。情况一:不使用 .sync 实现,实现思路,子组件的按钮被点击的时候会发布一个事件,父组件就监听这个事件,事件触发父组件就会执行相应的业务逻辑。首先定义父组件和子组件:// 这是父组件<template> <div> {{ total }}
2021-06-19 23:41:15
315
2
原创 Vue--完整版和运行时
用过 Vue 框架的人都知道,Vue 官方提供了两个版本,下面简述下这两个版本都有哪些区别。1. 名称关于名称我们可以在 BootCDN 上直观的看出来,完整版叫 vue.js,运行时叫 vue.min.js。2. 大小运行时版本相比完整版体积要小大约 30%,所以大多数时候都使用运行时这个版本。3. 创建节点的方式完整版:new Vue({ template: '<div>{{ hi }}</div>'})运行时:new Vue({ render (h
2021-06-17 22:11:17
487
1
原创 《JavaScript进阶--浅析 MVC》
1. 什么是 MVC定义:MVC(Model-View-Controller)是最常见的软件架构之一,当然也可以称之为广义的设计模式,业界有着广泛应用,为什么要使用 MVC 呢?因为复杂的软件必须有清晰合理的架构,否则无法开发和维护。MVC 是 Model-View-Controller 三个单词的简称,这也表明 MVC 是由三个部分组成的,每个部分都有不同的职责。Model 是负责组织数据的,里面封装了处理数据的业务逻辑。View 是负责展示结果渲染页面的。Controller 属于中间层,
2021-06-14 15:42:04
983
5
原创 《JavaScript入门--DOM事件和事件委托》
1. DOM事件DOM 根据事件的传递方向不同将其分为两种,事件捕获和事件冒泡,浏览器总是先执行事件捕获,然后再执行事件冒泡。下面通过下面的标签进行讲解:<div class="grandfather"> <div class="father"> <div class="son">hh</div> </div></div>1.1 事件捕获当用户点击上面标签中的 hh 时,事件传递顺序为 gr
2021-06-06 15:42:04
142
1
原创 《jQuery入门--元素的增删改查》
1. jQuery 查询元素将一个选择表达式,放进构造函数 jQuery()(简写为 $ ),然后得到被选中的元素。jQuery 支持多种表达式。下面一一介绍1.1 CSS 表达式表达式可以直接使用 CSS 表达式,例如: $('#myId') //选择ID为myId的网页元素 $('div.myClass') // 选择class为myClass的div元素1.2 jQuery 特有的表达式 $('a:first') //选择网页中第一个a元素 $('tr:odd') /
2021-06-05 22:39:46
294
1
原创 《JavaScript入门-- 函数的执行时机》
JavaScript入门-- 函数的执行时机js 的函数执行时机很重要,一不小心就容易踩坑,例如下面这两种情况:情况一:let i = 0for(i = 0; i<6; i++){ console.log(i)}情况二:let i = 0for(i = 0; i<6; i++){ setTimeout(()=>{ console.log(i) },0)}问两种情况打印出的 i 是多少?如果 js 基础不扎实就有可能踩坑。答案是:情况一:0、1、
2021-06-02 22:25:57
176
1
原创 《JavaScript入门--对象基本用法》
1. 声明对象的两种语法第一种:let obj = { 'name' : 'hhh' , 'age' : 18}第二种:let obj = new Object({'name' : 'hhh' , 'age' : 18})name 和 age 是属性名,而对应的是属性值。虽然两种写法效果是一样的,但是官方是推荐第二种写法的,不过人们常用的却是第一种,因为写起来方便。2. 删除对象的属性语法:delete obj.xxx 或 delete obj[‘xxx’]判断是否真正删除掉了属性可以
2021-06-01 23:31:46
106
2
原创 《JavaScript入门--基础语法篇》
1. 表达式和语句初学JS时感觉表达式和语句很相似,但是他们是有区别的:1.1 表达式下面是一个常见的赋值语句:var a = 1 + 3其中 1 + 3 就是一个表达式,因为表达式都是为了得到返回值,一定会返回一个值(这里的值不包括undefined)。1.2 语句下面是一个常见的if语句的写法:let a = 1;if( a === 1){ console.log('a是1')}其中 if 表达式就是一个语句,因为语句是为了进行某种操作,一般情况下不需要返回值。2. 标识符
2021-06-01 11:08:55
171
原创 《JavaScript入门--初识JavaScript》
1. JavaScript是什么JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Fire
2021-05-30 21:56:39
315
原创 《URL浅析》
1. 什么是URLURL全称叫统一资源定位符(英语:Uniform Resource Locator,缩写:URL,或称统一资源定位器、定位地址、URL地址俗称网页地址,简称网址,是因特网上标准的资源的地址(Address),如同在网络上的门牌。2. URL组成部分常见的URL样式如下:https://xueshu.baidu.com/usercenter/paper/show?paperid=9f657fb90ee894206797#print可以看出URL由如下几个部分组成:https
2021-05-30 13:21:17
687
原创 《CSS入门笔记--CSS基础知识》
1. 什么是CSS层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 或 XML(包括如 SVG、MathML、XHTML 之类的 XML 分支语言)文档的呈现。CSS 描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问题。CSS 是开放网络的核心语言之一,由 W3C 规范 实现跨浏览器的标准化。CSS节省了大量的工作。 样式可以通过定义保存在外部.css文件中,同时控制多个网页的布局,这意味着开发者不必经历在所有网页上编辑布
2021-05-29 23:15:36
248
原创 《HTML入门笔记--HTML常用标签》
1. a 标签的用法1.1 作用:a 元素可以通过它的 href 属性创建通向其他网页、文件、同一页面内的位置、电子邮件地址或任何其他 URL 的超链接。a 中的内容应该应该指明链接的意图。如果存在 href 属性,当 a元素聚焦时按下回车键就会激活它。1.2 常用属性hrefhref:包含超链接指向的 URL 或 URL 片段。1.2.1 网址href里面可以指定要访问的网址,例如:<a href="//example.com">Website</a>注:【//】
2021-05-23 21:22:35
191
原创 《HTML入门笔记--HTML简介》
HTML入门笔记11. HTML 是谁发明的HTML的英文全称是 Hyper Text Markup Language,即超文本标记语言。HTML是由Web的发明者 Tim Berners-Lee和同事 Daniel W. Connolly于1990年创立的一种标记语言,它是标准通用化标记语言SGML的应用。2. HTML 起手应该写什么<!DOCTYPE html> <!--html类型文档的标志--><html lang="en"> <!--lang
2021-05-22 23:07:14
412
原创 【通过抓包学网络】TCP三次握手与四次挥手
本文章是通过wireshark来抓包的,如果你对这个工具不熟悉可以看这篇文章wireshark 简易教程正文开始1.首先抓个包通过上一篇文章大家应该都能打开对应网卡的抓包页面了哈;我们利用DNS服务可以将域名解析成IP的功能来演示如何抓到我们想要的包。1.1 开始抓包如果进入抓包页面没有自动开始抓包,就点击左上角的开始抓包按钮,如图:1.2 打开命令行界面博主用的win10操作系统,所以打开的就是CMD了,输入以下命令>nslookup>set vc>www.baid
2021-05-09 18:22:18
896
原创 wireshark 简易教程
下载wiresharkwireshark下载地址选择Windows Installer (64-bit),下载成功后一直点next就可以了。抓包2.1 选择网卡打开软件,界面如下所示,被红框标记起来的就是网卡列表,如果你使用的是无线网就可以选择WLAN。2.2 开始抓包双击选中目标网卡就会进入到抓包主界面,如图:被红框选中的就是该网卡发送和接受的网络包了,后续会详细讲解如果通过wireshark抓包学习网络。...
2021-05-07 22:50:55
308
原创 Redis和Zookeeper分布式锁的实现方式
public class Main { private static RedissonClient redissonClient; static { Config config = new Config(); config.useSingleServer().setAddress("redis://127.0.0.1:6379"); redissonClient = Redisson.create(config); } pu
2021-03-16 22:46:22
279
原创 【源码】CountDownLatch,CyclicBarrier,Semaphore及AQS介绍
1. CountDownLatch1.1 使用场景:CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景。1.2 使用示例public class Main { public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(5); ExecutorServic
2021-03-15 23:12:16
159
原创 Java 实现多线程下数字的累加
方式一:使用乐观锁public class Test { private static final AtomicInteger atomicInteger = new AtomicInteger(0); public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 100; i++) { new Thread(atomicInt
2021-03-06 20:19:52
978
原创 Java 实现生产者、消费者模式
方式一:BlockingQueuepublic class Test { public static void main(String[] args) throws InterruptedException { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); Producer producer1 = new Producer(queue); Produ
2021-03-06 18:52:12
160
原创 网站架构模式
网站架构模式大型互联网公司为了实现网站的高性能、高可用、易伸缩、可扩展、安全等各种技术架构目标,提出了很多解决方案,而这些方案又被更多网站重复使用,从而逐渐形成大型网站架构模式,下面对常见的模式进行总结。1、分层分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统,一般会将网站软件系统分为应用层、服务层、数据层优点:便于分工合作开发和维护因为各层之间具有一定的独立性,只要维持调用接口不变,
2021-02-21 20:55:18
599
原创 网站的高性能架构
网站的高性能架构在年前项目验收的时候甲方爸爸想了解如何提高网站的性能,为此学习了相关知识。网站性能是客观的指标,可以具体体现到响应时间、吞吐量等技术指标,同时也是主观的感受,而感受则是一种与具体参与者相关的微妙的东西,用户的感受和工程师的感受不同,不同的用户感受也不同1. 网站性能测试性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。不同视角下的网站性能有不同的标准,也有不同的优化手段。1.1不同视角下的网站性能1.1.1 用户视角的网站性能从用户角度,网站性能就是用户在浏
2021-02-21 20:46:38
116
2
原创 集群环境下如何管理Session
集群环境下如何管理Session1.Session复制应用服务器开启Web容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使得每台服务器上都保存所有用户的Session信息,这样任何一台机器宕机都不会导致Session数据的丢失,而服务器使用Session时,也只需要在本机获取即可优点:1.方案简单2.获取Session速度块缺点:1.只能在集群规模较小的情况下使用如果集群规模大,会导致大量复制Session,会占用网络和服务器大量资源;并且如果出现大
2021-02-21 20:41:02
473
原创 常见的Web应用攻击手段
常见的Web应用攻击手段1.XSS攻击XSS攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。分类1.1 反射型攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的1.2 持久型黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的防护手段1.3消毒XSS攻击者一般都是通过在请求中嵌入恶意脚
2021-02-21 20:35:16
966
2
原创 项目如何分包
项目如何分包有没有每次创建新的项目或者要实现项目中某个模块的功能时对于如何分包充满疑惑?对此我在日常开发中总结了一个分包的方法论,目前应用起来还差强人意,如果有相同疑问的同学可以参考一下。1、按照类型方式划分例如将所有的接口放入一个包、Controller类放入一个包等等。优点:从类型看更为清晰缺点:不利于模块化开发,因为会将同一个功能的多个类分散在不同的包中2、按照功能方式划分将同一个功能的所有类放在同一个包中。优点:高内聚,便于模块化开发缺点:同一包内类型混乱最佳实践将功能耦合度高
2021-02-21 20:28:16
1426
原创 网站典型故障案例总结
网站典型故障案例总结这个文章会持续更新,内容包括自己和同事遇到的问题,以及书籍和网络中比较经典的问题。1.写日志也会引发故障1.1故障现象某应用服务器在项目发布后不久就出现报警,硬盘可用空间低于警戒值,并且很快就宕机。登录到线上服务器,发现log文件夹里的文件迅速增加,不断消耗磁盘空间。1.2原因分析部署完系统后硬盘还剩余几十个G,正常情况下这些磁盘空间足够了,但是该应用的开发人员将l o g输出的level全局配置为Debug。这样一次简单的Web请求就会产生大量的log文件输出,在高并发的用
2021-02-21 20:19:03
430
原创 【java高并发程序设计学习笔记】多线程基础知识和实用工具
java高并发程序设计java并发包同步控制重入锁重入锁使用java.util.concurrent.locks.ReentrantLock类来实现。锁实现包含的三要素:1、原子装填,使用了CAS操作。 2、等待列队,所有没有请求到锁的线程会进入等待列队进行等待。 3、阻塞原语 park()和unpark() 用来挂起和恢复线程。特性中断响应可以避免死锁,程序在等待锁的时候可以根据需要取消对锁的请求。学习链接:https://blog.csdn.net/yyd1992121
2020-12-06 13:13:20
109
原创 【JVM学习笔记】虚拟机字节码执行引擎
虚拟机字节码执行引擎java虚拟机核心组成部分之一,所有java虚拟机的执行引擎输入、输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果运行时栈帧结构java虚拟机以方法作为最基本的执行单元,栈帧则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息,栈帧需要分配多少内存编译期已经确定,并不会收到程序运行期变量数据的影响;以java程序的角度来看,
2020-12-02 22:17:38
170
原创 【JVM学习笔记】虚拟机类加载机制
虚拟机类加载机制java虚拟机把描述类的数据从Class文件加载到内存,并堆数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制类加载的时机类型从被加载到虚拟机内存中开始到卸载出内存为止的生命周期为:加载、验证、准备、解析、初始化、使用、卸载 总共七个阶段,其中验证、准备、解析三个部分统称为链接;加载、验证、准备、初始化和卸载是按照顺序执行的,而解析为了满足java动态绑定的需求可能会在初始化之后进行。必须立即对类初始化的六种情况虚拟机会为类
2020-11-29 20:14:18
133
原创 【JVM学习笔记】垃圾收集器与内存分配策略
垃圾收集器与内存分配策略对象已死?(判断对象是否可以回收)引用reference类型的数据中存储的数值代表的是另一块内存的起始地址强引用:代码中的引用赋值 例如 new对象;意义:对象不会被回收软引用:还有用非必须的对象;意义:在系统将要发生内存溢出前回收弱引用:非必须对象;意义:每次垃圾回收时都会被清理虚引用:最弱的一种引用;意义:可以让一个对象被回收时收到一个系统通知引用计数算法在对象中添加一个引用计数器,被引用加一,引用失效减一,为零就不会再使用可以回收优点:原理简单
2020-11-28 15:41:35
195
2
原创 【JVM学习笔记】java内存模型与线程
java内存模型与线程java内存模型内存模型一词可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象;在jdk5发布后java内存模型才终于成熟、完善起来主内存与工作内存java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节(这里的变量特指实例字段、静态字段、构成数组对象的元素,不包括局部变量与方法参数,因为后者是线程私有的)主内存java模型规定了所有变量都存储在主内存中,线程间变量值的传递均
2020-11-21 19:39:32
123
2
原创 【JVM学习笔记】java内存区域
java内存区域运行时数据区域程序计数器当前线程所执行的字节码的行号指示器,用来选取下一条需要执行的字节码指令线程私有唯一一个不会出现OOM的区域虚拟机栈线程私有每个方法执行时都会创建对应的栈帧入栈,执行完毕后出栈,栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息局部变量表用来存储基本数据类型、对象引用等信息本地方法栈线程私有虚拟机使用到的本地(Native)方法服务(可以是C、C++等语言提供的服务)java堆线程共享唯一目的就
2020-11-19 22:02:19
77
原创 mvn deploy报错 Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin
mvn deploy 报错 Failed to execute goal org.apache.maven.plugins:maven-gpg-plugin:1.6:sign (sign-artifacts) on project :Exit code: 2 -> [Help 1]今天在发布jar包到maven中央仓库的时候报错了 记录解决方法1、新增配置文件~/.gnupg/gpg.con新增如下配置:use-agentpinentry-mode loopback2、新增配置文件~/.g
2020-10-09 22:41:30
1634
原创 【Mysql高级操作】SQL 存储过程、游标、循环的使用
今天碰到一个需求,需要对数据库中的某一个字段按照一定规则更改数据,因为需求并不复杂 所以直接使用SQL进行解决,在此记录一下。【存储过程】按照我的理解就相当于定义一个函数,然后再调用,当然也是可以传参数的,我这里因为没有这种需求,所以没有定义参数。delimiter \\ -- 这个操作可以让mysql一次性执行一个代码块 而不至于碰到‘;’就执行drop procedure if exists proc_while; -- 如果存在名字为【proc_while】的存储过程 就先删除CREAT
2020-09-10 10:35:47
295
原创 Digester解析xml Demo
```java public Areas disgester(InputStream inputStream) throws IOException, SAXException { Digester digester = new Digester(); digester.setValidating(false); digester.addObje...
2019-10-15 22:33:46
172
原创 JDK源码阅读——HashMap
看源码前要明确一个基础知识,HashMap是 数组 + 链表 + 红黑树的 数据结构。存储数据时会先通过hash值判断存在数组哪个位置上,如果当前位置已经有数据了,就在其后面形成链表,当链表长度大于8时就会将链表转换成红黑树,提升查询速度。...
2019-06-09 16:25:28
326
原创 JDK源码阅读--ArrayList
JDK源码阅读--ArrayList被人说技术不行,代码不好,是一件很丢人的事情。知耻而后勇,提升自己从阅读源码开始。fighting!!!
2019-06-07 19:44:10
321
原创 sql 多表关联更新(亲测可用)
在实际工作中,总会碰到一种情况,就是更新一个表中的字段的时候要参考另一个表中的字段,这时候简单的 update set 语句已经不能满足实际需要,但是网上很多这方面的sql 又不能使用,所以在此记录一下。update a,b set a.id=b.pid where a.id_copy = b.id;a 和 b是表, 将a表的 id更新为 b表的pid 条件为 a表的id_copy = b...
2019-06-06 16:15:16
2870
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人