后端
文章平均质量分 77
阿狸远翔
这个作者很懒,什么都没留下…
展开
-
defer 与闭包,go 并发常见问题
参考网上的实现,提供了一种安全地启动并发的实现,其实就是类似AOP的思想,在所有goroutine启动之前defer+recover确保安全,同时提供了带err处理的方式(可选),省去之前单独传入errChan来收集错误的烦恼。所以在go 的并发中我们启动新的协程时要使用defer捕获新协程的panic,防止拖累主服务。遵循一个约定:谁创建,谁停止(谁创建goroutine,谁负责停止goroutine)读一个close的channel不会panic,会返回相应的零值。原创 2023-03-27 19:23:36 · 536 阅读 · 0 评论 -
DDD的一些知识
什么是DDD?Eric Evans 在其著作《领域驱动设计:软件核心复杂性应对之道》提出了一种新的架构设计方法——领域驱动设计(Domain Driven Design)简称DDD。对于初次接触DDD的开发同学而言,一些概念理解起来可能比较晦涩,在此把DDD的几个基础概念进行梳理记录。DDD中的那些概念1、领域领域在我们的认知当中和区域、地盘这些词都属于近义词,从字面意思上也可以看出来领域是用来确定范围和边界的。在我们进行业务建模时,DDD会按照一定的规则将业务领域进行细分,当领域细分到一定的程原创 2021-09-17 11:06:12 · 331 阅读 · 0 评论 -
使用Aop实现自定义注解 - 实战篇(统一日志打印)
使用Aop实现自定义注解- 原理篇使用Aop实现自定义注解 - 实战篇(统一日志打印)统一日志打印约定大于配置,系统提供对外的接口要有以下要求,这样的好处是我们可以对接口统一做定制化日志管理。比如只对更新接口打印入参。接口命名单个查询接口,???? findById批量查询接口,???? listByIds单个更新接口,???? updateById批量更新接口,???? batchUpdateById单个新增接口,???? save批量新增接口,???? batchSave原创 2021-06-14 16:22:26 · 1778 阅读 · 1 评论 -
基于模版方法 快速导入Excel数据到数据库
目录一、目标二、初始化分析整体流程数据导入流程三、技术选型文件导入文件读取四、程序设计整体设计详细设计五、最佳实践一、目标快速初始化园区,需要初始化部分,园区维度,不初始化全局维度二、初始化分析整体流程实施人员:数据准备-》数据检查开发人员:数据导入实施人员:数据验证数据初始化的过程主要是,将确定格式的数据导入数据库的过程。因为涉及实施人员,为了兼容性,文件格式采用Excel。数据导入流程对于开发而言数据导入分为三个流程:文件导入、文件读取,文件解析、插入数据库。接下来我们分别聊下各个流程。先原创 2021-06-14 12:02:44 · 935 阅读 · 2 评论 -
基于pikachu漏洞平台的 --SQL注入攻击学习与总结
SQL注入攻击基础知识常见注释符号(官方链接):mysql> SELECT 1+1; # 行内注释mysql> SELECT 1+1; -- 行内注释mysql> SELECT 1 /*行内注释 */ + 1;mysql> SELECT 1+/*多行注释*/1;mysql> SELECT * FROM table1 WHERE a=1 /*! AND b=2 */其中/*! */ 里面的语句会被MySQL识别并执行,但是会被其他系统原创 2020-10-16 18:01:28 · 1648 阅读 · 1 评论 -
线程钩子ShutDown Hook与Finally
线程钩子前言某些情况下,Finally无法释放线程资源,所以我们需要使用线程钩子释放。在线上对于分布式锁的释放,一般在Finally里进行,但是应用重启时的脚本使用的是kill-15指令关机,此时Finally里面的代码不会被执行,导致分布式锁无法释放。Finally一定会执行么?线程基础知识java中线程状态与转换关系如下图:其中箭头旁边的标注代表执行的线程方法。[外链图片转存中…(img-mQRWdhf5-1601360975262)]从running态转为Block阻塞态有三种方原创 2020-09-29 14:32:41 · 352 阅读 · 0 评论 -
多线程Spring注入对象问题的四种解法(@Autowired 注入为空)
多线程Spring注入对象问题的四种解法前言当我们使用多线程时,想给线程注入一个service,但是运行时发现service总是为null。举个????:public class MyThread implements Runnable { @Autowired Service application; public void run() {}}原因new Thread不在spring容器中,也就无法获得spring中的bean对象。根据SpringBean的生原创 2020-09-09 00:38:30 · 5308 阅读 · 2 评论 -
索引那些事--进阶版
索引那些事--进阶前言什么是好索引? 三星系统如何创建高性能索引?其它覆盖索引:索引和锁前言在去年笔者写了一篇MySQL索引那些事的文章,介绍了常见的索引分类,以及索引底层原理和部分索引特性。最近在工作的时候遇到问题,重新回顾一下遗漏的知识点。索引虽好,但是不能随意创建,不仅仅是因为索引会占用存储空间,而且在MySQL更新或新增数据的时候索引的维护成本会大大增加,甚至严重影响数据库的性能。在后期维护索引的时候又很难随意删除一个索引(无法确定是否有人在用),所以我们在新增索引的时候一定要慎重。那弄懂什么原创 2020-08-24 00:54:42 · 115 阅读 · 0 评论 -
JDK动态代理原理(源码层面)
JDK动态代理前言笔者在写设计模式的代理模式的时候,顺便想起并利用Java的JDK实现了动态代理。事后对源代码很感兴趣,于是顺手分析了一下。其中代理模式两种实现方式见:https://github.com/link8hu/java-源码分析public static Object newProxyInstance(...) throws IllegalArgumentException { //验证传入的InvocationHandler不能为空 Objects.r原创 2020-08-20 01:11:14 · 401 阅读 · 0 评论 -
使用Aop实现自定义注解 - 原理篇
自定义注解的实现本次我们将使用Spring boot 和AOP 实现自定义注解,主要功能是自动打日志。元注解元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:1.@Target,说明了Annotation所修饰的对象范围 2.@Retention,定义了该Annotation生命周期(编译/运行) 3.@Documented,是一个标记注解,没有成员原创 2020-07-31 22:02:49 · 5539 阅读 · 0 评论 -
Spring不支持静态变量注入原因及其解法
Spring不支持静态变量注入原因及其解法场景重现:原因分析:解决方案后话场景重现:以下变量在使用时会报空指针@Autowiredprivate static ReadService readService;原因分析:静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入。静态变量不属于对象,只属于类,也就是说在类被加载字节码的时候变量已经初始化了...原创 2019-09-28 11:24:08 · 709 阅读 · 0 评论 -
记一次高并发更新 feature--拓展字段 问题
记一次高并发更新 feature–拓展字段 问题##前言: 原思路:- 从数据库查出原有feature 1- 更新要修改的内容 2- 整个feature置入数据库 3##问题:在高并发情况下: 两线程同时查出了feature,并先后完成了2-3步,结果: 更新被覆盖解决办法:使用数据库JSON操作函数,在数据库上更...原创 2019-09-20 15:54:49 · 622 阅读 · 1 评论 -
SpringBootStarter 分析及其手写实现
SpringBootStarter 分析及其实现stater可以帮助我们省略很多的配置,我们不如分析下,SpringBoot的stater,然后实现一版自己的starter:主要是类似Mybatis那种自动根据条件注入的功能mybatis-spring-boot-starterMybatis-starter主要包含两个pom文件点进去可以看到:<project xmlns="http...原创 2019-08-31 23:27:51 · 586 阅读 · 0 评论 -
SpringBeaUtils 对比 ApacheBeanUtils
spring包中BeanUtils.copyProperties的实现。spring中实现的方式很简单,就是对两个对象中相同名字的属性进行简单get/set,仅检查属性的可访问性。private static void copyProperties(Object source, Object target, Class<?> editable, String... ignorePr...原创 2019-07-21 22:07:16 · 727 阅读 · 0 评论 -
MySQL JSON的支持
前言mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习nosql数据库。JSON的定义:中文官网创建表CREATE TABLE table_name ( id INT NOT NULL AUTO_INCREMENT, json_col JSON, PRIMARY KEY(id));创建JSONJSON...原创 2019-07-21 22:01:20 · 1919 阅读 · 0 评论 -
ThreadPoolExecutor面试题 及源码分析
线程池源码分析问题先说答案原因分析问题new ThreadPoolExecutor(10,100,10,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(10));一个这样创建的线程池,当已经有10个任务在运行时,第11个任务提交到此线程池执行的时候会发生什么,为什么?先说答案加入缓存队列。当前线程数小于corePoolSize,则创建线程当...原创 2019-07-25 10:48:44 · 559 阅读 · 0 评论 -
泛型集合对象初始化
标准定义://但是在jdk1.7以后 后面的泛型可以不用写,编译器会自动补充(某些情况下失效);Stack<Integer> stack=new Stack<Integer>(); 今天写代码时特意测试了一下泛型集合初始化的两种方法 Stack<Integer> stack=new Stack(); //jdk1.7 以后可用 S...原创 2018-10-13 22:29:04 · 1402 阅读 · 0 评论 -
git操作
添加远程仓库git remote add origin git@github.com:michaelliao/learngit.git //git@ 为GitHub项目下的连接git push -u origin master分支管理查看分支:git branch创建分支:git branch <name>切换分支:git checkout <name...原创 2018-11-17 22:32:36 · 114 阅读 · 0 评论 -
String的intern()方法 与运行时常量池(方法区)
String的intern()方法 与运行时常量池(方法区) String.intern()是一个Native方法,作用是:如果字符串常量池存在字符串相等(equals() )的字符串对象,就返回此常量池中的String对象。否则将String对象添加到常量池中,并返回此String对象的引用。 Jdk1.6及其之前的版本,常量池分布在永久带(方法区)中,In...原创 2018-11-24 21:46:52 · 765 阅读 · 0 评论 -
jvm虚拟机 class文件常量池与运行时常量池
jvm虚拟机 class文件常量池与运行时常量池class文件常量池java文件编译后生成class文件,里面存有两部分内容:类的版本、字段、方法、接口等描述信息。(字段是指我们平时在接口或类里声明的各种变量 int a 等)常量池:存放编译期生成的字面量和符号引用。class文件常量池就是指上面描述的class文件的常量池,其中字面量包括 文本字符串如“hello”、声明为fina...原创 2018-12-08 16:10:14 · 1209 阅读 · 0 评论 -
Java“Volatile”关键字浅析
volatile关键字浅析前言:在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。volatile关键字实现和Java内存模型、重排序息息相关比如:内存模型的缓存和volatile关键字的可见性,也涉及到并发的三个性质:可见性、有序性和原子性。本文我们先了解jav...原创 2019-01-07 16:55:35 · 193 阅读 · 0 评论 -
Spring bean生命周期
Spring bean生命周期参考spring实战20页对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收。而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制。Spring中每个Bean的生命周期如下:1.Spring对Bean进行实例化(相当于程序中的new Xx())2.Spring将值和Bean的引用注入进Bean对应的属...原创 2019-03-08 21:37:17 · 103 阅读 · 0 评论 -
华为暑期实习生技术面试(电话面试)部分问题及解答
相比UDP,tcp协议是如何保证可靠性的?TCP协议1)面向连接的可靠的传输控制协议,连接的建立需要三次握手,连接的释放需要进行四次握手才能保证连接的建立,数据的同步传输。2)面向字节流,会把从上层传输下来的数据当作是无结构的字节流。3)一对一的通信。4)TCP在IP协议的基础之上添加了序号机制,确认机制,超时重传机制,数据校验,从而保证传输的可靠性,同时保证不出现丢失或者是乱序。UD...原创 2019-03-08 21:42:53 · 1755 阅读 · 0 评论 -
spring boot 注解:@Autowired和@Resource
用途:做bean的注入时使用历史:@Autowired 属于Spring的注解 org.springframework.beans.factory.annotation.Autowired @Resource 不属于Spring的注解,JDK1.6支持的注解 javax.annotation.Resource共同点: 装配...原创 2019-03-21 22:30:38 · 5382 阅读 · 0 评论 -
redis 使用外网(公网)进行主从连接配置
我在华为云阿里云分别买了一台服务器,在进行主从配置时一直连接失败。经查询发现问题主要可能存在三个地方。1. 首先检查本地配置,我们必须配置master监听来自slaver--ip的6379端口,在master服务器使用‘netstat -ntlp’命令查看监听端口:tcp 0 0 0.0.0.0:2181 0.0.0.0:* ...原创 2019-03-26 17:24:39 · 1593 阅读 · 0 评论 -
@Resource 和 @Autowire 的区别
@Resource 和 @Autowire 的区别@Resource 是J2EE的注解,@Autowire 是Spring的注解@Autowire注入时By Type 如果要使用 By Name 需要配合@Qualifier 使用如下@Autowire@Qualifier(“size”)Size size;@Resource默认通过反射ByName注入,但是如果声明了Type...原创 2019-06-05 22:48:46 · 2264 阅读 · 0 评论 -
SpringBoot 结合Junit4 编写单元测试
@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = Application.class) //测试类最好放在主包(带有Application类的包里面)public class MetricsTest { private MockMvc mockMvc; //没有使用@Component 注解的类 需要...原创 2019-06-06 13:48:13 · 379 阅读 · 0 评论 -
MYSQL JSON的操作函数 -- JSON_SET (), JSON_INSERT(), and JSON_REPLACE()
InMySQL, 有一些函数可以帮我们处理JSON类型包括:JSON_SET(),JSON_INSERT(), andJSON_REPLACE()函数.语法三种函数的语法:JSON_SET(json_doc, path, val[, path, val] ...)JSON_INSERT(json_doc, path, val[, path, val] ...)JSO...翻译 2019-07-02 19:59:33 · 25647 阅读 · 0 评论 -
lombok 的var 使用时报错
报错信息:Use of var is disabled by default. Please add 'lombok.var.flagUsage = ALLOW' to 'lombok.config' if you want to enable is.解决方案:如果您使用的是maven,则只需在项目根文件夹中添加名为lombok.config的文件即可 文件内容应该是 : 别忘了...原创 2019-07-04 23:30:50 · 2731 阅读 · 0 评论 -
JDK代理和CGLIB代理 (springboot proxyTargetClass=true)
eclipse 报错The bean 'xxx' could not be injected as a 'xxx because it is a JDK dynamic proxy that implements:xxx最后定位是代理问题,今天我们来讨论下spring两种代理的问题JDK代理和CGLIB代理 (springboot proxyTargetClass=true)原创 2018-10-12 10:46:19 · 9428 阅读 · 4 评论