自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 浅谈容器技术三大优势

容器 镜像 优势

2023-02-24 15:58:21 489 1

原创 java类的加载和对象创建过程

1.所有的类都是在对其第一次使用时,动态加载到JVM中。当首次创建类型为Dog的对象时,或者Dog类的静态方法,静态属性域首次被访问时,java解释器查找classPath,定位到Dog.class文件2. 载入Dog.class文件,生成一个Class类型对象,所有有关的静态初始化动作都会执行,静态代码块,静态成员属性。 并且这种初始化动作只在Class对象首次加载时候进行一次。3. 当用new Dog()创建对象时,首先JVM在堆heap上为Dog对象分配足够的存储空间4. 存储空间清空,自动将D

2021-03-01 15:05:30 279 2

原创 数据库分库分表总结

数据库分库分表总结:数据库分库分表一定程度上解决了数据库的访问压力,但同时也带来了维护成本,增加了跨库跨表查询的复杂度,引入了分布式事务的问题

2021-02-26 12:57:43 154

原创 mysql的mvcc和readview

隔离级别标准定义:read uncommited 一个事务读取到了另一个事务未提交的结果(可能发生回滚),叫脏读,这会带来脏读、幻读、不可重复读问题read commited 一个事务a读取到了另一个事务b最新提交的结果,使得事务a两次读取的结果不同,其避免了脏读,会出现不可重复读,幻读,通过版本链(mvcc)和readview实现。repeatable read(mysql的默认隔离级别) 一个事务第一次读过某条记录后,另一个事务修改提交了该条记录后,事务a读取到的还是第一次的值,这就是可重复读

2021-02-22 16:20:35 1828

原创 tcp三次握手和四次挥手

Tcp三次握手(客户端发起)握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”:(1)首先客户端向服务器端发送一段TCP报文,其中:标记位为SYN,表示“请求建立新连接”;序号为Seq=X(X一般为1);随后客户端进入SYN-SENT阶段。(2)服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段TCP报文,其中:标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正

2020-12-14 19:55:55 57

原创 二叉搜索树,二叉平衡术,红黑树,B树,B+树

二叉搜索树二叉搜索树平衡二叉树红黑树B树B+树二叉搜索树二叉排序树定义:二叉排序树或者是空树或者是满足以下条件:1)若它的左子树不空,则左子树上的所有关键字小于根关键字的值2)若它的右子树不空,则右子树上的所有关键字大于根关键字的值3)左右子树又各是二叉排序树二叉排序树又叫二叉搜索树,二叉查找树优点:可以非常方便地对树中所有节点进行排序和检索,结合了链表和数组的优点缺点:二叉搜索树,最差情况下,会变成链表的形式,退化成线性时间,复杂度为n,检索效率变差。例如插入时,记录有序,则构建的二叉

2020-12-11 20:19:37 373

原创 插入排序

package com.example.demo.learn.coding.sort;public class InsertSort {/*** 依次比较有序部分,依次后移,查找插入位置* 最好时间O(n) 原始有序* 最坏时间O(n*n)* 空间O(1)* 稳定* @param arr*/public static void insertSort(int[] arr){//初始假设第一个元素有序for(int i=1;i<arr.length;i++){int temp=

2020-12-10 20:40:31 62

原创 设计模式学习梳理-装饰模式

装饰模式:在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能(例如扩展SubCustomObjet的功能且不使用继承)。它是通过创建一个包装对象(Decorator),也就是装饰来包裹真实的对象public interface CustomObject { void method();}public class SubCustomObject implements CustomObject { @Override public void method() {

2020-11-30 18:26:11 54

原创 设计模式学习梳理-模板方法模式

模板方法模式模板方法模式,在父类中定义一系列算法的骨架或步骤(例如TemplateBase 的bulidObject),具体的实现在子类中实现(TemplateSub的step1和step2)public abstract class TemplateBase { public void bulidObject() { step1(); step2(); } protected abstract void step1(); protected abstr

2020-11-30 15:38:12 45

原创 从硬币找零问题谈暴力搜索到动态递归

@[TOC](这里写目录标题暴力搜索记忆搜索动态规划问题描述:给定一组硬币面值(例如(5,10,2,1)),和一个目标金额(例如100),每种面值的硬币数量不限,求有多少种组成目标金额的方式。问题抽象为数学问题:给定一个数组arr={5,10,2,1},和目标金额aim=100,使用数组中的元素任意次组成目标金额aim的方法有多少种。暴力搜索使用{5,10,2,1}任意组合成100的方法有以下几种情况:1.使用0张5,其余{10,2,1}任意组合成1002.使用1张5,其余{10,2,1}任意组

2020-11-14 20:20:10 390

原创 设计模式学习笔记-适配器模式

适配器模式对这个模式我自己的理解是,如果在你的类结构中,你希望引入一个现有的类,且这个类又无法修改,这时候就需要用到适配器,模式了,所以适配器模式是一种补救措施。例如在之前的观察者模式中,每一个新的观察者的加入都需要实现观察者接口,如果一个现有的无法修改的类,希望成为观察者,就需要用到适配器模式了。假如我们的系统里已经有一个类叫UnChangeable希望它成为观察者可以通过以下方式:public class MyAdapter extends UnChangeable implements Obse

2020-11-13 19:07:10 84

原创 二叉树按层遍历(java)

二叉树按层遍历按层遍历并打印行号/** * 树的宽度优先遍历 * 使用队列,并且记录行号 */ public static void bfs(BiNode head){ //Queue<BiNode> queue=new ArrayDeque<>(); Queue<BiNode> queue=new LinkedList<>(); queue.add(head);

2020-11-12 19:05:04 84

原创 设计模式学习笔记-策略模式

策略模式策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。下面通过定义一个简单的策略模式的类结构来加深理解策略接口:public interface Strategy { void algorithm();}两个策略实现类:public class StrategyA implements Strategy { @Override public void algorithm() {

2020-11-12 18:53:18 56

原创 设计模式学习梳理-观察者模式

观察者模式又叫发布-订阅模式,目标类(被观察者observeable)管理所有依赖于他的观察者类(Observer),且在自身状态发生变化时,主动发出通知给观察者。(jdk中有写好的观察者接口和被观察者类,可以直接使用)下面通过代码梳理一个简单的观察者模式的类结构观察者接口如下:/** * 定义观察者接到通知后的行为 */public interface Observer { void update(Observable o);}观察者的两个具体实现类:public cla

2020-11-11 21:09:12 116

原创 二叉树的遍历(递归和非递归java版本)

节点定义定义二叉树节点类型:递归遍历1.先序2.中序非递归1.先序使用栈结构2.中序使用栈结构

2020-11-09 16:48:28 128

原创 设计模式学习梳理-工厂相关模式

简单工厂模式简单工厂模式比较简单,主要思想是由工厂在运行时决定创建哪一种具体的产品,其中涉及到的角色由工厂,产品接口,具体产品示例如下:

2020-11-09 16:41:14 113

原创 设计模式学习梳理-单例模式

单例模式应用场景:如果这个类没有自己的状态也就是实例化多个其实都是一样的,甚至实例化多个会造成程序错误或者增加维护复杂度好处:这种情况下,设计成单例模式会节省内存资源,减少不必要的gc开销,保证程序正常运行原始模式(不考虑并发):示例如下1.静态实例,静态属性在类中是唯一的2.私有构造方法,防止实例化多个实例3.公有的静态方法获取一个静态实例,方法必须是静态的因为是在未获取实例的情况下返回一个静态实例,如果是非静态方法,必须有实例才能调用4.如果静态实例为null,则创建,否则直接返回

2020-11-04 19:07:21 124

原创 设计模式指导原则学习梳理

设计模式指导原则六大原则单一职责原则里氏替换原则接口隔离原则依赖倒置原则迪米特原则开闭原则设计模式的意义:增加系统健壮性,可维护性,可扩展性六大原则单一职责原则Single responsibility principle,SRP每个类只负责单一的功能,强调业务逻辑的单一 例如业务处理和数据库处理分离里氏替换原则Liskov Substitution principle,LSP子类可以替换父类的功能,不会产生任何不期待发生的结果,也就是程序将不会产生任何错误和异常里氏代换原则是实现开闭原则

2020-11-03 15:28:52 122

原创 lua之table的使用

本文对从数据结构,存储和使用三个角度对lua之table的使用进行小结。数据结构:table是lua的一种数据结构,可以用来存放各种类型的元素,例如可以创建数组和字典,以及二者混合的数据结构,例如:a={“hello”,“world”,“lua”} --数组b={a=“hello”,b=“world”,c=“lua”} --字典c={“hello”,b=“world”,“lua”} --数组元素和字典元素混合存储:lua的table使用数组和哈希表结合的方式,使用string或者0

2020-06-24 11:28:10 4619

空空如也

空空如也

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

TA关注的人

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