- 博客(49)
- 资源 (3)
- 收藏
- 关注
原创 MySql中binlog与redolog的介绍
在MySQL中有两种重要的日志文件,分别是binlog和redolog。binlog记录的是MySQL所执行的所有的DDL(数据定义)和DML(数据操作)语句,并以二进制的格式进行存储的一种日志文件,是MySQL的server层运行产生的,不具备crash-safe能力;redolog记录的是数据库运行过程中在某个数据页上做了那些修改的,是内存层面的修改,是InnoDB引擎所独有的的日志记录文件。下面分别详细介绍下这两种日志。
2023-05-04 11:39:43 345
转载 Servlet路径匹配
四种匹配方式精确匹配:无通配符的精确字符串路径匹配: 以/开头,且以/*结尾后缀匹配:以*.开头,所以/api/*.jsp这么写是非法的缺省匹配:固定值 /若当路径匹配,/*后面不能再有任何东西若当后缀名匹配,*.必须是最前面URL匹配注意事项举例两种典型的错误理解,应该能帮助到你:/api/*.jsp:该urlPatterns是非法的,原因为:若当路径匹配,/*后面不能再有任何东西若当后缀名匹配,*. 必须是最前面/api//demo:这个urlPatterns是合法的
2022-04-06 14:53:39 339
转载 Mybatis在Mapper.xml排序失效
#{user_id} 将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号如: order by #{id},如果传入的值是id,那么解析成sql时的值为order by “id”,这种情况会造成排序失败$将传入的数据直接显示生成在sql中。如:order by ${user_id},如果传入的值 如果传入的值是id,则解析为order by id。所以order by 排序,要使用$而不是#摘自https://blog.csdn.net/hongweigg/article/details.
2022-03-29 10:50:12 742
原创 Jackson匿名化输出
背景在项目的开发中,经常会把第三方接口的返回值以json字符串的形式打印到日志中方便出现问题后进行定位,但是在一些项目中会有一些敏感的信息不能打印到日志中,需要进行匿名化的处理,下面介绍两种常见的实现方式方案一直接在需要匿名化的字段上使用 @JsonSerialize(using = AnonymizeJsonSerializer.class)注解的形式-实现和下面一样,由AnonymizeJsonSerializer来实现序列化优点1、对所有的ObjectMapper有效2、容易理解、方便.
2022-01-04 17:30:47 533
原创 RestControllerAdvice和ControllerAdvice使用详解
RestControllerAdvice和ControllerAdvice使用详解背景 在日常工作中,经常需要对系统抛出的各种异常进行一个处理,这个时候就可以使用@ControllerAdvice注解了,@RestControllerAdvice其实就是在@ControllerAdvice加了一个@ResponseBody注解,用来将返回值写入到响应体基本使用方法一般是定义一个异常处理类,在上面标注注解,就可以进行全局异常处理,异常处理类的注解如下:@RestControllerAdvice
2021-07-19 15:39:02 3935
原创 使用状态机来管理对象状态变更
文章目录1.背景2.定义接口和基础类3.具体的实现4.总结1.背景 在日常工作过程中,我们经常会遇到状态的变化场景,我们往往需要对对象的当前状态和发生事件来确定状态的变更是否合法,确定下一个状态等操作,我们可以使用很多的if else操作来进行判断,但是不太好看,下面使用一个例子介绍一个使用状态机来管理状态的方式。2.定义接口和基础类首先我们定义一个接口StateMachine,里面只有一个方式,根据当前的状态和发生的事件,返回下一个合法的状态,如何没有合法的状态则返回empty。 具体的代
2020-12-20 13:32:18 459
原创 Java创建对象的几种方式
Java创建对象的几种方式(重要):(1) 用new语句创建对象,这是最常见的创建对象的方法。(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。(3) 调用对象的clone()方法。(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 rea
2020-12-20 12:42:15 176
原创 几种简单的排序
1.冒泡排序 主要思路: 从前往后依次交换两个相邻的元素,大的交换到后面,这样每次大的数据就到后面,每一次遍历,最大的数据到达最后面,时间复杂度是O(n^2)。2.选择排序 主要思路:每次遍历序列,从中选取最小的元素放到最前面,n次选择后,前面就都是最小元素的排列了,时间复杂度是O(n^2)。3.插入排序 主要思路:使用了两层嵌套循环,逐个处理待排序的记录。每个记录与
2020-12-20 12:41:53 438
原创 Java集合源码阅读笔记-ArrayList
1.数组中元素的移动都是使用System.arraycopy(Object src, int srcPos,Object dest, int destPos, int length)的本地方法实现的2.在remove方法中:移除元素之后要将之前元素占用的位置设为null方便GC回收3.在batchRemove中使用if (c.contains(elementData[r]) == c
2020-12-20 12:40:59 104
原创 Kafka生产者
整个生产者客户端由两个线程协调运行,这两个线程分别为主线程和Sender线程(发送线程)。在主线程中由KafkaProducer创建消息,然后通过可能的拦截器、序列化器和分区器的作用之后缓存到消息累加器(RecordAccumulator,也称为消息收集器)中。Sender 线程负责从RecordAccumulator中获取消息并将其发送到Kafka中。RecordAccumulator 主要用来缓存消息以便 Sender 线程可以批量发送,进而减少网络传输的资源消耗以提升性能。RecordAccumul.
2020-12-14 20:01:09 102
原创 Kafka消费者
基本概念消费者(Consumer)负责订阅Kafka中的主题(Topic),并且从订阅的主题上拉取消息。与其他一些消息中间件不同的是:在Kafka的消费理念中还有一层消费组(Consumer Group)的概念,每个消费者都有一个对应的消费组。当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者。每个消费者只能消费所分配到的分区中的消息。换言之,每一个分区只能被一个消费组中的一个消费者所消费订阅主题与分区在创建好消费者之后,我们就需要为该消费者订阅相关的主题了。一个消费者可以订阅一个或多个
2020-12-14 20:00:36 285
原创 Jenkins基础
##PipelinePipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化基本概念node关键字node就是用来区分,Jenkins环境中不同的节点环境。例如一个Jenkins环境包括master节点,也就是主节点,还包括N多个从节点,这些从节点在添加到主节点的向导页面中有一个参数,好像是label,就是给这个从节点取一个名称。在Pipeline代码中可以通过node这个关键字告诉Jen
2020-12-14 19:59:40 715
原创 Kafka基本概念
Producer生产者,发送消息的一方。生产者负责生产消息,然后投递到Kafka中Consumer消费者:接受消息的一方,消费者连接到Kafka中并接受消息Broker服务代理节点,可以简单的看作一个独立的Kafka服务节点,producer将消息发完broker,consumer从broker中拉消息Topic主题是一个逻辑上的概念,Kafka中的消息以Topic为单位进行归类,生产者将消息发送到特定的主题,消费者负责订阅消息并进行消费。####Partition一个主题可
2020-12-13 15:38:26 104
原创 Sql query order of execution, on、where的区别
Query order of executionFROM and JOINsThe FROM clause, and subsequent JOINs are first executed to determine the total working set of data that is being queried. This includes subqueries in this clause, and can cause temporary tables to be created under
2020-12-13 15:37:14 246
原创 spring boot 配置文件杂记
bootstrap.yml与application.yml的加载都是在ConfigFileApplicationListener.postProcessEnvironment中完成的,在BootstrapApplicationListener中配置了spring.config.name与spring.config.location,在ConfigFileApplicationListener会根据这两个参数查找指定的文件进行加载(如果不存在则使用默认的).如果bootstrap.yml中配置的属性会放在名
2020-12-13 15:35:46 142
原创 java线程池学习
本文摘抄自深度解读 java 线程池设计思想及源码实现构造线程池的基础参数corePoolSize核心线程数,不要抠字眼,反正先记着有这么个属性就可以了。maximumPoolSize最大线程数,线程池允许创建的最大线程数。workQueue任务队列,BlockingQueue 接口的某个实现(常使用 ArrayBlockingQueue 和 LinkedBlockingQueue)。keepAliveTime空闲线程的保活时间,如果某线程的空闲时间超过这个值
2020-12-13 15:33:02 86
原创 Java元注解
内置的元注解 @Retention, @Target, @Documented, @Inherited, @Repeatable(1.8)@Inherited 注解@Inherited 标明注解是能够被传递到子类的,即注解在父类的注解也会作用到它的子类上去,但是标注在接口上则子类不会获取到该注解,同样在方法上也不会被子类获取Java 元注解及 Spring 组合注解应用@Target 注解ElementType.ANNOTATION_TYPE 的用处,好像也就是一个约束,只限定被它声明了注解只
2020-12-13 15:30:53 129
原创 Unsafe类的使用
####1.unsafe类的使用unsafe类一般作为一个静态变量存储在一个类里面,他可以类中某个属性的内存偏移地址,需要修改属性是传入类对应对象的实例,从而修改指定对象实例的属性值1.操纵对象属性public native long objectFieldOffset(Field f);通过此方法,可以获取类中某个属性的内存偏移地址,然后可根据偏移地址直接对对象的属性进行修改,属性是否可读都无所谓,都能修改。2.操作数组元素public native int arrayBaseOffset(
2020-12-13 15:29:44 275
转载 深入分析 java 8 编程语言规范:Threads and Locks
摘自深入分析 java 8 编程语言规范:Threads and Locks1.同步Java 提供了多种线程之间通信的机制,其中最基本的就是使用同步 (synchronization),其使用监视器 (monitor) 来实现。java中的每个对象都关联了一个监视器,线程可以对其进行加锁和解锁操作。在同一时间,只有一个线程可以拿到对象上的监视器锁。如果其他线程在锁被占用期间试图去获取锁,那么将会被阻塞直到成功获取到锁。同时,监视器锁可以重入,也就是说如果线程 t 拿到了锁,那么线程 t 可以在解锁之前
2020-12-13 15:28:47 90
原创 JVM杂记
程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。方法区(method area)只是JVM规范中定义的一个概念,用于存储类信息、常量池、静态变量、JIT编译后的代码等数据,但并没有规定这
2020-12-13 15:27:27 74
转载 AQS学习总结
摘自一行一行源码分析清楚AbstractQueuedSynchronizer // 下面这个方法,参数node,经过addWaiter(Node.EXCLUSIVE),此时已经进入阻塞队列 // 注意一下:如果acquireQueued(addWaiter(Node.EXCLUSIVE), arg))返回true的话, // 意味着上面这段代码将进入selfInterrupt(),所以正常情况下,下面应该返回false // 这个方法非常重要,应该说真正的线程挂起,然后被唤
2020-12-13 15:26:17 145 1
原创 ThreadLocal学习笔记
// nextHashCode的值会发生溢出,变为负数,private final int threadLocalHashCode = nextHashCode();private static AtomicInteger nextHashCode = new AtomicInteger();private static final int HASH_INCREMENT = 0x61c88647;private static int nextHashCode() { return n
2020-12-13 15:23:46 95
原创 java数据类型的相关知识
1.小数默认为double型,如果为float型需要加上f显示说明,即0.6332f2.NaN--nota number表示一个合理但不合法的实数3.Integer内部缓存了-128到127共256个Integer对象,Integer i1=6产生一个Integer对象,Integer i2=6会检查缓存中是否有指向6的对象,这个跟String有点类似,直接Integer i1= 6 这样初始化是...
2018-05-02 22:15:51 285
原创 javacv开发入门之Maven环境搭建
javacv开发入门之Maven环境搭建maven在java开发中使用的频率很高,所以使用java来搭建环境,直接使用javacv的maven依赖会把所有平台的jar包都现在下来很多也很慢,所以折腾了一下只下载windwos平台下的jar包。在windows打开摄像头成功,其中pom的依赖如下:<properties> <javacpp.platform....
2018-05-02 22:14:01 12572 3
原创 java中的SPI机制
1.SPI机制简介面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。 java spi就是提供这样的一个机制:为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中
2017-05-06 09:33:09 352
转载 mybatis 中#与$的区别
转自http://weijun726.blog.163.com/blog/static/87342299201362652950398/1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id
2017-03-03 16:21:36 303
转载 Java集合源码阅读笔记-HashSet
HashSet本文转自http://alex09.iteye.com/blog/539549对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素。所以如果对HashMap比较熟悉,那么理解HashSet就比较容易Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义,基本属性如下:public class HashS
2017-03-03 15:41:32 449
原创 自己看一些零散源码的小结
在很多的源码中都是用了下述的这种方式来进行类型转换public class Fruit { public void peel() { System.out.println("peel Fruit"); }}public class Apple extends Fruit { public void peel() { System.out.prin
2017-03-02 22:34:08 233
原创 java集合源码阅读笔记-HashMap
//如果x是一个实现了comparable接口则返回x的class对象,反之返回nullstatic Class<?> comparableClassFor(Object x) { if (x instanceof Comparable) { //ParameterizedType表示一个参数化类型,就像Collection<String>一样
2017-03-02 21:17:28 272
转载 Java集合源码阅读笔记-LinkedList
本文转自http://blog.csdn.net/ns_code/article/details/35787253关于LinkedList的源码,给出几点比较重要的总结: 1、从源码中很明显可以看出,LinkedList的实现是基于双向循环链表的,且头结点中不存放数据,如下图; 2、注意两个不同的构造方法。无参构造方法直接建立一个仅包含head节点的空链表,包含
2017-03-01 17:12:15 267
转载 JavaScript 语言中的 this
本文参照http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/ 这篇文章而写1.JavaScript 语言中的this由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。JavaScript 中函数的调用有以下几种方式:作为对象方法调用,作为
2017-03-01 15:15:35 247
转载 从is(":checked")说起
转自:http://www.cnblogs.com/season-huang/p/3360869.html*此文所用jQuery版本应大于1.6.1 如何判断一个单选(复选)框是否选中。对于刚接触jQuery的人,第一反应必然是。input id="checkbox1" type="checkbox" checked>input id="che
2017-03-01 14:13:13 1914
原创 easyui学习笔记-datagrid中相关学习
1.easyui DataGrid 里的列数据,并使用自定义列的formatter属性对应函数中三个参数的值:value:当前列对应字段值。 row:当前的行记录数据。 index:当前的行下标。2.在onclick事件传递对象类型参数,具体内容请参考http://blog.csdn.net/legend11/article/details/53408459 var ele = '<a
2017-03-01 11:18:33 293
原创 java基础集合源码阅读笔记
1.数组中元素的移动都是使用 System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的本地方法实现的2.在remove方法中:移除元素之后要将之前元素占用的位置设为null方便GC回收3.在batchRemove中使用if (c.contains(elementData[r]) == complem
2017-02-28 14:57:01 491
转载 java中路径问题详解
在jsp和class文件中调用的相对路径不同。在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径。另:在Jsp,Servlet,Java中详细获得路径的方法!1.jsp中取得路径:以工程名为TEST为例:(1)得
2017-01-20 16:16:20 395 2
原创 Dubbo+zookeeper入门示例搭建
参考文章:http://blog.csdn.net/doegoo/article/details/49679781 http://www.cnblogs.com/ASPNET2008/p/5622005.html http://www.cnblogs.com/Javame/p/3632473.html-安装zookeeper 1.在官网上下载zookeeper安装文件,解压,重命名zo
2016-11-24 17:14:04 3630 4
原创 几种简单的排序
1.冒泡排序 主要思路: 从前往后依次交换两个相邻的元素,大的交换到后面,这样每次大的数据就到后面,每一次遍历,最大的数据到达最后面,时间复杂度是O(n^2)。2.选择排序 主要思路:每次遍历序列,从中选取最小的元素放到最前面,n次选择后,前面就都是最小元素的排列了,时间复杂度是O(n^2)。3.插入排序 主要思路:使用了两层嵌套循环,逐个处理待排序的记录。每个记录与
2016-08-24 10:45:09 405
转载 Hadoop MapReduce处理海量小文件:自定义InputFormat和RecordReader
一般来说,基于Hadoop的MapReduce框架来处理数据,主要是面向海量大数据,对于这类数据,Hadoop能够使其真正发挥其能力。对于海量小文件,不是说不能使用Hadoop来处理,只不过直接进行处理效率不会高,而且海量的小文件对于HDFS的架构设计来说,会占用NameNode大量的内存来保存文件的元数据(Bookkeeping)。另外,由于文件比较小,我们是指远远小于HDFS默认Block大小
2016-06-21 10:18:34 545 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人