自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(113)
  • 资源 (2)
  • 收藏
  • 关注

原创 java监听目录或者文件的变化

一、场景我们可能需要监听目录或者文件的变化,做出相应操作。比如 配置文件变化后,需要重新加载配置。二、Java监听目录变化的实现方式参考:https://zq99299.github.io/java-tutorial/essential/io/notification.html#watch-%E6%9C%8D%E5%8A%A1%E6%A6%82%E8%BF%B0三、注意事项1、监听的事件发生时,java应用程序不会实时感知到,而是有一定的间隔。监听程序默认10s检测一次。代码:Pollin

2021-09-09 21:26:29 2214 1

原创 数据库单个插入操作转为批量插入

在业务中,我们常常会遇到很多单行插入的场景,当插入的并发数比较小时,并不会有什么问题。但是一旦插入的速度大大加快时,可能就会遇到数据库插入瓶颈。有人用多线程去并行插入,其实这样不仅没有解决问题,反而比单线程插入的速度更慢,因为多线程插入时,会竞争数据库自增锁。此时我们更应该考虑的是将单个插入操作,改成批量插入操作。这样不仅减少了通信次数,同时也减轻了数据库压力,可以更快地插入。但是很多业务场景就...

2020-03-20 17:09:35 1019

原创 innoDB加锁规则

锁的类型行锁record lock,锁住的是一行索引记录 (读已提交和可重复读隔离级别都有)间隙锁gap lock,锁住的是一个开区间 (只有可重复读隔离级别才有)next-key lock = 行锁+间隙锁,左开右闭区间(只有可重复读隔离级别才有)加锁规则:两个原则,两个优化,一个bug(可重复读隔离级别)原则1:加锁的基本单位是next-key lock。注意是前开后闭区间。...

2020-03-20 16:23:42 400

原创 mysql慢日志问题排查

1.下载慢日志文件show variables like '%query%';变量值long_query_time0.100000(执行时间超过0.1秒的会记录到慢日志文件)slow_query_logON (表明慢查询日志打开)slow_query_log_file/export/data/mysql/log/slow.log(慢日志文件路径)可...

2020-03-20 14:42:26 369

原创 ArrayBlockingQueue源码解析

ArrayBlockingQueue源码解析BlockingQueue是阻塞队列,首先是一个循环队列,支持入队出队操作;同时可以在队列满时阻塞入队,在队列空时阻塞出队。(类似一种消费者生产者模式)ArrayBlockingQueue显然是通过数组来实现阻塞队列。那么它是如何通过数组来实现队列呢?又如何实现阻塞入队出队呢?同时它又是线程安全的类,它是如何保证在多线程的情况下依然保证入队出队的正...

2020-01-16 22:59:47 147

原创 二叉树的前中后序遍历

前中后序遍历的递归方式。其实,前中后序的遍历,走的路径是一样的,只是访问结点的时间不同而已。非递归进行前中后序遍历(使用栈)题目描述:List preorderTraversal(TreeNode root)List inorderTraversal(TreeNode root)List postorderTraversal(TreeNode root)1.前序遍历publ...

2020-01-13 01:06:39 275

原创 PriorityQueue源码学习

上个博客学习了堆的基本性质和操作,这次来学习一下java中优先队列(堆)的具体实现。1.定义public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable 2.常量和字段 /** 默认初始容量 11 */ private static fina...

2020-01-12 00:52:33 210

原创 优先队列/堆的基础

优先队列(堆)的定义和性质定义:优先队列: 特殊的“队列”,取出元素的顺序是按照它的优先级大小,而不是元素进入队列的先后顺序。使用堆来实现优先队列。性质:结构性:用数组表示的完全二叉树。有序性:任一结点是其子树所有结点的最大值(或最小值)。最大堆:maxHeap,也叫大顶堆最小堆:minHeap,也叫小顶堆从根结点到任意结点的路径上,都是有序的。基础操作下面以大顶堆为例进...

2020-01-11 23:30:18 152

原创 LinkedHashMap实现LRU原理探究

LRU(least recently used)最近最少使用,是一种常用的页面置换(缓存淘汰)算法。其他在java中,LinkedHashMap就实现了LRU。那么LinkedHashMap是如何实现的呢?总体来说就是基于 HashMap+链表 ,使用HashMap保证查找效率是O(1),使用链表将所有节点连成一个队列,保证顺序性,也方便头节点删除和尾节点插入,插入或者删除也是O(1)。1...

2020-01-10 15:06:40 514

原创 ConcurrentHashMap源码解析

ConcurrentHashMap1. 定义public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable 2.常量和字段常量 /** * 最大容量,32位int型因为有2位用作控制...

2020-01-07 16:38:23 113

原创 HashMap源码简单解析

HashMap1.定义public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable2.常量和字段值常量//默认初始容量 16static final int DEFAULT_INITIAL_CAPACITY = ...

2020-01-06 21:48:17 120

原创 两个线程交替打印1-100的奇数和偶数

问题定义启动a、b两个线程,由这两个线程打印出1到100共一百个数字。要求:a线程打印1、3、5、7等奇数,b线程打印2、4、6、8等偶数。依次串行打印,即打印完1之后,再打印2,然后是3、4、5…直到100,全部打印完成后,进程能正常结束。解决思路两个线程交替打印,就是要两个线程之间进行同步,走走停停。线程的同步可以使用Object类自带的wait和notify(或者notify...

2019-12-05 16:59:06 8059 3

原创 mac电脑修改环境变量

我们在工作中经常需要安装一些软件,很多软件需要用命令行来启动。如果不希望每次运行软件,都必须到相应的目录,我们可以把相应的软件目录加入到系统环境变量中。具体操作如下:终端执行 vim ~/.bash_profile在文本最后加入类似的代码:export M2_HOME=/Users/xxx/Documents/CSsoftware/apache-maven-3.6.1export M...

2019-08-15 18:18:37 471

原创 中断

一、什么是中断什么是中断?举个生活中的例子,我正在办公室写着代码,突然肚子疼,那么我就要 “中断” 当前的工作,去上趟厕所,上完厕所之后,再回来继续写代码;写着写着,同事又叫我吃饭去,那么我就要再次 “中断” 工作,去吃饭。那么可以看到,中断 就是 话面上的意思:当cpu正在处理这一项工作时, 突然又来了一个请求,那么cpu就要中断当前的工作,转去处理新的请求。新的请求就要做“中断”请求。处理...

2019-04-02 20:38:17 1001

原创 实模式和保护模式

一、背景以80x86电脑说,一开始的8086/8088系列的地址总线只有20位,所以只有1M的地址空间。通过“段基址:偏移”的方式,就可以获得实际的物理地址。但是这种方式不安全:用户程序可以修改系统程序的内存或者其他用户程序的内存;而且内存太小了。随着硬件的发展,后来出现了32位甚至64位的机器,地址总线就有32位或64位,地址空间可以扩展到4GB甚至更大。所以后来就出现了保护模式。保护模式...

2019-03-29 21:29:48 1091

原创 x86汇编代码记录

一、汇编代码如何执行编译 masm a.asm链接 link a.obj执行 a.exe二、汇编练习代码设计程序。实现Y=2X+3,X是一位十进制数。要求X从键盘输入,在下一行上显示’Y=2X+3=’ 以及十进制计算结果。.model small.data mess1 db 'input x:','$' ;输出字符串要以$结尾 mess2 db 0ah,0dh,'y=2...

2019-03-19 14:44:41 2227

原创 限流算法与简单实现

一、限流的场景在解释「服务限流」之前,我们来看一下前些时间网上很火的一个段子,说的是新浪微博的一名工程师正在家里办婚礼,突然接到公司的电话要紧急处理线上流量激增的问题,那天应该是某当红明星突然在微博上公布恋情,微博流量突增好几倍,导致系统功能出现不稳定,用户访问不畅。然后这名工程师就只好晾开新娘,在婚礼现场穿着西装打开笔记本调试代码了。通常来说,我们的应用服务器的资源是有限的,可以同时处理的请...

2019-03-11 20:45:07 672

原创 树的遍历(递归与非递归版本)

树的遍历题目要求要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。#include <stdio.h>#include <stdlib.h>typedef char ElementType;typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data

2017-09-09 21:17:09 1088

原创 动手实现一个简单的java web框架

最近看了《架构探险》这本书,实现了一个简单的web框架,现在回顾一下完成这个框架的过程是怎么样的。一、预备知识(一)框架和类库首先通过框架和类库的区别来理解一下框架,比如我们写程序就像是建造一个房子,框架就像是房子的整体结构(由钢筋水泥铸成),我们只需要按照自己的需要去装修自己的房子,让它成为我们想要的样子,而类库就像是我们需要用到的一个个材料,比如门板、玻璃、涂料,我们用这些材料来装修装修。我们使

2017-08-26 20:59:04 2129

原创 mysql优化

mysql流程查询优化常见分析手段: 1. 慢查询EXPLAIN分析查询索引的使用索引类型B-Tree索引(重点掌握) 使用较多,二叉树,数据都存放在叶子节点中,优势在于查找的最短路径相同。R-Tree索引 使用较少,优势在于范围查找Hash索引 使用较少,主要在Memory存储引擎中使用。Full-text索引(全文索引) 使用较少,只有My

2017-08-25 11:45:38 381

原创 git常用操作总结

理解基本概念workspace: 本地工作区 index: 暂存区 repository: 本地仓库 remote: 远程仓库一般使用git的步骤首先,你需要先安装git git安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 然后开始配置一下git。在这个命令行窗口中输入:git config --global

2017-08-09 18:01:34 539

原创 实习项目三总结

项目要求实现一个平台,可以进行短信、邮件的推送 要求: 1. 可以同步、异步发送。 2. 可以进行回复,具体就是如果发送方需要接收方进行回复,那么可以在短信或邮件后面加一个链接,接收方点进去就可以进行回复,而且接收方可以进行再回复,就像论坛堆楼一样,管理者也可以看到这些。 3. 支持水平扩展 4. 支持动态配置,这儿具体是:调用的运营方接口可能改变。 5. 支持异常汇总方便查询。项目设计

2017-08-07 21:28:38 363

原创 实习项目二总结

项目要求实现一棵可动态编织的组织架构树 说明: 1.该树需要实例化至数据库,保留层级结构。 2.该树需要有层级关系,层级不限。 3.该树在任意节点下,都可以向下新建子节点。 4.节点位置可以移动,且可以移至任意其他节点下。 5.名称可编辑。 ##题目理解与思考 1. 组织架构,一个组织的架构,就是树形结构的。比如一个公司,下面有许多部门,每个部门下面又有很多的子部门。

2017-08-07 17:15:44 323

原创 实习项目一总结

项目一要求实现对于文章实体的CRUD的RESTFUL接口。实现思路刚开始什么框架都不会使用,也不懂什么叫做restful接口,所以自己感觉一头雾水,就向导师请教。导师看我没有使用过任何框架,就像我推荐了spring boot框架,而且给我推荐了两篇博客。一篇介绍spring boot的入门,一篇大致解释了restful接口。链接如下:spring boot适合入门看的博客 restful接口设计指

2017-08-07 16:42:02 411 1

原创 两个堆栈实现队列,两个队列实现堆栈

两个堆栈实现队列分析 堆栈是先进后出,队列是先进先出,用两个堆栈倒腾两次正好把顺序反过来就能实现队列的操作。 一个堆栈用来出队(可以叫stackPop),一个堆栈用来入队(可以叫stackPush)。 要实现先进先出,要把数据从stachPush中倒腾到stackPop中,倒腾的时候,必须保证两点: (1). stackPush往stackPop倒腾的时候,必须一次把stackPush的时

2017-06-01 22:31:53 4426

原创 链表中环的入口结点

题目来源:牛客网-剑指offer 链表中环的入口结点题目要求 一个链表中包含环,请找出该链表的环的入口结点分析 (1)一种比较偷懒的方法就是遍历链表,并直接利用HashMap来保存已经遍历过的结点。一旦发现已经保存过的结点,那么该结点就是环的入口结点。 (2)参考自https://www.nowcoder.com/questionTerminal/253d2c59ec3e4bc68da1

2017-06-01 21:06:33 301

原创 寻找两个链表的第一个公共结点

题目链接 两个链表的第一个公共结点要求 输入两个链表,找出它们的第一个公共结点。模板/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { pub

2017-06-01 20:15:11 240

原创 拓扑排序-图8 How Long Does It Take

题目 08-图8 How Long Does It Take (25分)分析 典型的拓扑排序问题。大致的解法如下: 我的代码#include <stdio.h>#define MAXN 100#define INF 1234567int graph[MAXN][MAXN];int inDegree[MAXN] = {0};int earliest[MAXN];struct Q

2017-05-31 17:23:33 476

原创 图的最小生成树问题-公路村村通

题目 08-图7 公路村村通 (30分)分析 典型的最小生成树问题。 prim算法和dijkstra算法长得很像。prim算法核心思想就是让一棵小树长大,采用贪心策略,每次从小树相邻的顶点中收录一个路径最短的顶点,直到这棵树长到最大。最后检查这棵树中的顶点是否完全包含了图中的顶点,如果没有,就说明图不连通,不存在最小生成树。 prim算法求解代码#include <stdio.h>#

2017-05-31 14:03:43 1105

原创 图的总结

图的表示邻接矩阵,适合稠密图 注意初始化时,自身可以用0表示,不相连的结点可以用负数、正无穷表示,具体要看不同应用的场景。相邻的结点,如果是无权图,可以用1表示;如果是有权图,可以用它们的的权重来表示。邻接表,适合稀疏图图的遍历DFS:深度优先void DFS(结点V){ 访问V visited[V] = true;//标记为已访问 for(V的邻接每个结点W)

2017-05-30 14:04:42 367

原创 java垃圾收集器与内存分配策略(1)

概述让我们先想一想,如果让我们完成垃圾收集(Grabage Collection, GC),我们需要考虑哪些事情? (1)首先肯定需要先知道哪些是垃圾,哪些不是。(2)然后再确定什么时候回收垃圾。(3)最后就是如何去回收。 还需要注意的一点是: 程序计数器,虚拟机栈、本地方法栈都是线程所私有的,它们随线程而生,也随线程而灭。当方法结束或线程结束时,对应的内存自然就跟随着回收了。这三个区域的内存

2017-05-30 11:36:15 327

原创 java内存区域

java虚拟机运行时数据区域方法区(Method Area) 堆(Heap) 虚拟机栈(VM Stack) 本地方法栈(Native Method Stack) 程序计数器(Program Counter Register) 其中,方法区和堆为所有线程所共享,其余区域为线程私有。程序计数器作用: 作为当前线程的所执行的字节码的行号指示器。 每个线程都有一个程序计数器。如果线程执行的是

2017-05-30 10:23:29 301

原创 11-散列2 Hashing (25分)

题目 11-散列2 Hashing (25分)分析 这一道题的难点在于对于那些永远无法插入的数字,何时可以断定它无法插入。 冲突解决方法是平方探测,且只有正数,那么每次冲突后的增量便是:1^2, 2^2, 3^2, 4^2, … , tableSize*2,(tableSize+1)^2, (tableSize+2)^2, … 当达到(tableSize + i)^2 = tableS

2017-05-29 16:37:23 662

原创 哈希表的使用-11-散列1 电话聊天狂人

电话聊天狂人题目 11-散列1 电话聊天狂人 (25分)分析 这道题考察的就是哈希表的建立与使用。我整体的思路是这样:先根据输入n建立一个适当大小的哈希表,然后将2*n个电话号码插入到哈希表中,最后遍历哈希表,找出出现次数最多的电话号码。 而散列表的构造,重点就在于如何构造散列函数,如何进行冲突处理。 (1)构造散列函数。 由于电话号码后四位是完全随机的,变化较大,所以可以作为关键

2017-05-29 15:12:47 591

原创 图的最短路径问题-07-图6 旅游规划

题目 07-图6 旅游规划 (25分)分析 这道题明显是个单源无向图的最短路径问题,但是这儿注意的是有两个权重:一是距离,二是收费。可以用Dijkstra算法来求解。当距离相等时按照收费来更新最短路。 伪码描述://dist[i]表示结点i到源点S的距离//cost[i]表示结点i到源点S的收费void Dijkstra(源点S){ while(1){ V

2017-05-27 00:24:41 1616

原创 图的最短路径问题-Floyd算法-07-图4 哈利·波特的考试

题目 07-图4 哈利·波特的考试 (25分)分析 这道题就是一个多源有权无向图的最短路径问题,就是求出每个结点的最短路径,并得到其中的最小值。 这儿的结点数比较少(N<=100),所以我们可以采用简单的邻接矩阵表示,并采用Floyd算法来求解。我的代码#include<iostream>using namespace std;#define INFINITY 123456#de

2017-05-25 10:44:13 427

原创 图的广度优先遍历-06-图3 六度空间

题目 06-图3 六度空间 (30分)分析 本题需要输出距离不超过6的结点数占结点总数的百分比,首先肯定想到要用广度优先遍历(BFS),而且只需要遍历6层以内的结点。可以用一个变量level来记录层数,一旦达到6层便停止遍历,计算输出。我的代码#include<iostream>#include<queue>using namespace std;int const MAXN =

2017-05-24 15:27:02 1001

原创 图的搜索和最短路径-Saving James Bond

图的搜索-深度优先搜索DFS题目 06-图2 Saving James Bond - Easy Version分析 James从中心岛屿开始跳,这一跳需要进行特殊处理,然后在鳄鱼头上跳的时候,利用dfs进行搜索,一旦可以跳到安全区域就结束搜索。 注意中心岛屿并不是P[0]。代码#include<stdio.h>#include<math.h>#define maxn 101int N

2017-05-24 10:40:45 420

原创 阿里一面-say goodbye

自我介绍聊一聊做过的项目,会仔细问到项目里一些功能是如何实现的。难点在哪儿,解决方案是什么。然后有没有考虑到一些性能问题、安全问题。 问到我有没有测试过最大连接的socket数量,即可以支持多少人同时在线聊天(我做的是一个类似QQ的聊天室软件)。影响socket通信质量的原因有哪些?手写一个归并排序。HashMap的数据结构是什么?如何当HashMap中put一个对象时,底层是如何进行的。

2017-05-22 14:42:18 333

原创 10-排序6 Sort with Swap(0, i)

题目 10-排序6 Sort with Swap(0, i) (25分)分析 我刚开始想着直接排序。先试了几个例子,经过总结之后,觉得步骤应该是这样: 看0在不在位置0处(即得到0所在的位置pos0),如果不在,把0与应该在pos0位置处的数字交换,然后重复执行步骤1;如果在则向下执行。看数组是否有序,如果数组无序,把0与第一个无序的数字交换,然后执行步骤1;如果有序则停止。 在上述

2017-05-21 20:55:23 433

Linux0.11源码

Linux0.11源码,方便我们熟悉早期的操作系统。 代码来自于实验楼。

2019-04-05

阿里巴巴Java开发手册

阿里巴巴Java开发手册1.2版本

2017-05-24

空空如也

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

TA关注的人

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