自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (3)
  • 收藏
  • 关注

原创 JVM-三色标记算法

JVM-三色标记算法三色标记算法是一种垃圾回收的标记算法。它可以让JVM不发生或仅短时间发生STW(Stop The World),从而达到清除JVM内存垃圾的目的。JVM中的CMS、G1垃圾回收器 所使用垃圾回收算法即为三色标记法。三色标记过程:黑色:代表该对象以及该对象下的属性全部被标记过了。(程序需要用到的对象,不应该被回收)灰色:对象被标记了,但是该对象下的属性未被完全标记。(需要在该对象中寻找垃圾)白色:对象未被标记(需要被清除的垃圾)三色标记存在的问题:对象漏标:如果

2021-10-20 22:40:26 3915 2

原创 网络IO模型

网络IO基础知识:TCP协议:面向连接的可靠的网络协议三次握手:客户端向 服务端发起请求 seq, 服务端收到请求后 向服务端返回 seq + ack ,客户端收到服务端发回的请求后 向服务端发送 ack。自此三次握手完成,此后双方会开辟资源socket:一个四元组包含了 ClientIP + Cport + SserverIP + Sport 开辟资源后 会加上文件描述符IO层面的同步、异步、阻塞、非阻塞同步:read/write操作需要 application 进行操作

2021-10-19 20:28:29 154

原创 20211012面试题总结

1、synchornized与lock区别 ?从层级上看:synchronized是java内置关键字,在jvm层面lock是一个接口,有丰富的API,可以通过实现接口,如reentrantLock从扩展性上看:synchronized相对扩展性差点Lock更适合扩展:(1)锁粒度可以控制,可以灵活的调用方法释放锁(2)通过继承AQS进行对应业务的修改,扩展(3)synchronized无法判断是否获取到锁锁的性质:synchronized是可重入,不可中

2021-10-12 00:42:57 188

原创 java面试题总结

Java集合容器1、HashMap的实现原理、HashMap在JDK1.7和1.8中有哪些不同2、HashMap底层使用了红黑树、为什么不适用二叉平衡树?红黑树还有哪些你知道的应用场景Spring相关1.Spring的优缺点2.Spring框架中都用到了哪些设计模式3.什么是SpringIOC ,IOC有什么作用,实现机制是什么?4.BeanFactory 和 FactoryBean有什么区别,BeanFactory和ApplicationContext有什么区别5、@Autowired和@

2021-10-10 18:07:09 142

原创 数据结构-时间复杂度

一、常数操作:常见固定时间的操作1、常见算术运算+、-、*、/、2、位运算 >>、>>>、 << 、 | 、 & 、^等3、赋值、比较、自增、自减4、数组寻址(可以通过计算偏移量直接获取第N位置的内容)​ 对比链表寻址(是没有办法直接计算得到第N位置的内容,所以它不是一个常数操作)二、时间复杂度的概念假设数据量为N的样本中,执行完整个流程,描述常数操作的数量关系。通常由O()表示,是一种渐进时间复杂度。若存在函数 f(n),使得

2021-09-25 21:44:38 1976

原创 Java基础-HashMap

HashMap针对部分源码进行分析,如果不感兴趣可以直接跳过到面试问题汇总重要的几个参数:loadFactor // 因子 用于判断是否需要扩容,默认0.75threashold = 因子*初始容量 DEFAULT_INITIAL_CAPACITY = 1 << 4 // 默认初始容量 16TREEIFY_THRESHOLD = 8 // UNTREEIFY_THRESHOLD = 6 // MIN_TREEIFY_CAPACITY = 64 jdk1.8final V

2021-09-24 11:07:21 58

原创 杂谈-202109

9月1日答疑:1、InnoDB如何保证数据页写入时,页损坏的数据也能被正常修复。首先明确以下概念:页损坏:MySQL的单个page有16k大小,而文件系统的1页只有4k。因此在刷新脏页时,实际上是4次写入,若在中途发生断电之类的故障,就会出现页损坏。Double write bufferInnoDB使用了DWB(double write buffer)用于保证在数据真正写入数据页之前,由double write buffer 先落到对应的磁盘,这样即使出现了由于断电引起的页损坏,也能够恢复。如

2021-09-12 10:16:26 109

原创 Redis引入带来的问题

Redis引入带来的问题针对这个问题 我们可以从两个方面回答一、硬件成本的增加Redis是依赖内存的,所以Redis的引入必然会对内存提出比较高的要求。二、维护成本的增加我们主要针对以下两个关键问题的维护进行说明1、缓存失效缓存没有能够发挥其应有的作用,可能是缓存过期等原因,导致透过缓存层对数据库造成压力缓存穿透缓存穿透是用户针对缓存和数据库中没有的数据进行不断的请求,从而造成数据库压力如何解决缓存穿透:在接口层增加校验。针对用户请求数据的合法性进行校验2)如果查询

2021-09-06 01:17:04 196

原创 Redis底层数据结构

Redis底层数据结构Redis没有表的概念,Redis实例所对应的db以编号区分,db本身就是key的命名空间。RedisObjecttypedef struct redisObject{ unsigned type:4 ; // 五种对象类型 unsigned encodeing:4; //编码 void *ptr; //指向底层实现数据结构的指针 int refcount; //引用计数 unsigned lru:LRU_BITS; // 记录最后一次被命令程序访问的时间}

2021-09-06 00:15:56 509 1

原创 杂谈-加佐特

1.redolog如果满了会如何处理关于redolog可以参考下https://blog.csdn.net/tiancaideshaonian/article/details/119719734当redolog满了之后:1、满了之后,会暂停新事物的提交,并引发报错2、当留出空间后,才能继续执行通常redolog的大小是4G、高版本后,可以支持到更大。redolog逻辑上是一块环形的空间,通过checkpoint 和 writepos 记录擦除位置以及当前写入位置。2.一般环境分层开发

2021-08-20 22:09:31 289

原创 搞不拎清的锁

锁Java锁公平锁/非公平锁公平锁指多个线程按照申请锁的顺序来获取锁非公平锁指多个线程不按照顺序获取锁,有可能后申请的线程比先申请的线程先获得锁。吞吐量比公平锁大,但是有可能造成优先级翻转或者饥饿现象new ReentrantLock() // 非公平锁new ReentrantLock(true) // 公平锁synchronized // 非公平锁可重入锁又名递归锁,指同一个线程在外层方法获取锁的时候,进入内层方法会自动获取锁。ReentrantLock

2021-08-18 01:09:00 159

原创 Mysql-BinLog,RedoLog,UndoLog傻傻分不清

BinLog,RedoLog,UndoLog傻傻分不清我们先看下5.7 innodb的磁盘存储结构1. UndoLog是实现innodb MVCC的重要组成部分概述:Undolog :事务开始之前,将修改的记录放到Undo日志中,当事务回滚或者数据库崩溃时,利用Undo日志,撤销未提交事务对数据库产生的影响Undolog 产生和销毁: Undo log在事务开始前产生;事务在提交时,并不会立刻删除undo log,innodb会将事务对应的undolog 放到删除列表中,后面会通过

2021-08-15 21:31:33 252

原创 Mysql-查询缓存,BufferPool傻傻分不清

查询缓存?BufferPool?1、查询缓存我们先了解下Mysql的层级划分我们再了解下,Mysql5.6之前的查询流程(5.6默认禁用 8之后Mysql已经移除了查询缓存)通过上面两个图我们可以给出下面关于查询缓存的定义MySQL Server首选会从查询缓存中查看是否曾经执行过这个SQL,如果曾经执行过的话,之前执行的查询结果会以Key-Value的形式保存在查询缓存中。key是SQL语句,value是查询结果。我们将这个过程称为查询缓存!根据层级我们可以看到 查询缓存是处于 ser

2021-08-15 00:22:38 426

原创 JVM-垃圾回收(GC)

垃圾回收什么是垃圾:没有对象引用的就是垃圾 (= .=)红色部分由于没有对象引用,此时可以认为它是一坨垃圾如何找到垃圾:1.引用计数有一次引用,那么我们就将该对象引用次数+1.当引用数为0时,表明没有对象引用。无法解决循环引用的问题循环依赖,没有被外部引用。实质上他们已经是一堆垃圾了。2.根可达算法什么是根对象:线程栈对象、静态变量、常量池、JNI指针(C/C++本地方法用的变量)常用的垃圾回收算法:1、标记清除(mark-sweep)适合存活对象比较多

2021-08-02 00:58:59 138

原创 线程池知识

线程池1.深入理解线程池1.1 常用线程池体系结构Executor:线程池顶级接口ExecutorService:线程池次级接口AbstractExecutorService:抽象类,运用模板犯法设计模式实现了一部分算法ScheduledExecutorService:接口功能加强ForkJoinPool:新型线程池类,基于工作窃取理论实现,运用于大任务拆小任务,任务无限多的场景ThreadPoolExecutor:普通线程池类,包含最基本的一些线程池操作相关的方法ScheduledTh

2021-07-25 22:37:25 198

原创 多线程基础知识

多线程基础知识一、概念:什么是进程?什么是线程?什么是纤程/协程?1、什么是进程​ 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完成的功能,是控制进程执行的指令集;数据集合是程序在执行时所需要的数据和工作区;程序控制块包含进程的描述信息和控制信息,是进程存在的唯一标志。怎么理解?操作系统

2021-07-19 00:38:14 125

原创 手写乞丐版-Mybatis

手写乞丐版Mybatis需求背景:​ 针对传统的JDBC编程的痛点:​ 1、硬编码 针对数据库连接、以及sql 会写在代码中,不利于后期维护​ 2、频繁的数据库连接,会造成资源浪费,影响系统性能​ 3、查询条件占位符存在硬编码,不利于维护​ 4、对于结果的解析,如果需要修改sql结果,也需要进行相应的代码修改如何结果:​ 1、数据库连接、sql全部采用配置文件的方式进行可配置化​ 2、使用数据库连接池​ 3、将查询条件以及结果使用反射,自动映射字段。框架设计使用端:1、配置sq

2021-07-05 17:43:52 99

原创 设计模式-观察者模式

观察者模式(发布-订阅模式)W:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。(Listener)W: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作UML:subject :它把所有对观察者对象的引用文件存在了一个聚集里,每个主题都可以有任何数量的观察者,抽象主题提供了一个接口,可以增加和删除观察者对象observer:抽象观察者,为所有的具体观察

2021-07-02 11:54:55 54

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

建造者模式W:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,属于创建型模式w:创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。参照:https://zhuanlan.zhihu.com/p/58093669案例:假设现在产品是一台电脑包括 必须品:主板、CPU 、内存、电源 ,可选品:屏幕、鼠标、键盘// DIY一台电脑,内部维护一个静态类,最终调用静态类的builder方法,返回

2021-07-02 11:12:11 59

原创 设计模式-单例模式

单例模式确保只有单个对象被创建,提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化类对象。属于创建型模式单例模式创建1.饿汉式线程安全,缺点很明显 初始化时就会被创建,占用内存public class HungrySingleton { private static HungrySingleton instance = new HungrySingleton(); private HungrySingleton(){} public static Hungry

2021-06-25 14:13:49 60

原创 设计模式-代理模式

代理模式用一个类 代替另一个类的功能,并实现控制 属于结构型模式优点1、职责清晰2、高扩展性案例// 假设我们现在要租一套四室一厅的房子public class RentHouse { public void renthouse(){ System.out.println("租房子 4室 1厅"); }// 自己找太麻烦了,我们就找到了一个中介(代理),由他出面帮我们找房子// 我们需要将自己的需求告诉他,找到房子后,我们交钱就完事了静态代理模式pu

2021-06-25 12:00:48 94

原创 设计模式-工厂模式

工厂模式用于创建复杂对象,不暴露对象创建过程得一种设计模式案例假设我们现在开一家包子铺,包子铺里面卖豆沙包和豆腐包// 定义一个包子接口public interface BaoZi { public void makeBaoZi();}public class DouFuBao implements BaoZi{ @Override public void makeBaoZi() { System.out.println("豆腐包"); }}

2021-06-25 10:33:13 62

原创 MysqlDriver日期问题

背景:最近接触到一个新项目,在插入数据时发现插入的时候不正确。于是有了以下探究历程。项目后台使用的是jdbcTemplate:对应插入时间字段mysql类型:datetime插入时使用java 中 new Date(),之后交由jdbcTemplate 进行数据插入操作。问题:首先通过debug 确认 newDate() 生成时间正确为本地时间。开始怀疑是不是jdbcTemplate里面出了什么幺蛾子。// jdbctemplate 执行插入语句入口public int[]

2020-09-05 11:35:20 422

原创 Kettle-ActiveMqProducer的一次实践

实践目的:最近在学习mq的知识,想到kettle可以连接kafka。但是对于ActiveMq并没有插件支持,因此想做个支持ActiveMq的插件玩玩。kettle插件开发前期准备:开发工具:eclipse (主要是支持插件debug的时候,需要用到eclipse的link source,不知道idea咋搞)kettle版本:kettle7.1具体源码编译步骤可以参照:https://blog.csdn.net/tj_java/article/details/78765158kettl

2020-08-31 23:37:21 905

原创 JAVA父子类构造方法执行顺序的小实验

JAVA父子类构造方法执行顺序一、问题引入先看下面一段代码:public class T08_NEWCLASS {}很简单的一个类,当我们把它编译后再看class文件,会发现多了一个 构造方法(java类会默认继承Object 类)public class T08_NEWCLASS { public T08_NEWCLASS() { }}我们通过jclasslib可以看到这个类的一些内部细节...

2020-08-23 16:06:03 264

原创 kettle实战:mysql2hive操作示例

工具:1.kettle 6.02.mysql hive前期准备:===最近在尚硅谷看到一个教程是用kettle8 貌似不用导jar包了 >_<这里默认hive已经可以正常使用:一、大数据相关jar包放置路径 :pdi-ce-6.0.1.0-386\data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\hdp22\lib这里不一定使用hdp 需要根据hadoop安装方式自行选择

2020-05-17 20:41:49 325

原创 PL/SQL 本地连接远程Oracle数据库

1、安装pl/sql2、下载oracle免安装版(资源csdn上就有 我传不上去了有需要的可以直接搜 instantclient-basic-windows.x64-11.2.0.4.0.zip)3、解压免安装包 新建network\admin新建文件:tnsnames.ora内容:# TNSNAMES.ORA Network Configuration File: C:\or...

2020-01-16 10:55:08 165

原创 kettle实战 : mongodb2oracle 操作示例

工具:1.kettle 7.02.mongodb oracle操作目的:将mongodb中的数据同步到oracle数据库中便于统计。步骤总图mongodb 配置:1.mongodb连接 配置这里的username 和 password 需要能够访问对应的库2.配置正确后 可以通过getdbs 查询到对应的库以及集合3.这里是填写查询条件 此处可以...

2019-05-06 22:05:42 1427

空空如也

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

TA关注的人

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