- 博客(60)
- 资源 (8)
- 收藏
- 关注
原创 简单了解下JDK19预览版的 Virtual Threads
最近看到JDK19发布了,拖了这么多年终于加入了虚拟线程功能,目前还是预览阶段,上有详细的介绍,来先看看 Java 版的协程是怎么样的。
2022-10-16 00:54:16
927
原创 如何加密保护配置文件中的敏感内容(Spring Cloud微服务)
日常开发中接触到的敏感数据包括但不限于数据库和其他中间件及其他系统的账号密码,日志中的个人数据,比如手机号、身份证号和住址等等信息…这里我们只讨论在代码层面如何加密保护敏感数据,主要是配置文件中的敏感数据处理和推送到git仓库平台如何隐藏敏感数据。对对敏感数据的加密保护方法多种多样,不同层面上有不同的方法。对于数据库密码这类信息,常用的连接池比如带有加密工具,但是比较局限,如果是SpringCloud很多服务的项目,可以用配置中心,统一管理各个服务的配置;如果是想加密整个配置文件,可以使用。...
2022-07-31 13:11:05
1556
原创 几种消除if/else的方式
随着项目的越来越复杂,条件分支越来越多,代码充斥着大量的if/else和switch/case判断,甚至是多层嵌套的if/else,我们需要重新重构或者组织逻辑代码。
2022-06-28 11:08:53
3374
原创 笔记应用选择和知识管理
开发人员在职业生涯会学习许多技术和技能,随着知识积累越多,复杂度越大,就容易觉得知识体系很混乱。所以就需要我们做笔记,构建自己的知识体系,而且由于各种编程语言和技术之间本身也有共通的地方,做好归纳和关联更有利于我们快速学习新的技术。...
2022-06-28 11:08:10
1121
原创 动态规划算法
动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理科学、电脑科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
2022-06-28 11:06:40
182
原创 Redis systemd 服务和 daemon no 配置的冲突问题
Ubuntu 虚拟机安装 Reis,sudo apt install redis -y。然后照着以前的经验修改了配置文件/etc/redis/redis.conf,关闭保护模式,设置守护线程,去掉外网访问限制:# By default protected mode is enabled. You should disable it only if# you are sure you want clients from other hosts to connect to Redis# even if
2022-04-06 00:35:54
1200
原创 Python 中的协程
协程很久之前就知到这东西,但是 Java 没有,也就没怎么去了解,最近在学 Python 接触到协程,做个记录。概念说到协程一般都会联系到进程和线程,通常请款下这三者的比较如下:进程:程序执行的一个实例,一个进程最少包含一个线程,不同进程之间的切换代价大;线程:CPU 调度的基本单位,进程的一个实体,线程的上下文切换代价比进程小;协程:是一种用户态的轻量级线程,一个线程可包含多个协程。协程的最大的优势是极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,
2022-04-06 00:33:57
264
原创 再探枚举类Enum
枚举类是 Java 很常见的类了,最近在推上看到一个很有意思的枚举用法,加上执行开发中碰到的枚举的一些问题,这里记录一下。枚举定义和使用场景枚举是一个被命名的整形常数的集合。在 Java 中,描述抽象的事物外面用类和接口,但有些特殊的类的属性是一组固定的常数集合,那么就可以用枚举来表示,典型的例子比如星期有周日到周一,人类的性别有男女…嗯,如果见过国外的一些网站可能会有一些跨性别或其他选项可选,不过还是一样是常数集合。比如一个 Person 类,性别 gender 用0表示女的,1表示男的,在数据库字
2022-04-04 19:25:34
752
原创 把 Tiddlywiki 整合到 Hexo 中一起部署
最近在找一款 wiki 用来记录一些系统化的知识和笔记,发现了 TiddlyWiki 这个东西。TiddlyWiki 是一个仅由单个 HTML 文件组成的非网络应用的 Wiki 程序,不依赖数据库存储数据,非常有特色,能装插件,玩法也比较多。既然最后发布到互联网都是静态文件,那就放到 Hexo 一起部署好了,不需要再搞一个服务来放 TiddlyWiki 的单 HTML 文件了,而且也能一起做版本管理。我们可以将 TiddlyWiki 的单 HTML 文件放到 Hexo 的 public/wiki 文件夹
2022-01-21 11:06:58
468
原创 从 Java8 到 Java11 再到 Java17 的新特性(3)
2021年9月14日甲骨文正式发布 Java 17,这是继 Java11 之后的又一个 LTS 版本,而且 Oracle 开始提供免费使用的许可证,并在下一个 LTS 版本之后继续提供整整一年。所以还是有限制的,一般我们都用 OpenJDK 得了,来看看 Java12 到 17 提供了哪些新的语言特性和 API。本文源码地址:code-note1. Switch 表达式在 Java 12(12、13预览,14正式) 之后,对 Switch 表达式进行了改进,比传统写法更简便,在 Java17 的预览版
2021-11-09 17:24:48
3045
原创 从 Java8 到 Java11 再到 Java17 的新特性(2)
2018年9月26日,Oracle 官方宣布 Java 11 正式发布,这是自 Java8 之后 Java 大版本周期变化后的第一个长期支持版本。这篇介绍的是 Java9 到 Java11 累积的一些新特性,只涉及语法和编码上的功能,其他的如工具和虚拟机改进不涉及。本文源码地址:code-note1. 接口接口允许有私有方法interface Enhance { default void defaultMethod() { init(); } privat
2021-11-09 17:24:22
2143
原创 从 Java8 到 Java11 再到 Java17 的新特性(1)
从 JDK8 之后,Java 的更新策略改为以时间驱动的方式,每六个月发布一个新的Java版本,每三年发表一个长期支持版本。一般如果要对旧 JDK 进行升级,都会选择长期支持版,JDK11 和最近更新的 JDK17 是长期支持版本。但是由于商业项目更看重稳定性,更新 JDK 带来的收益不大,大多数人不愿意踩坑去更新 JDK。因此,很多人都只是从新闻了解到新 JDK 的新特性,平常开发没有接触到,甚至有些在用 JDK8 的人连 JDK8 的新特性都用不利索或者直接就不知道。其实许多新特性是可以简化我们的开发,
2021-11-09 17:23:27
8448
2
原创 IDEA 部署 Docker 到 WSL2
本地环境 Windows10+WSL2(Ubuntu)在服务器安装 Docker 之后,开启远程访问sudo vi /etc/default/docker 修改配置# 开启远程访问 -H tcp://0.0.0.0:2375# 开启本地套接字访问 -H unix:///var/run/docker.sockDOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"sudo service docker restart 重
2021-07-19 12:30:49
1390
1
原创 WSL2 Ubuntu 子系统安装 MySQL8 的一些小问题
运行命令安装 sudo apt install -y mysql-server输出的日志,可以看到安装完之后启动没成功.......emitting double-array: 100% |###########################################|reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316emitting matrix : 100% |######################
2021-07-03 00:11:02
2189
1
原创 wsl2 ubuntu 子系统设置固定 IP 和开机启动程序
设置固定 IP每次重启电脑后给 wsl2 分配的 IP 一般都会变动,我们要连接子系统内部的应用频繁换 IP 会很麻烦,参照别人的解决方法,可以给 Ubuntu 子系统中添加一个新的网卡来给宿主机连接用。wsl -l 命令看下你的子系统分发版列表,要设置的是哪个PS C:\Users\uu> wsl -l适用于 Linux 的 Windows 子系统分发版:Ubuntu (默认)# 指定发行版子系统,添加一个 eth0:1 网卡,IP 为 192.168.50.28(网段内自己随便设个
2021-07-02 23:57:09
12548
4
原创 VirtualBox Ubuntu20.04 网络设置
虚拟机需要既能与宿主机通讯,又能访问公网,在 VirtualBox 可通过 Nat 实现连接外网,通过 Host-Only 实现与宿主机通讯。VirtualBox 网络的几种连接方式NAT 模式如果主机可以上网,虚拟机可以上网虚拟机之间不能ping通虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机)主机不能ping通虚拟机桥接模式如果主机可以上网,虚拟机可以上网虚拟机之间可以ping通虚拟机可以ping通主机主机可以ping通虚拟机以上各点基于一个前
2021-06-22 11:18:20
5791
7
原创 IP 地址表示方法
有时会看到一些有关 ip 段的写法是这样的:“192.168.1.1/24”,这种写法叫 CIDR 无类域间路由。“/” 后面的数字控制前面 ip 地址的掩码,以表示后面有几位可以变。具体解析如下:网段区间 192.168.1.1/24IP 地址 192.168.1.1,由 4 段 32 bit 组成,即11000000 10101000 00000001 00000001/24 表示子网掩码前 24 位为 1,后面为 0,子网掩码和 IP 地址按位与运算11111111 11111111 11
2021-06-06 01:28:48
5758
原创 知识库——微服务
微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。1. 实施微服务好处针对特定服务发布,影响小,风险小,成本低频繁发布版本,快速交付需求低成本扩容,弹性伸缩,适应云环境2. 带来的问题分布式系统的复杂性部署,测试和监控的成本问题分布式事务和CAP的相关问题3. Spring Cloud 组件注册中心 Eureka,其他的还有.
2021-06-05 01:04:14
280
原创 知识库——第三方框架
1. Spring1.1. Spring 模块组成Spring Core 框架核心,提供 IOC 容器,管理 bean 对象Spring Context 提供上下文信息Spring Dao 提供 JDBC 抽象层Spring ORM 提供“对象/关系”映射 APIs 的集成层Spring AOP 切面编程功能Spring Web 提供 web 开发的上下文信息Spring Web MVC 提供了 web 应用的 model-view-controller 实现1.2. AOP面向切面编
2021-06-05 01:03:33
1077
原创 知识库——集合框架
1. 总体结构容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。Map 接口和 Collection 接口是所有集合框架的父接口Collection 接口的子接口包括:Set 接口和 List 接口Map 接口实现:HashMap:线程不安全,键值可为 nullLinkedHashMap:双向链表,元素默认按插入顺序排序TreeMap:实现 SortedMap 接口,默认按键值升序排序,可指定排序的
2021-06-05 00:55:36
346
原创 知识库——Linux 命令
系统信息1. uname用于查看系统信息uname -a 显示全部信息2. lscpucpu 架构信息文件和目录操作1. ls列出文件或者目录的信息,目录的信息就是其中包含的文件。## ls [-aAdfFhilnrRSt] file|dir-a :列出全部的文件-d :仅列出目录本身-l :以长数据串行列出,包含文件的属性与权限等等数据-h : 和 -l 一起使用,列出文件同时以合理易读的单位显示文件大小2. cd更换当前目录。cd [相对路径或绝对路径]3.
2021-06-05 00:52:27
687
原创 知识库——数据库
1. 数据库三范式列不可分,确保表的每一列都是不可分割的原子数据项。作用:方便字段的维护、查询效率高、易于统计。属性字段完全依赖(完全依赖指不能存在仅依赖主键的部分属性)于主键。作用:保证每行数据都是按主键划分的独立数据。任何非主属性字段不依赖于其它非主属性字段。作用:减少表字段与数据存储,让相互依赖的非主键字段单独成为一张关系表,记录被依赖字段即可。三大范式只是一般设计数据库的基本理念,可以设计冗余较小、存储查询效率高的表结构。但不能一味的去追求数据库设计范式,数据库设计应多关注需求和性能,
2021-06-05 00:46:03
1344
原创 知识库——Java 并发
1. 基本概念1.1. 进程、线程和协程进程:程序执行时的一个实例,一个进程至少包含一个线程,同进程里多个线程可共享数据,不同进程之间切换代价大。线程:CPU 调度的基本单位,线程上下文切换代价比进程小,是进程的一个实体。协程:是一种用户态的轻量级线程,一个线程可包含多个协程。进程和线程都是同步,协程是异步。1.2. 并行与并发并行指多个事件在同一个时刻发生;并发指在某时刻只有一个事件在发生,某个时间段内由于 CPU 交替执行,可以发生多个事件。并行没有对 CPU 资源的抢占;并发执行的
2021-06-04 14:18:39
296
原创 知识库——Java 内存模型和 JVM
1. Java 内存模型1.1. 概念Java 内存模型(即 Java Memory Model,简称 JMM )本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。1.2. JMM 关于同步的规定线程解锁前,必须把共享变量的值刷新回主内存;线程加锁前,必须读取主内存的最新值到自己的工作内存;加锁解锁为同一把锁。1.3. 主内存和工作内存Java 内存模型规定了所有的变量都存储在主内存中
2021-06-04 13:23:31
325
原创 知识库——Java 基础
1. 基本概念1.1. JDK 和 JRE 有什么区别?JRE:Java Runtime Environment( Java 运行时环境)。即java程序的运行时环境,包含了 Java 虚拟机,Java 基础类库。JDK:Java Development Kit(Java 开发工具包)。即 Java 语言编写的程序所需的开发工具包。JDK 包含了 JRE,同时还包括 Java 源码的编译器 javac、监控工具 jconsole、分析工具 jvisualvm 等。1.2. Java 语言有哪些特
2021-06-04 13:19:20
399
原创 知识库——计算机基础
1. 操作系统1.1. 基本特征1.1.1. 并发1.1.2. 共享1.1.3. 虚拟1.1.4. 异步1.2. 基本功能1.3. 系统调用1.4. 宏内核和微内核1.4.1. 宏内核1.4.2. 微内核1.5. 中断分类1.5.1. 外中断1.5.2. 异常1.5.3. 陷入2. 网络2.1. 网络模型2.1.1. OSI(Open System Interconnection 开放系统互连)七层模型2.1.2. 五层协议2.1.3. ..
2021-06-04 13:08:05
441
原创 Java 知识库
构建自己的知识库个人认为是一件很有必要的事情,可以让自己知道会哪些知识不会哪些知识,规划学习的路线。知识库内容不管是自己写的,还是通过整理资料汇总的,能经过自己消化的都能够对自己有收益。最近离职有空就做了下整理,顺便可以准备面试。文档中许多文本内容和图片搜集于 GitHub 上其他作者编写的文档、专业技术书籍和各类博客文章,由于大量引用和出处繁杂,没有一一做出处说明。下面是在 GitHub 上的大纲模板,后面会把内容再搬到博客来,如果有错误欢迎指出。文档Java 知识脑图计算机基础Ja
2021-06-04 11:28:56
213
原创 Spring Boot打包和部署(解决打包太大和快速部署补充)
SpringBoot 工程若用简单的 clean package 命令打包会包含所有依赖 jar 包,如果工程依赖比较多的时候,打的包通常动不动就几十 m 大。这使得在部署到远程的时候,如果你的网络是小水管的就要传半天了,而且上微服务的项目,多个工程,一个工程还多台机器,更新部署需要浪费许多时间。SpringBoot 启动可以以加载外部依赖目录来启动工程,所以我不必每次打包都包含一堆 jar 包...
2019-03-08 14:56:21
2640
5
原创 闭包
在Web开发中,在使用JavScript时,就算没用过,也听说过闭包这个名词。闭将外部作用域中的局部变量封闭起来的函数成为闭包,本质就是一个函数。 闭包的作用 - 保护函数内变量的安全,不能被外部随意修改,只能通过制定函数接口操作 - 在内存中维持变量,不会被销毁,所以弊端是滥用可能造成内存泄漏例子function fun() { var num = 9; add = func
2017-09-25 14:48:38
736
原创 RESTful 的基本认识
在很早之前接触 Spring MVC 的时候,都知道 Spring MVC 支持 RESTful 风格API的开发,但对于 RESTful 只是有个模糊的认识,以至于甚至在开发写出来的接口其实不符合 RESTful 的要求。定义REST 的全称是 Resource Representational State Transfer ,资源以某种表现形式进行状态转移 Resource:资源,即数据;
2017-09-24 14:22:19
1497
原创 用本地服务器解决node-sass安装失败问题
今天要用到node-sass这东西,使用命令 npm install node-sass --save 安装。然而搞半天始终下载不来,换成淘宝的镜像都不行,因为下载时还会去github下载一个 win32-x64-48_binding.node 的包,然后下不来就一直卡着最后失败。 一种解决方法就是根据下载失败提示的链接直接把那个二进制包下载下来,然后放在本地服务器目录下,比如可以根据失败提示的版
2017-09-23 09:40:33
1828
原创 线程池
创建一个新的线程是有代价的,创建大量的线程会消耗许多系统资源,影响系统的性能。这时,我们就需要使用线程池来管理线程,线程池能缓存线程,可用闲置的线程来执行新任务,能有效控制线程并发数,并对线程进行一些简单的管理。先创建一个线程任务类public class TaskThread implements Runnable{ private static final Logger LOG = Lo
2017-08-02 22:31:03
374
原创 Spring Boot 打包部署
Spring Boot默认集成Web容器,部署也相对简单,如果需要以war包形式部署在外部Web容器上也可以,只需要做一些简单的修改配置。 使用集成的Web容器部署方式打包 maven 工程在 eclipse 中执行 Run as Maven build,输入 clean package 进行打包,这里要注意的是 Spring Boot 打成jar包要可以运行,必须使用Spring
2017-07-26 22:29:48
800
原创 泛型
泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。使用泛型,意味着编写的代码可以被很多不同类型 的对象所重用。泛型类public class ClassTest<T> { public T firtsFiled; public T secondFiled; public void setFirtsFiled(T data){ firtsFiled
2017-07-07 16:44:11
275
原创 ThreadLcoal
ThreadLcoal不是线程,而是一个创建线程的局部变量的类,主要用于存储多线程下类的某些变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,当前线程的ThreadLocal的变量只能被该线程访问,而其他线程访问不到。使用类定义,支持泛型 public class ThreadLocal<T> 初始化值 private T setInitialValue() set方法
2017-07-02 11:00:20
419
原创 SSM框架,基于JavaConfig配置方式,不用xml配置文件
在使用Spring开发时,我们经常会看到各种各样xml配置,过于繁多的xml配置显得复杂烦人。在Spring3之后,Spring支持使用JavaConfig来代替xml配置,这种方式也得到越来越多人的推荐,甚至在Spring Boot的项目中,基本上已经见不到xml的影子了。这里将使用JavaConfig方式对SSM框架进行整合。一、maven 的pom.xml配置 各种jar包的配置如下<pro
2017-06-14 22:14:27
12421
原创 Spring Boot 普通类调用Bean对象的一种方式
有时我们有一些特殊的需要,可能要在一个不被Spring管理的普通类中去调用Spring管理的bean对象的一些方法,比如一般SpringMVC工程在controller中通过 @Autowiredprivate TestService testService;注入TestService 接口就可以调用此接口实现类的实现的方法。 但在一般类中显然不可以这么做,注入的 TestService 将会
2017-06-08 18:28:38
12928
原创 Spring Boot 过滤器、监听器和拦截器使用
1、过滤器和监听器 Spring Boot中对于过滤器和监听器的使用跟一般web工程中使用方式没什么不同,使用注解方式就可以快速创建,只是要使用注解方式需要在Application类加上 @ServletComponentScan 注解表明开启servlet的注解 创建一个监听器@WebListenerpublic class FirstListener implements ServletC
2017-06-08 17:49:41
10046
1
spring+springmvc+mybatis整合
2016-04-10
spring+springmvc+mybatis整合简单工程
2016-04-09
spring+springmvc+mybatis整合例子
2016-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人