自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 问答 (1)
  • 收藏
  • 关注

原创 HashMap详解

HashMap是Java中的比较常见的集合,主要存放的是键值对,以key-value的形式存储,不是线程安全的。它里面的存储的key和value可以为null值,但是key只允许有一个null值。HashMap是无序的,无法保证里面存储的键值对的有序性。jdk1.8之前的版本底层采用的是数组+链表的方式组成,jdk1.8之后采用的是数组+链表+红黑树的方式。

2022-10-31 23:09:27 346 1

原创 Linux文件权限操作

我们在操作linux系统时,经常需要给系统中的文件夹赋予相关用户权限,如果权限过大,安全性较低,如果权限过小,对于用户的部分操作都会提示Operation not permitted,也就是权限不足,需要提权。我们在网上经常有人写分配777权限,我们需要知道里面的含义,这样才能适合我们自己的需求分配相对应的权限。

2022-10-30 23:43:46 375

原创 Http和Https

Hypertext Transfer Protocol Secure, 超文本传输安全协议,默认是工作在443端口,采用SSL/TLS协议来加密数据包,提高了数据的安全性。HTTP 的默认端口是 80,而 HTTPS 的默认端口是443http是明文传输,https是加密传输,https相对而言更安全。http连接简单,并且是无状态的。https连接需要使用秘钥进行加密解密,连接比http复杂。

2022-10-29 23:17:03 604

原创 JAVA常见基础知识点

但是StringBuffer线程是安全的,公开的方法都有synchronized修饰,都是同步的,StringBuilder线程是不安全的,但是效率高,StringBuffer适用于多线程,如果是单线程,使用StringBuilder更合适。++是自增运算符,—是自减运算符,如果放在变量后面,代表是先给变量赋值,再自曾/减1,如果放在变量前面,代表变量先自曾/减1,再赋值给变量。return: 如果直接return,代表结束方法的执行,如果是return 值,代表是返回一个指定的值。

2022-10-27 22:32:28 711

原创 Mybatis常见知识点

RowBounds需要传入offset和limit,该方式会把数据全部查询出来,然后进行处理,将offset之前的数据全部跳过,去除offset和limit之间的数据,属于逻辑分页。#{}是占位符,是在预编译的时候进行替换成?占位符,执行前才会把参数设置进去,相当于jdbc的PreparedStatement,替换后的变量会自动加上单引号,可以防止sql注入。${}是简单的字符串替换,属于静态文本替换,并且并不是在预处理的时候进行替换,实在编译的时候进行替换,可能会存在sql注入的风险。

2022-10-26 23:12:16 488

原创 Linux基础知识一

关注微信公众号「平哥技术站」, 每日更新,在手机上阅读所有教程,随时随地都能学习。

2022-10-25 22:56:11 598

原创 JVM中的进程和线程

一个进程可以有很多个线程,进程之间基本上都是独立的,但是同一进程中的不同线程很可能会相互影响。每个线程有自己的程序计数器、虚拟机栈和本地方法栈。

2022-10-24 23:11:04 590

原创 MySQL数据库规范

今天我们来聊一聊MySQL数据库常见的一些建议设计规范,参考阿里的《JAVA开发手册泰山版》,我们简单挑出几处进行简单分析和回顾复习,如果有不正确或者不足的地方,还请指正。我们今天简单选了10个规范进行简单的分析和回顾,对于部分规范,例如为何使用decimal,推荐使用的数据库编码等具体的原因分析,我之前文章也有详细写过,可以参考之前的文章,也可以详细的阅读《JAVA开发手册泰山版》及一些相关书籍。关注微信公众号「平哥技术站」, 每日更新,在手机上阅读所有教程,随时随地都能学习。

2022-10-23 22:07:39 313

原创 JWT基础概念详解

之前我们文章讲过分布式session如何存储,其中就讲到过Token、JWT。首先,我们来回顾一下使用Token进行身份认证。客户端发送登录请求到服务器服务器在用户登录成功之后会生成一个token,此时这个token可能会被存储到数据库、Redis等,实现可以共享,服务端会把生成的token返回给客户端客户端也会存储这个token,每次请求需要携带这个token即可。JWT是token的另一种方式,又有很多不同点。

2022-10-22 23:30:18 600

原创 JAVA基本类型和包装类型

Java语言中的数据类型分为基本数据类型和引用类型,而我们进行Java开发的时候都听说过基本数据类型和包装类型,今天我们就来详细聊一聊Java中的基本数据类型和包装类型之间的区别。

2022-10-21 22:47:51 381

原创 JVM、JDK、JRE你分的清吗

在我们学习Java的时候,就经常听到"需要安装JDK"、“运行需要JRE”、"JVM调优"等等,这里面的JVM、JDK、JRE你真的分得清吗,今天我们就来讲讲它们之间的关系。如果只是简单运行JAVA程序的话,安装JRE即可,但是如果是开发JAVA程序的话,那就需要安装JDK了,但是运行部分JAVA应用程序时,如果需要JDK来进行编译的,可能也需要安装JDK才可以运行。

2022-10-20 23:22:45 155

原创 使用Spring AOP实现系统操作日志记录

Spring 是一个广泛应用的J2EE框架,是针对bean的生命周期进行管理的轻量级容器,主要由Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web、Spring Web MVC七大模块组成。AOP是Aspect Oriented Programming的缩写,是面向切面编程,针对业务处理过程中的切面进行提取,降低了耦合度,提高了可重用性,经常用于日志记录、性能统计、安全控制、事务处理、异常处理等。

2022-10-19 23:04:33 1367

原创 JAVA设计模式-桥接模式

桥接模式是一种结构型模式,它主要是将抽象部分和实现部分进行分离,可以独立变化,降低类与类之间的耦合度。举例:我们现在需要实现不同形状,每个形状还要有不同的颜色,我们传统方式是定义一个形状类,再定义每一个不同的形状实现类,继承上面的形状类,这是形状的需求已经完成,接下来我们实现不同形状不同颜色的需求,我们需要再定义形状颜色类,继承上面的形状,每个形状颜色类定义不同的颜色,此时我们会发现扩展会非常麻烦并且层次非常多,这时我们可以使用桥接模式,将形状和颜色的抽象、实现分离开来。/***

2022-10-19 00:19:10 873

原创 分布式Session如何存储

Session(会话),用来记录信息确定用户身份,保存在服务端。当客户端浏览器访问服务器时,服务器会把客户端信息保存在服务器上,这个就是Session。和Session对应的是Cookie,Cookie也是记录信息确定用户身份的,不同的是,Cookie存储在客户端,Session存储在服务端。一般会结合使用,Session存储重要信息,次要信息使用Cookie存储。SessionCookie存储在服务端存储在客户端安全性高安全性低,存储在客户端,可以获取进行分析访问增多时,会占用服务器性能。

2022-10-19 00:07:07 578

原创 Github上把敏感文件或者API秘钥上传公共库并开放为public权限导致秘钥泄露

我们在开发项目时,可能会使用到一些加密文件,例如私钥,或者使用到一些云服务商提供的ak(Access Key Id)或者sk(Secret Access Key),使用这些时需要格外注意,不能泄露给别人,否则可能别人会恶意调用你的接口,例如短信,可能会导致短信欠费,但是,如果我们不小心上传到了自己的开源项目上,我们可以通过以下步骤,删除git提交记录,注意,一定要对仓库有所有权,有删除仓库权限,如果是上传到别人的项目,该方法不适用。拷贝下载后的BFG Repo-Cleaner到和你项目平级的文件夹中。

2022-10-18 23:58:07 778

原创 JAVA设计模式-代理模式

代理模式是一种结构型模式,它指的是给某一个对象提供一个代理对象,并且由代理对象控制原有对象的引用,可以增强原有对象的功能以及降低系统的耦合度。生活中例如某品牌的代理商,我们买东西通过代理商购买,不是和厂家直接购买。代理模式有静态代理和动态代理,例如,我们使用线程时实现的Runnable接口是使用的静态代理,Spring中的AOP是使用的的动态代理。

2022-10-18 23:41:09 105

原创 SpringBoot自定义Banner信息

本文主要介绍使用springboot框架时,我们可以自定义我们项目的相关信息,例如启动图、启动时的版本号等。我们在启动SpringBoot项目时,控制台会打印出SpirngBoot的图形,包含SpringBoot的版本号,这个图形叫做banner,如下图:接下来我们一起学习一下怎么自定义启动图形。首先我们需要在项目的resource文件夹下新建新文件,文件名命名为banner.txt,我们需要自定义的图形就放在该文件里面。我们可以在该网站复制网站生成的相关字体信息到banner.txt文件中。

2022-10-18 23:30:28 530

原创 JAVA获取jvm和操作系统相关信息

今日搬砖🧱时需要获取系统运行时间、版本号等相关信息,使用Java自带的类进行获取系统运行的相关信息,在这整理记录分享一下,感兴趣的小伙伴可以自己尝试尝试。首先获取jvm相关信息,包含jvm的名称、版本号、启动时间、运行时间、环境变量、进程id等等。包含jdk的版本、安装路径、当前运行jar包路径、运行jar文件名等。获取java虚拟机线程信息,包含线程的阻塞时间、次数、线程的堆栈信息等等。获取操作系统以及主机硬件信息,包含系统名称、版本、物理内存、可用内存等等。还可以获取JVM内存相关信息,例如堆内存。

2022-10-18 15:57:07 814

原创 Windows Server 2012 搭建Ftp服务器

FTP全称是FileTransferProtocol的简称,是一种文件传输协议。它使用TCP进行传输,客户和服务器建立连接前需要进行一个"三次握手"的过程,保证客户和服务器之间的连接是可靠的。一般我们使用FTP程序访问远程服务器上的资源,进行文件的上传和下载,并且可以在不同的操作系统之间进行文件的传输和访问。

2022-10-18 15:41:39 4472

原创 Markdown相关语法介绍

Markdown是一种轻量级标记语言,后缀是.md或者.markdown。

2022-10-18 15:26:51 327

原创 Bloom Filter概念和实现原理

Bloom Filter是由Howard Bloom在1970年提出的二进制向量数据结构,它具有较好的时间和空间效率,用来检测一个元素是否在某个集合中,但是缺点是,有一定的错误率和删除困难。

2022-10-18 14:00:18 530

原创 Vue项目打包成docker镜像部署

我们部署Vue项目,可以build之后,直接放到nginx下面即可,今天给大家介绍创建docker镜像,使用docker镜像启动容器运行部署Vue项目的方式,可以尝试尝试,原理和使用nginx部署一样,不过是使用的docker容器而已,内部还是使用的是nginx作为基础镜像。以上步骤即可帮助我们使用docker容器部署Vue项目,原理其实和我们使用nginx部署Vue是一样的,我们打包自己的镜像使用的基础镜像也是nginx,感兴趣的小伙伴可以自己动手尝试尝试。

2022-10-18 10:46:40 4596

原创 arthas使用介绍

Arthas是阿里巴巴旗下的一款开源的JAVA诊断工具,可以进行线上监控诊断产品,实时查看应用的内存、gc、线程等信息,方便排查线上问题。上方命令是基础的常用命令,快速判断应用问题原因,详细分析还需要借助其他命令,例如以下命令。monitor——方法执行监控。watch——函数执行数据观测,可以看到函数执行的调用情况、返回值、入参、异常等。trace——方法内部调用路径,并且输出方法路径上的每个节点的耗时。stack——当前方法被调用的调用路径。profiler——生成应用热点火焰图。

2022-10-09 14:01:11 460

原创 浅谈Mysql常见注意事项一

utf8mb4支持BMP和补充字符,对于BMP字符,utf8mb4和utf8mb3相同,但是对于补充字符,utf8mb4需要4个字节存储,utf8mb3每个字符最多使用3个字节,无法存储该字符,所以在创建表,使用utf8mb4,而不是utf8或者utf8mb3。decimal(20, 6): 小数部分是6,需要3个字节,整数部分是14,14-9=5,整数部分需要4个字节+剩余的5个存储需要的3个字节。decimal(18, 9):小数部分是9,需要4个字节,整数部分也是9,也需要4个字节。

2022-10-07 16:43:45 292

原创 JAVA设计模式-外观模式

外观模式是一种结构型模式,主要是为了隐藏系统的复杂性,对外提供一个可以访问的接口,客户端只需要访问这个接口即可。例如:我们现在的智能家居中的场景,平常我们下班回家,需要打开电灯,烧水、拉上窗帘、打开电视、打开空调,需要做很多事情,但是现在我们只需要回家之后在家里控制中心中设置为回家模式,对应的相关电器会自动执行相关指令,我们不需要关注具体的每一件事情,只需要设置场景为回家模式即可。JAVA开发中的三层开发模式也体现了外观模式。

2022-10-06 12:49:52 481

原创 JAVA设计模式-装饰模式

装饰模式是一种结构型模式,在不改变现有对象结构的前提下,给现有对象添加新的功能,动态增加职责,是现有类的一个包装。装饰模式可以动态的扩展一个实现类的功能,动态添加功能或动态撤销,并且不会修改原有对象的结构,是继承的一个替代模式。比较容易搞混的是代理模式,代理模式主要是由代理对象去控制原有对象。装饰模式主要注重增加撤销功能,代理模式主要强调对原有对象的控制。

2022-10-05 14:21:52 779

原创 JAVA设计模式-适配器模式

适配器模式是一种结构型模式,它主要解决接口之间的兼容问题。当我们需要使用某个类的接口时,但是这个类的接口目前并不符合我们使用需求,不能直接使用,那我们可以采取调整类和接口的方式,但是如果这个接口是第三方提供的,修改不了或者类和接口目前大量使用,并且使用稳定,不能轻易改动时,我们可以使用适配器模式,在不改动这个类的前提下来满足目前系统的需求。生活中也有例子,例如:生活中m2硬盘转SATA接口的转换卡、美版、港版与国行的电源适配器。

2022-10-04 21:06:18 775

原创 PicGo图床设置

PicGo是一款开源的图床管理工具,是可以快速的上传图片并且获得图片的URL链接的工具。目前支持Windows和macOS平台,可以方便的进行拖拽、复制粘贴等方式的上传图片。

2022-10-04 12:19:44 520

原创 Docker安装Portainer

Docker是一个开源的容器引擎,完全使用沙箱机制,相互之间不会有任何接口,并且容器性能开销低,让开发者可以打包应用或者依赖包到一个可移植的容器中,然后发布到windows或者linux操作系统的机器上。一个完整的Docker有以下几个部分组成:DockerClient客户端、Docker Daemon守护进程、Docker Image镜像、DockerContainer容器。

2022-10-02 22:30:03 3599

原创 Jstack排查线上CPU100%

jstack是JVM自带的Java堆栈跟踪工具,用于生成java虚拟机当前时刻的线程快照,来帮助定位线程出现长时间停顿的原因,例如死锁、死循环等。

2022-10-02 21:56:18 622

原创 JAVA设计模式-原型模式

原型模式是一种创建型模式,用于创建重复的对象,并且保证性能。原型模式创建的对象是由原型对象自身创建的,是原型对象的一个克隆,和原型对象具有相同的结构和相同的值。

2022-09-27 21:13:22 312

原创 MongoDB安装使用教程

MongoDB是一个基于分布式文件存储的数据库,是一个文档数据库,支持的数据结构非常松散,是类似json的bson格式,可以存储比较复杂的数据类型。

2022-09-27 20:32:22 529

原创 JAVA设计模式-建造者模式

建造者模式是通过一步一步的步骤构建一个包含多个部件的对象,每个不同的对象都是具有相同的构建过程。适用于复杂对象的构建,用户不需要知道具体的构建细节,只需要指定对象的类型即可。建造者模式将对象的构建和装配进行了解耦,可以使用不同的构建器,相同的装配过程构造出不同的对象。

2022-09-21 17:27:54 989

原创 Redis入门讲解(介绍、安装、常用命令)

关系型数据库是采用了关系模型来组织数据的数据库,以行和列的形式存储数据,由二维表及其之间的关系所组成的一个数据组织。关系型数据库采用SQL(结构化查询语言)对数据库进行操作。常见的关系型数据库有:MySQL、Oracle、SQL Server等等。Redis是完全开源的,是一种基于key-value的数据库。Redis中的数据都是存储在内存中,但是可以持久化到磁盘上。Redis支持主从同步,即master-slave模式的数据备份。

2022-09-19 15:00:08 234

原创 JAVA设计模式-工厂模式

简单工厂模式就是定义一个工厂类,工厂类提供获取实例的方法,方法会根据传入的参数不同来返回不同的实例。不同的实例基本都有共同的父类。对于下面的例子里面增加新的动物需要修改代码,否则无法扩展。工厂方法模式和简单工厂模式区别,简单工厂模式工厂类只有一个,工厂方法模式可能有一个或者多个,它们都是实现了相同接口的一组工厂类。抽象工厂模式可以理解成创建工厂的工厂,每一个生成的工厂又可以按照工厂模式创建对象。这里面其实有一个产品族的概念,产品族是不同的一组产品等级结构的一组产品。

2022-09-18 11:53:10 217

原创 JAVA设计模式-单例模式

在类的加载时就已经创建好对象,线程是安全的,但是会浪费资源。参考源码:JDK1.8 com.sun.glass.ui.monocle.KeyInput类在类的加载时就已经创建好对象,此处是使用静态代码块进行创建,线程是安全的。在第一次使用时进行创建对象,如果多个线程同时调用了getInstance()方法,可能会创建多个对象,线程是不安全的。这种写法也是在第一次调用时进行创建对象,但是在该方法上增加了synchronized同步锁,这样就可以保证只会有一个线程执行。

2022-09-17 21:49:32 266

原创 MySQL事务隔离级别

事务A读取到了事务B已经修改还未提交的数据,此时如果事务B回滚,则事务A读取到的数据就是无效的,这种数据就是"脏数据",事务A根据这个数据进行操作可能就会出现错误。事务A和事务B同时操作数据时,如果事务A修改了数据,没有提交数据时,事务B想增加、修改、删除数据,都必须等待事务A提交,事务B才能执行。事务A读取某一个字段时,事务B对该字段进行了修改,事务A再次读取该字段时,读取到的值和第一次读取到的值不一致。事务A查询表中数据,事务B新增了数据到该表中,事务A再次查询表中数据,两次查询结果不一致。

2022-09-15 16:01:25 133

原创 Nginx几种负载均衡方式介绍

负载均衡就是Nginx将请求分摊到不同的服务器中,保证服务的可用性,缓解服务压力,保证服务的响应速度,即使某一个应用服务不可用,也可以保证业务的正常进行,并且方便对服务器进行扩容缩容。负载均衡软件有很多,例如LVS、HAProxy等,今天我们仅讲解Nginx负载均衡常见的几种策略。

2022-09-14 21:04:17 882

原创 docker部署安装Nginx

Nginx是一个高性能的HTTP和反向代理web服务器,同事也提供了IMAP/POP3/SMTP服务。轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器占用内存少并发能力强。

2022-09-13 17:34:13 577

原创 Linux(RedHat、Ubuntu)安装docker

docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

2022-09-12 13:43:29 1731

空空如也

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

TA关注的人

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