2022 08-13

springAOP和AspectJ有关系吗?如何使用springAOP面向切面编程

不知道大家有没有这样的感觉,平时经常说aop,但是对aop中的一些概念还是模糊,总感觉很飘渺,今天来梳理下关于aop的知识。 一、概念 我们知道现在开发都是spring,讲的最多的也是springAOP,在说springAOP前,先了解下AOP是什么? AOP是通过“预编译方式”和“运行期间动态代理”实现程序功能的统一维护的一种技术。AOP是一个概念,其实现技术有AspectJ和springAOP ,现在对AOP有个清楚的了解了,再来看下AOP中的一些概念。 切面(aspect),业务层面是程

2022 08-13

新版 Ubuntu 中 gnome-terminal 可恶的行间距问题逼我退回了 Ubuntu 20.04

不知道从什么时候起(可能是Ubuntu21.04,也可能是Ubuntu21.10),Ubuntu中的gnome-terminal的行间距就加大了,看起来极其不爽,特别是和Powerline之类的主题配合的时候尤为明显。好像这个问题很早以前就出现过,后来又改过来了,至少我的印象中Ubuntu20.04和Ubuntu20.10是正常的。最让人蛋疼的是,这个问题在网上还搜不到,难道只有我一个人被这个问题困扰吗? 事情是这样的,我最近看别人玩zsh还不错,特别是zsh中有一个主题插件,叫powerlev

2022 08-13

Java SE 8 新增特性

JavaSE8新增特性 作者:Grey 原文地址: JavaSE8新增特性 源码 源仓库:Github:java_new_features 镜像仓库:GitCode:java_new_features Lambda表达式 Java8里面最大的更新莫过于支持Lambda表达式,Oracle官网给了一个很好的示例说明,见:LambdaExpressions,以下来自这个官方示例说明。 假设我们定义一个Person类,属性如下 publicclassPerson{ publicstaticList

2022 08-13

Java反射原理和实际用法

背景 反射在Java中非常重要,是Java区别于其他编程语言的一大特性。Java中的AOP切面、动态代理等看起来像黑魔法一样的技术,就离不开反射、字节码等。这些技术能在不侵入原有代码的情况下,做一些增强的非功能性需求。多提一句,千万不要把业务逻辑放在AOP切面、动态代理里,否则后人绝对会骂。 AOP切面:在方法执行前后增加逻辑,可决定方法如何执行、甚至不执行。 动态代理:在运行时生成目标类的代理类,可增强目标类的功能。 本文总结一下反射的原理和实际用法。后续有空再介绍AOP切面、动态代理。

2022 08-13

mysql 8.0.28 查询语句执行顺序实测结果

TL;NRs 根据实测结果,MySQL8.0.28中SQL语句的执行顺序为: (8)SELECT (5)DISTINCT<select_list> (1)FROM<left_table> (3)<join_type>JOIN<right_table> (4)ON<join_condition> (2)WHERE<where_condition> (6)GROUPBY<group_by_list> (7)HAVIN

2022 08-13

Spring MVC组件之HandlerMapping

SpringMVC组件之HandlerMapping HandlerMapping概述 HandlerMapping组件的作用解析一个个Request请求,并找到相应处理这个Request的Handler。Handler一般可以理解为Controller控制器里的一个方法。 HandlerMapping组件主要做了两件事件。 在组件初始化时,会把Request请求和对应的Handler进行注册,其实就是把Request和对应的Handler以键值对的形式存在一个map中。 解析一个个Reque

2022 08-13

层次分明井然有条,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang包管理机制(package)EP10

Golang使用包(package)这种概念元素来统筹代码,所有代码功能上的可调用性都定义在包这个级别,如果我们需要调用依赖,那就“导包”就行了,无论是内部的还是外部的,使用import关键字即可。但事情往往没有那么简单,Golang在包管理机制上走了不少弯路,虽然1.18版本的包管理已经趋于成熟,但前事不忘后事之师,我们还是需要了解一下这段历史。 环境变量 一般情况下,golang在系统中会依赖两个环境变量,分别是:GOPATH和GOROOT,有点类似于Python的解释器目录的概念,GORO

2022 08-13

Java四大引用详解:强引用、软引用、弱引用、虚引用

面试官考察Java引用会问到强引用、弱引用、软引用、虚引用,具体有什么区别?本篇单独来详解@mikechen Java引用 从JDK1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期,这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。 强引用 强引用是最普遍的引用,一般把一个对象赋给一个引用变量,这个引用变量就是强引用。 比如: //强引用 MikeChenmikechen=newMikeChen();   在一个方法的内部有一个强引用,

2022 08-13

k8s驱逐篇(2)-kubelet节点压力驱逐

kubelet节点压力驱逐 kubelet监控集群节点的CPU、内存、磁盘空间和文件系统的inode等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消耗水平,kubelet可以主动地驱逐节点上一个或者多个pod,以回收资源,降低节点资源压力。 基于kubernetsv1.17.4 1.什么时候发生驱逐 kubelet结合以下数据项来做出驱逐决定:(1)驱逐信号;(2)驱逐策略;(3)驱逐监测间隔; 1.1驱逐信号 节点上的memory、nodefs、pid

2022 08-13

ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

  通过Rider调试的方式看了下ASP.NETCore5.0的WebAPI默认项目,重点关注Host.CreateDefaultBuilder(args)中的执行过程,主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限,先整体理解、建立框架,后面再逐步细化,对每个配置部分再详细拆解。 一.创建默认主机Host.CreateDefaultBuilder 1.创建主机构建器CreateHostBuilder(args) 基于ASP.NETCore5.0构建的Web