自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (3)
  • 收藏
  • 关注

原创 HuTool-TreeUtil

使用HuTool的TreeUtil组织树结构数据的示例。

2024-06-25 14:54:37 157

原创 财务报表之资产负债表

这是学习清华大学肖星老师的课程笔记,该课程是资产负债表的内容。通过该课程基本了解资产负债表的各项内容,看懂资产负债表。

2021-05-23 15:25:10 716

原创 【Effective Java】1.1使用静态工厂方法

一、什么是静态工厂方法首先明确的是,此处的静态工厂方法和设计模式中的任何工厂模式都没有关系。静态工厂方法就是一个类中的一个普通的静态方法,其特殊在于没有其它处理逻辑,仅是返回一个实例。用于代替使用构造器来创建实例。二、怎么使用静态工厂方法当需要提供多个构造器来构造实例时,可以考虑使用静态工厂方法。提供一个静态的方法,方法名字取得特殊一些,返回一个当前类的实例,代替调用构造器的方式。三、使用静态工厂方法的优势优势有如下5点:提供更丰富的名称。构造器由于限制名称只能是类名,那么需要按

2020-08-19 23:52:03 273 2

原创 【线程安全】由单例模式双重检查加锁DCL引出的synchronized与volatile关键字

1. 什么是DCLDCL是double check lock的单例实现方式,延迟加载。public class Singleton{ private static volatile Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instance == null){ synchronized(Singleton.cl

2020-08-05 10:50:15 381

原创 【计网】TCP

1、TCP协议的特点和报文格式 1.1 特点 TCP是面向链接(虚连接不是真实的物理线路)的传输层协议。每一条TCP链接都是点对点的全双工通信。TCP提供可靠交 付的服务,可靠有序、不丢不重。 发送缓存:已发送但未接收到确认的报文&待发送的报文 接收缓存:按序到达但未被上层读取的数据&未按序到达的数据 TCP将上层的数据看作是连续的一串字节数据流。 TCP...

2020-07-11 21:37:39 411

原创 【操作系统三】CPU调度

一、CPU调度的概念由于CPU往往是比需要执行的进程数目要少的,因此就需要某种规则来确定处理这些不同进程任务的顺序。不可能同时处理这些进程任务,CPU调度就是从就绪队列中按照某种算法选择一个进程,并将CPU交其使用,实现多个进程任务之间的并发执行。二、CPU调度的层次三种调度层次:高级调度、中级调度、低级调度高级调度:由于内存有限,可能无法将所有的进程对应的程序都读入内存并为其创建PCB,因此只能将程序存储在外存中,在需要执行时再将其调入内存并创建PCB,获得竞争上CPU的机会。当该进程任务

2020-06-27 23:05:06 736

原创 【操作系统二】进程与线程

一、进程的概念打开windows系统下的任务管理器,可以看到进程的相关信息,有我们正在使用的应用进程,还有很多后台进程,这些后台进程是系统运行必要的服务进程。而我们未使用的应用程序是不会出现在任务管理器中的,由此也可以发现进程是动态的,是处于执行过程中(处于执行过程中并不是指一定获取到了cpu执行权)的程序。以上是对进程的一些感性理解。程序:静态的代码,就是存放在磁盘中的可执行文件,就是一系列指令的集合。(不论是语言的代码,最终都会编译成机器码并由计算机硬件执行)进程:动态的代码执行过程,是程序

2020-06-27 17:08:06 235

原创 【spring原理、源码二】IOC容器

一、什么是IOCIOC是一种软件的设计模式,这种模式改变了传统的控制流。传统的控制流中,某处代码需要使用某个依赖项时,需要自己进行依赖实例的创建,赋值,然后使用。而IOC所谓的依赖反转,正是反转了这种对依赖项的管理,由第三方完成对依赖项的管理(包括读取元信息、创建、销毁等全生命周期管理),而代码中不再需要对依赖项进行创建等管理。从这里不禁会想到,传统的模式中要使用某个实例则new一个就好了,IOC运用上之后,由第三方管理这些实例,那么当代码中需要使用某个实例时,怎么获取呢?答案如下。二、IOC解

2020-06-23 23:25:35 170

原创 【Spring原理、源码一】Spring Framework总览

一、特性总览1. 核心特性IOC容器、AOP、Spring事件、资源管理、国际化、校验、数据绑定、类型装换、Spring表达式。其中数据绑定是指外部的一些数据和内部的POJO进行绑定,通过getter、setter方法进行转换,其中一些复杂的装换需要通过类型装换实现。2. 数据存储JDBC(是应用程序和关系型数据库交互的通道或者说客户端)、事务抽象、DAO支持、ORM、XML编列(编列类似序列化)3. web技术Web Servlet技术栈:SpringMVC(依赖servlet引擎

2020-06-19 11:11:46 205

原创 【操作系统一】基本概念

一、操作系统的定义操作系统本身是一种系统软件,负责管理协调计算的硬件、软件等资源,为上层的应用程序或者直接为用户提供简单易用的服务。二、操作系统的功能操作系统有以下三个功能:资源管理、向上层提供服务、对硬件的扩展1. 资源管理 操作系统需要管理cpu、存储器(内存)、文件、外设2. 向上层提供服务 给普通用户提供图形界面、联机命令接口(命令行)、脱机命令接口(批处理) 给应用程序提供系统调用接口3. 扩展硬件 ...

2020-06-16 15:54:29 258

原创 Lock.lock()为什么在try之前执行?

Java类库中提供了几种用于替代synchronized的锁,比如ReentrantLock、ReentrantReadWriteLock等,使用该锁时加锁与解锁的操作必须在代码中指定执行,通常会以如下方式使用:ReentrantLock lock = new ReentrantLock();lock.lock(); // 加锁try{ // do something}fina...

2020-05-06 08:53:28 5091 4

原创 并发编程(四)

AQS一、AQS介绍AQS:AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),JUC并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。它是JUC并发包中的核心基础组件。二、AQS组件需要重点学习的组件有...

2020-03-12 16:47:10 177

原创 并发编程(三)

线程安全策略一、不可变对象不可变对象只要发布了,一定是线程安全的。满足什么条件是不可变对象?对象创建之后其状态不能修改 对象的所有域都是final修饰 对象是正确创建的(主要是指在创建期间,this引用没有逸出)如何创建一个不可变对象?自定义创建,讲类声明为final,这样类无法被继承;类中所有域声明为private;对变量不提供set方法,可变成员声明为final,通过...

2020-03-12 10:52:36 179

原创 并发编程(二)

安全发布对象一、什么是发布对象?使得一个对象在当前范围之外可见。比如通过公开方法返回一个对象的引用、通过类静态变量公布对象.与之对应的是逸出,指不正确的发布对象,比如将一个私有的对象发布出去,或者还没有正确构造完成对象,此对象就已经对外部可见二、如何安全地发布对象共有四种方式安全地发布对象在静态的自定义初始化函数中初始化(new)一个对象引用 将对象的引用保存到volat...

2020-03-11 20:01:08 160

原创 并发编程(一)

一、并发编程与高并发并发编程与高并发是两个不同的概念,并发编程是相对于以往单线程的编程模型,而采用多线程的编程模型,以充分利用CPU资源。高并发是一类场景,应用的并发请求量非常大的情景,为了解决高并发场景的问题,有很多技术手段,其中多线程并发编程模型是一种技术手段,还有包括扩容、缓存、队列、拆分、服务降级与熔断、数据库分库分表等等。并发的概念:同时拥有两个或更多的线程,如果是单核CPU,则...

2020-03-11 15:57:49 2376

转载 为并发而生的 ConcurrentHashMap(Java 8)

HashMap 是我们日常最常见的一种容器,它以键值对的形式完成对数据的存储,但众所周知,它在高并发的情境下是不安全的。尤其是在 jdk 1.8 之前,rehash 的过程中采用头插法转移结点,高并发下,多个线程同时操作一条链表将直接导致闭链,死循环并占满 CPU。当然,jdk 1.8 以来,对 HashMap 的内部进行了很大的改进,采用数组+链表+红黑树来进行数据的存储。rehash 的过程...

2020-03-03 11:58:46 152

原创 MySQL与Redis的区别

mysql事务的原子性mysql中的事务具有原子性,但其原子性的要求仅仅是事务中的操作具有原子性,即要么都执行,要么都不执行。但并没有要求事务中的所有操作是一个原子操作(即不可分割的整体,按顺序依次执行,不允许其它事务中的操作插入到该执行单元),因此一个事务中的操作具备了都成功执行,或者失败回滚的原子性,但事务中的各个操作之间可以插入其它事务的操作,从而不是原子操作,因此就出现了事务中数据不一致...

2020-03-03 09:21:49 335

原创 超卖问题及其解决方法

超卖问题介绍在高并发的场景下,比如商城秒杀活动中,一件商品的销售数量>库存数量的问题,称为超卖问题。主要原因是在高并发场景下,大量请求几乎同时到达,对库存资源进行竞争,由于没有适当的并发控制策略导致的错误。简单的下单操作如果没有并发的控制策略,则在下单时只需要考虑如下几步:查询库存数量、判断是否满足订单数量需求,提示库存不足或者减库存下单成功。通常我们会按照如下写法public Serve...

2020-03-02 16:51:34 10538 2

转载 Mysql的锁及表锁性能

MyISAM只支持表锁,但网上文章却说,在并发插入量比较大的时候,比较适合使用MyISAM,这矛盾吗?这个问题,涉及MySQL表锁的一些细节,借着这个问题,系统性说下表锁的“所以然”。MySQL表锁知识系统性梳理。哪些存储引擎使用表锁?MySQL,除InnoDB支持行锁外,MySQL的其他存储引擎均只使用表锁,例如:MyISAM, MEMORY, MERGE等。...

2020-02-24 16:26:23 333

转载 InnoDB的哈希索引

InnoDB支持哈希索引吗?对于InnoDB的哈希索引,确切的应该这么说:(1)使用InnoDB存储引擎的用户无法手动创建哈希索引,这一层上说,InnoDB确实不支持哈希索引;(2)InnoDB会自调优(self-tuning),如果判定建立自适应哈希索引(Adaptive Hash Index, AHI),能够提升查询效率,InnoDB自己会建立哈希索引,这一层上说,InnoDB又是...

2020-02-24 15:54:03 1480

原创 MySQL架构和处理逻辑

2020-02-24 13:09:13 115

原创 MySQL多独立单列索引

问题sql中使用多个条件进行查询,这多个条件分别建立了独立的索引,MySQL在执行查询时会走索引吗?测试MySQL版本SELECT VERSION();结果:5.1.73表结果及索引结构测试结果EXPLAIN SELECT * FROM testInfo WHERE `name` = 'tomandjerry';EXPLAIN SELECT * FROM tes...

2020-02-18 11:14:21 633

原创 MVCC

问题阅读《高性能MySQL》时读到MVCC这里,关于Innodb可重复读下的多版本并发控制介绍过于简单,因此很多细节被忽略后,导致一些情况难以理解,比如按照书中介绍的,如果表中有一条数据其事务版本号为1 name字段数据为li,此时有事务版本号为2的事务进行update操作但未提交,此时又有事务版本号为3的事务进行select * from table的操作得到该记录name为li,然后事务版本...

2020-02-16 21:20:11 234

原创 mysql or null 统计某个字段不同值的个数

MySQL碰到一个sql问题查询items表,统计color字段有多少种颜色,即统计某个字段不同值的个数SELECT COUNT(color = 'red' OR NULL) AS 'red', COUNT(color = 'blue' OR NULL) AS 'blue' FROM items;SELECT SUM(IF(color = 'red', 1, 0)) AS 'red', ...

2020-01-29 17:21:22 1203 1

原创 排序

排序总结:一、O(n^2)时间复杂度的排序算法- 总结:平方级别的排序算法是最简单的排序算法,但是理解这些简单的排序算法有助于学习更高效、更复杂的排序算法,而且这些简单的排序算法很多都是组成复杂排序算法的一部分。- 数据 有/无 关:是指排序算法的时间复杂度是否会随着数据的某些顺序特点而发生变化,有的排序算法无论数据什么样子时间复杂度都是相同的,而有的排序算法会因为数据的特殊性而变得高效,...

2020-01-05 13:09:10 230 2

原创 线程池介绍

一、为什么要用线程池1、使用线程池之前一开始接触多线程的时候,我们知道有三种方式可以创建多个线程,一种方式是继承Thread类本身;另外一种方式是实现Runnable接口;第三种方式是实现Callable接口并利用Future;线程无返回值的时候,一般通过实现Runnable接口来创建新的线程,而不是采用继承Thread类来实现多线程,因为java是单继承的,实现接口更加灵活;实现该接口需...

2019-12-12 17:00:32 135

原创 volatile关键字解析

volatile关键字能够保证对其修饰的变量进行 读取 或 写入 操作时是原子操作,且保证对其修饰的变量进行写入操作是具有先行发生原则的(即对其进行写入操作能够使得其它对该变量的读取操作读取到的变量值都是最新的),但是volatile并不能保证其它操作也是原子操作,仅仅是保证读取 写入操作而已。注意这个地方,很容易忽视这个定义导致出现异常。下面的代码中开了100个线程,每个线程都对n进行连续10次...

2019-10-31 11:28:50 111

原创 递归 回溯

递归 回溯总结:树的题目很多都可以需要通过递归来解决,而很多问题虽然直观上看不是一个树的问题,但是考虑一下其本质是一个树形问题,可以转化为一课树,然后通过递归解决,关键在于观察得到递归关系;回溯法是一种暴力解法的一个主要实现手段,通过剪枝可以让回溯法提升一些性能,当循环遍历不要暴力解决时,通过回溯法可以方便的暴力解决。1. 17 电话号码的字母组合字符串的合法性,1对应什么字母?空字符串如...

2019-10-15 20:57:10 270

原创 二叉树的非递归遍历总结

二叉树的非递归遍历总结/** * * *非递归遍历 * * */ public class BinaryTree{ //先序遍历,且为根左右 public void preOrder(Node root){ if(root == null) return; Stack<Node> stack = new Stack<>(); stac...

2019-10-05 20:47:04 229

原创 leetcode_二叉树_递归

二叉树 递归总结:二叉树具有天然的递归结构,因为二叉树的定义本身就是个递归地定义过程,而递归我们需要把握住三点,第一是递归函数及其传参的含义(就像数组的边界定义,链表的所有引用的含义一样重要);第二是递归的终止条件;第三是递归过程(递归过程可能涉及递归函数的调用以及其它的计算)。需要注意的是,如果递归有返回值,可以通过返回值进行很多处理,可以替代一些传参,往往一些比较简单的递归这么去做逻辑比较...

2019-10-05 20:36:50 269

原创 leetcode_链表

链表总结:链表的题目一定要把链表画出来,多去画一画,想一想,不会很难,但是要十分注意细节,很容易出错。链表不像数组,数组会结合很多技巧和算法,链表的题只需要常规的去一步一步的思考,考虑清楚边界,头结点和尾结点的处理,考虑清楚下一个节点到底是哪一个,一步一步的即可。链表中考虑清楚边界,需要考虑清楚头结点和尾结点如何处理,常常新建一个节点(虚拟头结点),该节点指向头结点,这样保持对头结点的访问...

2019-10-05 20:35:16 160

原创 liuyubobobo_查找问题

查找问题总结:其对查找问题的范围相对宽泛,很多找出、找到等等的问题均认为是查找问题,而查找问题常用的两种数据结构就是set 和 map。set用于查找有无的问题,不会用于查找出现的次数,因此set中的元素是不重复的。map用于查找对应关系、查找出现的次数,是一些键值对。在不同的语言中对set和map有不同的底层实现[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下...

2019-10-05 20:34:12 194

原创 liuyubobobo_数组_基于数组的排序、二分搜索、双指针、对撞指针、滑动窗口

数组总结:1. 283 移动零双指针。方法:题目要求原地算法,使用两个指针从头遍历,其中i指针用于遍历数组中的所有元素,另外k指针指向当前可以放置非零元素的第一个位置,i指针遍历到一个非零元素,就将此值与k指向的当前元素交换,然后k自增,i继续遍历,由于k实际上规定了[0, k-1]的位置为当前遍历得到的非零元素,而k的位置为当前第一个0元素的位置。时间复杂度O(n),空间复杂度是O(1...

2019-10-05 20:33:21 305

原创 HashMap源码阅读及阅读笔记

HashMap源码分析(JDK 1.8)一、概述HashMap是我们在编程中遇到极其频繁、非常重要的一个集合类,如果能对HashMap做进一步的性能优化是非常有价值的而JDK 1.8做到了,所以非常有必要学习HashMap的重点源码,了解大师的手法。二、底层数据结构画图真的是个累活,好的画图工具很重要啊,上面这两张图分别画出了JDK 1.7、1.8底层数据结构,在JDK 1.7、1.8...

2019-10-05 15:25:41 182 1

原创 ArrayList源码及阅读笔记

ArrayList源码及阅读笔记总结:ArrayList是非线程安全的,内部通过数组保存数据,源码中复用到的方法都进行了方法抽离复用,ArrayList中数组默认初始化大小是10,数组中当前已经全部存储上元素后,以后每次添加元素不管是一个还是同时添加多个元素,内部数组都只会扩容至刚好容纳下新加入的元素,不会多扩容;而在删除元素的时候数组不会缩短源代码分块解析ArrayList 实现...

2019-10-04 21:56:20 170

原创 HashSet源码阅读及阅读笔记

问题描述:如果A是一个接口,B是一个抽象类并且implements A,然后实现了A中的方法,这时有一个普通类C extends B 并且implements A,这时由于继承自B且B有对A的方法实现,C implements A并自己实现了其中的方法,这时就有了重叠,到底是C自己实现的起作用还是继承自B的起作用问题来源:JDK8中list就是这种情况,List接口是这里的A,Abstract...

2019-10-04 21:55:42 163

原创 一个继承、实现的多重问题测试

问题描述:如果A是一个接口,B是一个抽象类并且implements A,然后实现了A中的方法,这时有一个普通类C extends B 并且implements A,这时由于继承自B且B有对A的方法实现,C implements A并自己实现了其中的方法,这时就有了重叠,到底是C自己实现的起作用还是继承自B的起作用问题来源:JDK8中list就是这种情况,List接口是这里的A,Abstract...

2019-10-04 21:55:03 134

原创 LinkedList源码阅读及阅读笔记

LinkedList源码阅读及阅读笔记总结:LinkedList同样是非线程安全的,LinkedList ArrayList都直接或者间接的继承了AbstractList类,设计List是这样的一个思路,首先定义一个List接口,该接口定义了所有List应有的方法,所有不同的List实现类都应该根据自己的特点实现这些方法,但是同时在设计各种不同的List实现类时会发现有很多每个实现类都相同的方法...

2019-10-04 21:54:21 163

原创 IntegerCache

先看一段代码Integer int1 = 100;Integer int2 = 100;Integer int3 = 500;Integer int4 = 500;System.out.println(int1 == int2);System.out.println(int3 == int4);执行一下:truefalse和大多数人心里想的不一样吧,到底是全是true还是全...

2019-10-04 21:52:06 108

原创 数组复制方法-System.arraycopy()

System.arraycopy一、简介该方法是一个native的方法,追踪其源码如下 /** * Copies an array from the specified source array, beginning at the * specified position, to the specified position of the destination...

2019-10-04 21:39:03 276

The java. util. concurrent synchronizer framework.pdf

AQS作者Doug lea关于AQS设计、性能的paper,需要了解AQS的设计思想,思路可以参考这篇paper

2020-07-14

吴恩达机器学习资料包

包含吴恩达2004年斯坦福大学的机器学习课程视频,以及吴恩达2014年coursera机器学习课程视频、ppt、代码。视频完整。网盘链接下载。

2018-07-29

用matlab实现银行卡卡号定位并自动切割出卡号部分

以matlab为平台进行图像处理,预处理银行卡卡号后进行卡号定位,并自动切割出卡号部分的图像。代码注释明确,适合小白阅读。

2018-04-22

空空如也

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

TA关注的人

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