自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java-AQS学习

AQS 学习记录​ AQS(AbstractQueuedSynchronizer)抽象同步队列,为线程的同步和等待等操作提供一个基础模板类,JUC并发包中的大部分并发工具类都是基于AQS实现的。​ AQS的核心是一个state的状态和一个双向链表。state代表着被抢占的锁的状态,0表示锁未被占用,非0的时候代表有线程获取到了锁,是否可以将state从0设置为1,代表着线程是否可以获取锁成功。如果线程没有获取到锁,则会被包装成一个Node节点,存放到一个双向链表中。​ AQS的部分源码如下:​​

2022-02-21 11:14:53 492

原创 Linux管道

Linux管道"|"管道​ 进程间通信的的方式之一。在Linux的世界中,一切皆文件。所以管道也是一种文件。实际上,管道是只存在于内存中的文件。常说的管道指的是无名管道,主要用于父进程与子进程之间,或者两个兄弟进程之间。为了解决管道只能在拥有血缘关系的进程间使用的问题,Linux提供了FIFO方式连接进程,FIFO又被称为命名管道(named PIPE)。命名管道是一种特殊的文件类型,归Linux内核管理。实现机制​ 管道是一个由内核管理的缓冲区(一般为4K大小)。管道的两端分别连接两个进程,一端连

2021-12-15 15:47:33 1218

原创 关于 command > /dev/null 2>&1

关于 command > /dev/null 2>&1​ 程序会处理外部的输入,然后将运算的结果输出到指定的位置。常见的后台运行的程序,输入可能来自于外部的文件,运算的结果也写入到其他文件中。​ 在交互式程序里(比如和Linux交互的bash),输入通常都是用户的键盘和鼠标,输出则是用户的屏幕。当然也会有将输出的结果存储到文件中的需求,例如,从几个G的log文件中删选感兴趣的部分,这个时候就会用到输入输出的重定向。文件描述符-FD​ 在Linux的环境下,一切皆文件。通过文件可以

2021-12-08 17:45:39 996

原创 ActiveMQ消息持久化

消息的存储方式Queue消息模型​ 采用存储采用先进先出(FIFO),一个消息只能被一个消费者消费,当消息被确认消费之后才会被删除。Topic消息模型​ 每个订阅者获取的消息实际是消息的一个副本,只有一个消息副本会被存储,MQ 提供了一个指针来指向消息存储并且分发消息副本到订阅者,消息直到所有的持久化订阅者都被接收才能被删除。持久化存储KahaDB消息存储AMQ消息存储JDBC消息存储内存消息存储KahaDB​ 默认的持久化方式,KahaDB存储是一个基于文件的快速存储消息,所有的

2020-12-11 15:43:24 204 1

原创 ActiveMQ使用

​ JMS:Java消息服务(即Java Message Service),Java平台上有关面向MOM的技术规范。目的是通过提供标准的产生、发送、接收和处理消息的API简化企业应用的开发,类似JDBC和数据库通信方式的抽象。​ ActiveMQ:ActiveME是基于JMS的开源的消息中间件。提供标准的、面向消息的、能够跨多种语言和系统的应用集成消息中间件。​ 消息:服务之间进行传送的数据单位。可以很简单,比如字符串;也可以是对象等。JMS中的相关角色Broker:消息服务器,作为server提供

2020-12-08 19:47:33 115

原创 HashMap元素插入和扩容

HashMap的特点从JDK1.8开始HashMap的存储结构变成了数组+链表+红黑树,单链表中元素个数超过指定阈值,会转化为红黑树结构存储(提高查询效率);从1.7到1.8,在hash冲突的时候,链表的插入将头插法改为尾插法,防止在高并发的情绪出现循环链表;HashMap的默认数组大小为16,代表hash数组的长度;默认的加载因子是0.75,代表存入元素大于数组大小*加载因子就进行扩容;HashMap是线程不安全的,方法都未使用synchronized关键字;允许key和value值为nul

2020-11-29 10:41:59 1499 1

原创 高并发系统的限流

在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;限流:而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段来限制这些场景的并发/请求量,就是限流。​ 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统

2020-11-27 14:18:56 281

原创 多线程_Sync 和 Volatile

Synchronized​ 为啥要用锁?线程安全问题:1.存在共享数据 ;2.多线程共同操作共享数据。public class T{ private int count = 0; private Object o = new Object(); public void method(){ synchronized(o){//任何线程执行下面的代码都需要先获取o的锁 count--; System.out.println(Thread.currentThread

2020-11-22 17:47:46 349 2

原创 Redis雪崩、击穿、穿透

Redis雪崩、击穿、穿透缓存预热问题:服务器启动之后,迅速宕机。排查特征:请求数量多,主从之间数据吞吐较大,数据同步操作频繁。​ 缓存预热就是系统启动之前,提前将相关的缓存数据直接加载到缓存系统,避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题。用户直接查询实现被缓存的缓存数据。方案前期准备日常例行统计数据访问记录,统计访问频度较高的热点数据。利用LRU数据删除策略,构建数据存留队列。准备工作将统计结果中的数据分类,根据级别,Redis优先加载级别较高的热点数据利用分

2020-11-20 00:41:21 200

原创 Mysql_索引相关优化

索引的相关优化索引的基本知识​ 索引能够大大的提高系统的性能。索引的优点通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性大大加快数据的检索速度,这也是创建索引的最主要原因加快表与表之间的连接,在实现数据的参考完整性方面特别有意义在使用分组和排序,子句进行数据检索时,同样可以显著减少查询中分组和排序的时间通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。​ 当然索引的维护也需要相应的开销:创建索引和维护索引需要时间,这种时间随着数据量的增加而增加索引需要占

2020-11-12 00:39:54 108

原创 Mysql_执行计划

执行计划​ 为了优化Sql语句的执行,需要查看Sql的具体执行过程,以加快Sql语句的执行效率。可以使用explain+sql语句来模拟优化器执行sql查询语句,从而了解mysql是如何处理sql语句的。执行计划中包含的相关信息:属性含义idselect查询的序列号,表示查询中执行select字句或操作表的顺序select_typeselect语句的类型,主要区分普通查询、联合查询、自查询等table表名称type访问类型,以何种方式去访问数据po

2020-11-08 11:50:17 85

原创 Mysql_schema和数据类型优化

数据类型的优化更小的通常更好​ 应该尽量使用可以正确存储数据的最小的数据类型,更小的数据类型通常占用更少的磁盘空间、内存和cpu缓存,并且处理时需要的cpu周期更少,所以处理的更快。但是要确保没有低估需要存储的值的范围。如果无法去儿哪个数据类型,就选择你认为不会超过范围的最小类型即可。简单就好​ 简单数据类型的操作通常需要更少的cpu处理周期。例如:整型比字符串代价更低,因为字符比较比整型比较更复杂使用mysql自建类型而不是字符串来存储日期和时间用整型存储IP地址(使用mysql的INET

2020-11-08 00:53:51 105

原创 Mysql_show_profile

show profile​ show profile是Mysql提供的分析当前会话中sql语句执行的资源消耗情况的工具。可用于sql调优的测量。默认关闭,并保持最近15此的运行结果。分析过程开启show profile此方式开启之后只存在于当前会话,可以通过修改全局配置set global profiling = on,来开启。通过show profiles查看结果上图中,有每一条sql的执行时间。可以通过show profile针对具体的某一条sql进行具体的分析查看。上

2020-11-03 23:44:33 90

原创 Redis删除策略

删除策略过期数据​ Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态:XX:具有时效性的数据-1:永久有效的数据-2:已经过期的数据或被删除的数据或未定义的数据时效性数据的存储结构删除策略是对expires的维护。删除数据的策略定时删除​ 创建一个定时器,当key设置有过期时间,且过期时间到达时,由定时器任务立即执行对键的删除操作。当前时间和expires中对过期时间一致时,定时器触发删除。​ 优点:节省内存,到时间就删除,

2020-09-27 00:23:51 2195 3

原创 Redis-主从复制

Redis-主从复制​ 为了避免单点Redis服务器故障,准备多台服务器,相互连通。将数据多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使其中某一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。​ 主从复制即将master中的数据有效及时的复制到slave中。一个master可以对应多个slave,一个slave只能对应一个master。master:复制写数据,执行写操作时,将出现变化的数据自动同步到slave。读数据的操作基本可忽略

2020-09-27 00:17:23 220

原创 Redis持久化和事务

Redis持久化和事务持久化​ 利用永久性存储介质将数据进行保存,在特定的时间将保存的数据进行恢复的工作机制称为持久化。防止数据的意外丢失,确保数据安全性。​ Redis提供了持久化的机制,分别是RDB(Redis DataBase):将当前数据状态进保存,快照形式,存储数据结果,存储格式简单,关注点在数据。AOF(Append Only File):将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程。RDB​ RDB持久化是指在指定的时间间隔内将内存中

2020-09-18 19:13:50 147

原创 Redis入门

Redis_入门​ Redis(REmote DIctionary Server)是C语言开发的开源的高性能键值对(key-value)数据库。​ NoSQL(NoSQL = Not Only SQL ),指非关系型的数据库。是对不同于传统的关系型数据库的数据库管理系统的统称。类型部分代表特点列存储Hbase、Cassandra、Hypertable顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的I

2020-09-18 19:07:37 128

原创 SpringMVC_2异常处理和拦截器

SpringMVC_异常处理和拦截器文件上传SpringMVC文件上传​ DispatcherServlet中定义了一个MultipartResolver属性,如果用户配置了该Bean,启动容器的时候,会自动注入参数,如果用户没有配置,则默认为null。当DispaterServlet收到请求时,它的checkMultipart()方法会调用MultipartResolver的isMultipart()方法判断请求中是否包含了文件且multipartResolver属性存在实例。如果满足条件,则调用M

2020-09-09 23:19:19 174

原创 SpringMVC_1入门

SpringMVC_1三层架构表现层:通常所说的web层。负责接收客户端请求,向客户端响应结果。通常客户端使用http协议请求web层,web层需要接受请求数据并完成响应。业务层:通常所说的service层。负责业务逻辑的处理,和开发项目的需求息息相关。web层依赖业务层,但是业务层不依赖web层。业务层在业务处理可能依赖持久层。对数据持久化需要保证事务一致性(也就是事务应该放在业务层来控制)。持久层:通常指dao层。负责数据持久化,包括数据库和数据访问层,数据库是对数据进行持久化的载体,数据访

2020-09-09 23:18:25 141

原创 SpringJDBCTemplate和事务控制

Spring_JDBCTemplate和事务控制JDBCTemplate​ 它是Spring提供的一个对象,是对原始的Jdbc Api对象的简单封装。Spring提供了很多操作模版类。操作关系型数据库:JdbcTemplate、HibernateTemplate操作nosql数据库:RedisTemplate操作消息队列:JmsTemplateJdbcTemplate作用​ 用于和数据库交互,实现对表的CRUD操作。JdbcTemplate的获取<?xml version="1

2020-09-02 20:50:18 361

原创 Spring AOP

Spring_AOPAccount案例中的转账持久层接口IAccountDao.java,新增按用户名查询。public interface IAccountDao { ... /** * 按用户名查询账户 * @param accountName * @return 如果有唯一的结果就返回,如果没有结果就返回null,如果结果集超过一个,抛出异常。 */ Account findAccountByName(String accountNam

2020-09-01 23:58:33 427

原创 Spring IOC

Spring_IoCSpring的优势​ 方便解耦,简化开发:通过Soring提供的IoC容器,可以将对象间的依赖关系交给Spring来控制,避免硬编码造成的过度耦合。用户可以不必再专注于单例模式类、属性文件解析等底层的需求代码,可以更专注于上层应用。​ AOP编程:面向切面编程,面向对象编程(OOP)中不容易解决的问题可以用AOP方便实现。​ 声明式事务的支持:通过声明方式灵活的进行事务的管理,提高开发效率。​ 程序的耦合:指模块间的关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块

2020-08-31 22:57:59 269

原创 线性表

线性表​ 具有相同特性的数据元素的一个有限序列。线性表中元素在位置上是有序的,这种位置上有序性就是一种线性关系。一般表示为:L=(a1,a2,a3...ai,..an,)L=(a_1,a_2,a_3...a_i,..a_n,)L=(a1​,a2​,a3​...ai​,..an​,)​ 通常,线性表分为两种:顺序表:将数据一次存储在连续的整块物理空间中;链表:将数据分散的存储在物理空间中,通过指针保持着他们之间的逻辑关系。顺序表​ 把线性表中的所有元素按照其逻辑顺序依次存储在计

2020-08-27 18:43:42 908

原创 POJ3784

POJ3784(链表)Running MedianDescriptionFor this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (middle value) of the elements received so far.InputThe first l

2020-08-27 18:39:44 221

原创 POJ1250

POJ1250(链表)Tanning SalonDescriptionTan Your Hide, Inc., owns several coin-operated tanning salons. Research has shown that if a customer arrives and there are no beds available, the customer will turn around and leave, thus costing the company a sale.

2020-08-27 18:39:06 352 1

原创 Mysql视图和分区表

Mysql视图和分区表视图​ 视图(View)是一个命名的虚表,由一个SQL查询来定义,可以当作表使用。与持久表不同的是,视图种的数据没有实际的物理存储。作用​ 主要用途是被用做一个抽象装置,程序不需要关心基础表的结果,只需按照视图定义来读取数据或更新数据。带来如下好处:提高重用性。例如需要经常查询某表中的部分数据。​ --将查询的结果存为视图,不用每次再从基础表中进行条件查询。对数据库重构,不影响程序的运行。​ --对表的拆分或连接,直接用视图来标识新表的结构,不需要直接操作基础表

2020-08-26 21:11:22 856

原创 栈和队列

栈和队列栈​ 栈是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。​ 通常栈的开口端被称为栈顶;相应地,封口端被称为栈底。进栈和出栈基于栈结构的特点,通常只会对栈执行以下两种操作:向栈中添加元素,此过程被称为"进栈"(入栈或压栈);从栈中提取出指定元素,此过程被称为"出栈"(或弹栈);栈的具体实现public class Stack<T> { private ArrayList<T> list; private int size;

2020-08-19 22:57:48 101

原创 POJ3259(栈)

POJ3259(栈)Bad Hair DayDescriptionSome of Farmer John’s N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows’ heads.

2020-08-19 22:55:46 115

原创 POJ2259(队列)

POJ2259(队列)Team QueueDescriptionQueues and Priority Queues are data structures which are known to most computer scientists. The Team Queue, however, is not so well known, though it occurs often in everyday life. At lunch time the queue in front of the

2020-08-19 22:54:54 625

原创 Mysql_InnoDB_行结构和页结构

Mysql_InnoDB_表索引组织表​ 在InnoDB中,每张表都有主键(Primary Key),表都是按照主键顺序组织存放的,这种存储方式的表成为索引组织表。如果在创建表的过程中没有显示的定义主键,InnoDB会选择或创建主键:首先判断表中是否有非空的唯一索引(Unique not Null),如果存在,那么该列就为主键;如果不存在,InnoDB会自动穿件一个6字节大小的指针。​ 如果表中有多个非空的唯一索引,InnoDB将选择创建表的时候第一个定义的非空唯一索引为主键。CREATE

2020-08-19 16:01:34 789

原创 B树_算法

B树_算法​ 又称多路平衡查找树,B树中所有节点的孩子节点的最大值为B树的阶。​ 一棵m阶B树或为空树,或为满足如下特征的树:树中每个节点最多有m颗子树,最多有m-1个关键字所有叶子节点都在同一层,并且不带信息如果根节点不是终端节点,则根节点至少有两颗子树除根节点外,其他非叶子节点至少有(m-1)/2颗子树(即至少有(m-1)/2-1个关键字)非叶子节点的结构为:np0k1p1k2p2…knpn节点的关键字个数指针0关键字1指针1

2020-08-13 00:09:31 421 1

原创 Mybatis_延迟加载和缓存

Mybatis_延迟加载和缓存问题​ 在一对多的情况下,比如有一个用户,拥有100个账号:在查询用户时,要不要把关联的账户查出来?​ 用户和账号是一对多的关系,一个用户对应很多个账号。如果查询用户的时候,同时关联查询它的账号,那么这些账号信息将占用很大的内存。所以实际情况下是,什么时候用到账号信息,什么时候查询对应的账号信息。在查询账户时,要不要把关联的用户信息查出来?​ 账号和用户是一对一的关系,一个账号属于一个用户。查询账号的时候,同时关联它的用户信息,只会多一个对象所需的内存,所需

2020-08-06 21:05:30 153

原创 Mybatis_连接池和级联查询

Mybatis_连接池和级联查询Mybatis_连接池​ mybatis连接池提供了三种方式的配置POOLED:采用javax.sql.DataSource规范中的连接池,mybatis中有针对该规范的实现。UNPOOLED:采用获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是没有使用连接池思想。JNDI:采用服务器提供的JNDI计数实现,来获取DataSource对象。不同的服务器拿到的DataSource对象是不一样的。如果不是web或者maven的war工程,

2020-08-06 00:49:42 196

原创 二叉搜索树(BST)和二叉平衡树(AVL)

二叉搜索树(BST)和二叉平衡树(AVL)二叉搜索树(BST)​ 在二叉搜索树(又称二叉排序树或者二叉查找树)中:若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值;若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值;任意结点的左、右子树也分别为二叉搜索树。基本操作和代码实现树的节点class Node { Integer data; Node left; Node right; Node parent; public Node(I

2020-08-04 22:42:15 570

原创 POJ2418(BST)

POJ2418(BST)Hardwood SpeciesDescriptionHardwoods are the botanical group of trees that have broad leaves, produce a fruit or nut, and generally go dormant in the winter.America’s temperate climates produce forests with hundreds of hardwood species – t

2020-08-04 22:38:30 176

原创 POJ1577(BST)

POJ1577(BST)Falling LeavesDescriptionFigure 1Figure 1 shows a graphical representation of a binary tree of letters. People familiar with binary trees can skip over the definitions of a binary tree of letters, leaves of a binary tree, and a binary sea

2020-08-04 22:37:02 247

原创 Mybatis_入门

Mybatis-入门概述​ Mybatis是一个Java语言编写的持久层框架。封装了JDBC操作的细节,使开发者关注于sql语句本身,无需关注注册驱动、创建链接等过程。使用了ORM思想实现了结果集的封装。ORM​ Object Relational Mapping 对象关系映射。简单说就是数据库表和实体类及实体类的属性对应起来,操作实体类就是操作数据库。第一个Mybatis程序准备数据CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_IN

2020-07-29 21:31:03 160

原创 内排序_算法

内排序_算法概述根据排序元素所在位置的不同,排序分: 内排序和外排序。​ 内排序:在排序过程中,所有元素调到内存中进行的排序,称为内排序。内排序是排序的基础。内排序效率用比较次数来衡量。按所用策略不同,内排序又可分为插入排序、选择排序、交换排序、归并排序及基数排序等几大类。​ 外排序:在数据量大的情况下,只能分块排序,但块与块间不能保证有序。外排序用读/写外存的次数来衡量其效率。分类图1比较:需要比较两个元素的大小(前后)才能进行的排序。插入:遍历到的元素放入之前维护的已完成排序的序列中。

2020-07-29 21:27:21 1758

原创 算法_树和二叉树

二叉树树​ 树是一种非线性的数据结构,数据元素之间之间的关系是一对多的关系。树的节点​ 节点:使用树结构存储的每一个数据元素都被称为节点。例如上图中的B就是一个节点。​ 根节点:每一个非空树都有且仅有一个根节点。如果一个节点没有父节点,那么这个节点就是树的根节点。例如上图中的A。​ 叶子节点:如果节点没有任何子节点,那么次节点就是叶子节点。​ 父节点、子节点、兄弟节点:上图中,A是B、C、D的父节点。B、C、D是A的子节点。B、C、D为兄弟节点。​ 节点的度:拥有的子节点数,为该节点的度。

2020-07-21 21:12:00 153

原创 POJ1339(哈夫曼树)

POJ1339(哈夫曼树)poker card gameDescriptionSuppose you are given many poker cards. As you have already known, each card has points ranging from 1 to 13. Using these poker cards, you need to play a game on the cardboard in Figure 1. The game begins with a p

2020-07-21 21:06:54 139

空空如也

空空如也

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

TA关注的人

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