自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ljfirst的博客

做技术的当然要快乐

  • 博客(73)
  • 资源 (2)
  • 收藏
  • 关注

原创 高并发、高可用、高性能技术方案连载

项目介绍本项目通过Demo的方式揭露中间件神秘的面纱,希望你能通过这些Demo,从初学乍练到恍然大悟,最后兴趣盎然、渐入佳境(欢迎关注我的博客);建立中间件的知识结构体系,方便使用的时候查找,欢迎更多志同道合的朋友加入项目MiddleSoftwarePractice(欢迎提issue和pull request)。第一境界:昨夜西风凋碧树。独上高楼,望尽天涯路Demo演示如何使用jav...

2020-04-24 15:17:48 963

原创 开源数据结构和算法实践(开源项目:AlgorithmPractice)

通过动手实践了解数据结构和算法的底层原理;记录面试中遇到的面试题,并从多个角度进行分析;建立知识结构体系,方便查找;欢迎更多志同道合的朋友加入项目AlgorithmPractice,(欢迎提issue和pull request)。......

2020-02-22 17:06:58 2616

原创 时间轮的golang实践浅析

思考:一定有一个类似于定时器的工具在执行,到时间后,中断任务。那么这个定时器是什么样的数据结构?又是如何实现这个定时功能的?理论上客户端发起请求后,立即创建(启动)一个 Timer:到期间隔为 d,到期后执行 “断开连接” 的操作。如果到期间隔 d 以内收到了服务器的响应,客户端就删除(停止)这个 Timer。如果一直没有收到响应,则 Timer 最终会到期,然后执行 “断开连接” 的操作。实际上。

2023-05-12 01:05:05 428 1

原创 缓存算法LRU和LFU的简易实现

缓存问题:LRU和LFU

2022-02-07 21:16:29 497

原创 零钱交换及其延伸问题的讨论

有这样一个问题:给定不同面额的硬币 coins 和一个总金额 target,求出组成target金额的硬币序列。延伸出下列问题:1、零钱数组是否可以组成target表示的金额2、在1问题的基础上,凑出target表示金额所需要的最少零钱数量3、在2问题的基础上3.1、凑出target表示金额的所有零钱数量的组合3.2、凑出target表示金额的所有零钱数量的排列4、零钱数组每个数仅能用1次的基础上,是否还能凑出target表示金额5、在5的基础上,进行排列组合6、上述6个问题,零钱

2022-02-04 13:37:25 495

原创 Charles简易使用指南

本文讲解的内容是Charles简易使用指南,主要包括:安装Charles配置Charles使用Charles抓包使用Charles发送请求安装Charles下载地址:https://www.charlesproxy.com/download/参考文档:CHARLES-Charles安装与使用配置Charles1、电脑安装证书2、手机安装证书解决显示unknown问题下载证书:手机浏览器输入:chls.pro/ssl即可下载安装证书:找到证书的下载地址,点

2021-06-12 02:58:34 653

原创 跳表,红黑树,b+树,hashmap的区别?

跳表,红黑树,b+树,hashmap因为在其数据结构上的不同而体现出不同的性能,本文从下列角度来权衡各种结构的利弊,加深对各种结构的理解。1.为什么mysql使用b+树而不是红黑树或者hashmap?2.为什么redis使用跳表而不是红黑树或者hashmap?3.为什么重写equals以后还要重写hash1.为什么mysql使用b+树而不是红黑树或者hashmap?1.1、不使用红黑树是因为:1)在增删改查的过程中,时间复杂度为log2n,而b+是logmN,体现在内存和磁盘的IO上

2021-01-12 10:25:29 4182 4

原创 数据结构基础:堆栈队列

本文讲解的主要内容是堆栈队列,其中:堆主要讲解大小顶堆和堆的应用(查找第K大的元素)、优先队列栈主要讲解栈的实现(数组栈和链表栈)、双栈实现队列、最小栈、最小栈优化、单调栈、计算器队列主要讲解队列的实现(数组队列和链表队列)、队列实现栈说明:所有源码均可以在idea上调试。堆大小顶堆介绍:使用对排序对数组进行排序,根据排序规则分为大顶堆和小顶堆设计思路:初试化建堆,建完后,堆顶即最大/最小元素。交换堆顶和数组末尾元素,然后针对剩余的n-1个元素,对堆顶元素进行调整即可。重复2

2020-12-23 10:36:53 386

原创 Java进阶系列:GC分析与优化

GC分析与优化

2020-12-17 14:32:25 325 1

原创 面试姊妹篇5:常见的Java基础面试题

目的专门收集一些看上去很有意思的题目这些题目,一看就会,一做就错持续更新,每十题作为一篇文章目录1、异或思维2、数组相关系列文章面试姊妹篇1:不起眼的Java基础/陷阱题,一看就会,一做就错面试姊妹篇3:常用方法中的错误BigDecimal bd1 = new BigDecimal("2.0");BigDecimal bd2 = new BigDecimal("2.00");System.out.println("equals: " + bd1.equals(bd2))

2020-12-10 19:38:53 163 1

原创 常用配置文件(备忘录)

本文主要记录常用的一些配置文件,主要包括:或者见MAC 的 .bash_profileGolang下载地址Go 语言之Mac环境配置或者见MAC 的 .bash_profileJDK下载地址Mac 配置JDK环境变量.bash_profilemac的git自动补全:git-completion.zsh

2020-12-08 15:28:13 471

原创 面试姊妹篇4:常见的Java多线程面试题

主要内容本文主要记录多线程相关的操作问题,这些问题主要出现在一些面试中,当然学会了对本身的代码能力也有提升。目录1、顺序多线程2、发令枪问题本文源码1、顺序多线程\color{7f1A8A}1、顺序多线程1、顺序多线程题目描述:两个线程,一个只能存有数组1、2、3和另一个存有a、b、c,然后通过调度,最终结果输出1a2b3c2、发令枪问题\color{7f1A8A}2、发令枪问题2、发令枪问题...

2020-12-02 20:16:05 162

原创 往红黑树祖坟上刨根问底

一、题目描述将数组转化为红黑树(主要介绍add()、delete()、containsKey()方法)其中add函数共包含四部分:add()、insertFixup()、rotateRight()、rotateLeft()。delete函数包含:containsKey函数包含:详细源码:RedBlackTree二、解题思路add()\color{red}{add()}add()delete()\color{red}{delete()}delete()containsKe

2020-11-20 18:27:21 186

原创 Java并发系列:反射的使用和AOP

Java反射可以自由的获取类的对象属性、方法。本文主要介绍以下用法:获取对象中的常量正文获取对象中的常量\color{7f1A8A}获取对象中的常量获取对象中的常量说明假设存在类A,是一个测试用例类,类中存在大量的以array开头的非静态数组现在有个类B,想对类A中的这些用例做同样的操作,因此需要把这些用例放置在一个容器中,通过循环去做操作,获取用例数组的过程需要反射。注意因为是非静态,所以m.invoke(gg),为不是m.invoke( c ),c是类,gg是对象,类取

2020-11-20 14:07:22 374 2

原创 六种链表反转方式

链表的反转有多少种方式

2020-11-13 09:08:10 598

原创 二叉树序列化和反序列化的两种方式

本文主要介绍二叉树的序列化和反序列化,内容为二叉树和数组的互相转化。二叉树的序列化按层遍历二叉树 输出数组S形遍历二叉树 输出数组先序遍历二叉树 输出数组中序遍历二叉树 输出数组后序遍历二叉树 输出数组二叉树的反序列化将按层次遍历的方式输入的数组 构造成一个二叉树将按先序遍历的方式输入的数组 构造成一个二叉树将按中序遍历的方式输入的数组 构造成一个二叉树将按后序遍历的方式输入的数组 构造成一个二叉树根据前序遍历序列和中序遍历序列,构建唯一一棵确定的二叉树根据后序遍

2020-11-09 09:24:51 4570 6

原创 0-1背包问题解法(动态规划、分支限界法(回溯法、剪枝法)、贪心算法)

本文主要讲解0-1背包问题的三种解法:动态规划分支限界法(回溯法、剪枝法)贪心算法什么是0-1背包问题:给定n个重量为w1,w2,w3…wn,其价值为v1,v2,v3…vn的物品和容量为C的背包,求这个物品中一个最有价值的子集,使得在满足背包的容量的前提下,包内的总价值最大正文开始动态规划主要思想主要代码注意事项分支限界法(回溯法、剪枝法)主要思想主要代码注意事项贪心算法主要思想主要代码注意事项...

2020-10-30 23:15:54 1852

原创 懒人专属:使用screw一键生成数据库文档

本文主要介绍如何使用screw一键生成数据库文档主要涉及的文件pom.xmlapplication.properties如何使用运行插件主要涉及的文件pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst

2020-10-19 14:30:20 301

原创 懒人专属:MyBatis Generator自动生成代码及排坑

本文主要介绍如何使用MyBatis Generator自动生成代码,项目源码:GeneralCode简易说明需要在pom.xml中插入mybatis.generator插件需要一个generatorConfig.xml文件来描述需要逆向的数据库名称以及数据库连接配置通过maven启动项目使用步骤pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/PO

2020-10-19 13:42:27 193

原创 Java并发系列:正确创建和停止线程的方式及Volatile失效场景

其实本质上实现线程只有一种方式:那就是new Thread();后续介绍的6种,哪怕再多,最终都是调用该方法创建线程的。

2020-10-09 13:50:18 247

原创 数据库系列:数据库事务、锁、死锁

数据库锁表锁行锁脏读幻读

2020-10-09 13:14:05 337 1

原创 Redis系列:redis实现分布式锁

基于 Redis 实现一个通用的分布式锁组件。整体模式Jmeter发压到Nginx上,Nginx在负载到两台应用上,应用去redis上扣款,组成分布式环境。注意在实验的时候,可以打包两个端口不同的jar包,也可以在idea上开启Allow parallel run达到实验目的。SpringBoot jar启动报错:S

2020-10-08 14:34:50 3793 9

原创 Java并发系列:Stream的使用

Java并发:Stream的用法在这里插入代码片

2020-10-08 14:07:23 578

原创 Java并发系列:线程池与阻塞队列

本文主要介绍Java线程池的设计和使用newCachedThreadPoolnewFixedThreadPoolnewSingleThreadExecutornewScheduleThreadPool阻塞队列的选取参考博客:java常用的几种线程池比较

2020-10-08 10:55:15 473 1

原创 Java进阶系列:使用Jmeter进行并发测试

本文包括三部分:Mac下安装及启动Jmeter使用Jmeter进行并发测试存在的坑Mac下安装及启动Jmeter安装安装并校验Java,设置环境变量vim ~/.bash_profile下载apache-jmeter-5.0.tgz,并使用tar解压更改JMeter语言为中文参考博客:JMeter在Mac下的安装启动cd ~/tools/apache-jmeter-5.3/binsh jmeter使用Jmeter进行并发测试最基本的就五步:1、创

2020-09-25 00:34:56 389

原创 Redis系列:搭建Redis集群(集群模式)

搭建步骤:1、安装6台单机redis2、在某一台上执行集群命令搭建步骤及脚本:常见中间件安装语句中的Redis安装脚本。集群命令redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 -a 123456注意到最后的-a 输入密码:ljfirst或者你自己的

2020-09-23 14:17:48 399

原创 数据库性能:索引及其优化

研究mysql,主要是因为大批数据的增删改查,而导致的性能问题,因此需要了解一些原理类知识来帮助我们优化操作。本文的逻辑顺序如下:1、mysql底层使用的引擎是以什么样的数据结构来存储数据的,这个直接关系到使用效率。2、在增删改查的过程中,那些操作会引起性能问题?3、这些性能问题,如何解决。1、innodb是如何存储数据的【mysql的数据结构为什么选择b+,它和b树的主要区别】+2、增删改查是否会引起性能问题【新增、删除和修改会引起页分裂和合并】页分裂和合并:InnoDB

2020-09-21 22:30:10 372

原创 Java并发系列:ThreadLocal的用法和坑

本文主要讲解:ThreadLocal的用法多线程竞争同一个变量同一个线程无需显式调用ThreadLocal的原理数据结构set、get 和 remove方法ThreadLocal的问题线程不安全的场景内存溢出问题延伸:强弱虚软引用本文源码地址:E01_ThreadLocal, 欢迎star我的Github正文开始ThreadLocal的用法多线程竞争同一个变量 当我们使用线程池来复用线程的时候,对于同一个变量的竞争使用,一般会导致线程安全问题,因此

2020-09-17 12:12:57 664

原创 Keepalived(VIP)搭建Nginx高可用

在前两篇的基础上,搭建Nginx高可用其实很简单。哨兵加VIP漂移实现Redis集群高可用HAProxy+Keepalived(VIP)搭建Rabbitmq高可用镜像队列主要组件NginxKeepalived搭建流程安装Nginx和Keepalived编写配置文件,注意待修改的参数启动安装Nginx和Keepalived,并测试VIP地址脚本在常见中间件安装语句中找出下列脚本Nginx安装脚本和Keepalived安装脚本:InstallNginx.sh、Install

2020-09-14 10:15:46 648 1

原创 Redis系列:神器Redis的性能及优化探究

计划本周写完。。。分析Redis性能主要考虑两个问题:1、Redis为什么这么快(优化点\color{red}{优化点}优化点)2、Redis怎么用能更快(注意事项\color{red}{注意事项}注意事项)1、分析Redis为什么这么快,我们从以下几方面去分析:网络层和操作系统层内存及数据结构Redis自身做了那些优化阿里及其他云公司又做了那些优化2、分析Redis怎么用能更快,我们从以下几方面去分析:Redis用于缓存防止缓存穿透、缓存击穿、缓存雪崩冷热数据分离网络

2020-09-02 10:04:58 251

原创 异或在笔试题中的超神表现

直接上题目:1、在一组数中,其他每个数都出现了两次,仅有一个数,仅出现一次,找出这个数。2、在一组数中,其他每个数都出现了两次,仅有两个数,仅出现一次,找出这两个数。3、在一组数中,其他每个数都出现了三次,仅有一个数,仅出现一次,找出这个数。你能做出来几道?解题思路:使用异或能极大程度的减小时间复杂度和空间复杂度。第一道题思路:源码:在这里插入代码片第二道题思路:源码:在这里插入代码片第三道题思路:源码:在这里插入代码片...

2020-08-31 22:33:25 1784 2

原创 软件工程在实际项目开发过程中的应用

写作目的本文主要用于记录软件工程理论在实际软件开发过程中的应用,记录开发过程中用到的比较好的工具(工欲善其事,必先利其器)。正文一个优秀的软件工程项目,至少分成如下的开发过程1、需求规划阶段2、开发阶段3、调试阶段4、测试阶段5、投产部署阶段6、运维阶段1、需求规划阶段【1.1、分析需求】使用流程图,泳道图,活动图,用例图,类图等uml类图来分析需求和实现过程,画图工具推荐StarUML、PowerDesign。使用燃尽图和鱼骨图评估人月,并控制项目时间,每次迭代

2020-08-30 00:45:18 2601

原创 记一次蛮有意思的Nginx线上排错

现象给两台服务器配置一台nginx用于负载均衡高可用,但是通过nginx请求数据的时候,发现每次打到第一台的时候,报错,第二台没问题(通过分别反向代理发现哪一台有问题的)。但是,单独去调用每一台服务器的接口,都可以正常拿到数据。排查过程【第一步:看看是不是网络问题】通过在nginx上ping和telnet port看看网络和端口通不通,看一下两台服务和nginx的防火墙是否都开通。结果都是通的。【第二步:查看是否是机器原因】将负载均衡改成单台的反向代理。结果是第一台依旧不可以,

2020-08-26 22:32:42 1581 2

原创 Java进阶系列:锁:Synchronized、Lock、Volatile、CAS、Concurrent包

未完待续。。。探究Java 中的锁,其实主要讨论synchronized、lock、volatile的特性,以及具体到ReentrantLock、ReadWriteLock、CountDownLatch、CAS、AQS等类的用法上。synchronized要从下面四个方面去理解代码表现上锁升级锁在不同系统层面的实现1、代码表现上(1)Synchronized锁对象和同步方法时:只对该对象有效(对象锁:锁this或者锁其他对象);具体见Synchronized方法锁、对象锁、类

2020-08-16 18:12:45 272

原创 Redis系列:搭建Redis集群(哨兵模式)

注意首先我觉得这两篇博客写的比我的比较好:redis(一主两从三哨兵模式搭建)记录采用 redis主从 + 哨兵(sentinel) + vip漂移搭建一套redis高可用集群其实按照步骤就可以搭建出来,但是我测试的时候,一直不成功,需要把sentinel.conf中的等待数据值尽可能的调小,能尽快看出效果目标搭建一款三节点的 Redis 服务集群,满足高可用的要求统一IP:三节点集群对外暴露一个统一的IP地址高可用:主节点宕机,从节点需要很快承担主节点读写分离:主节点允许读

2020-08-12 20:31:55 392

原创 中间件安装过程中的一些坑

1、通用tar解压包的时候出现错误 gzip: stdin: not in gzip format解决办法:不用加z参数参考博客:tar解压包的时候出现错误 gzip: stdin: not in gzip format2、NginxNginx出现403 forbidden解决办法:1、将nginx.config的user改为和启动用户一致:root2、检查是否少了index.html文件,还有配置文件中的root路径是否正确,替换成绝对路径。参考博客:解决Nginx

2020-08-11 11:44:50 362

原创 常见中间件安装语句

内容包括:安装RedisRabbitMQ及集群NginxKeepalivedHAProxy的脚本centos7的repo样本、刷新yum源的语句centos7的repo样本、刷新yum源的语句centos7.repo[base7_7]name=CentOS-7Server - Basebaseurl=http://10.129.9.217/repo/20200701/centos7_7/base7_7enabled=1gpgcheck=0 [updates7_7]na

2020-08-06 20:21:24 468

原创 循序渐进探索HashMap与ConcurrentHashMap

1、什么是HashMap数据结构:HashMap是一个数组加链表的数据结构(链地址法)。使用:加入数据首先经过hash,放入计算出的位置,如果该位置有值,即发生hash冲突,一般hash冲突有四种处理方式:链地址法:该地址存放的是一个链表,直接在链表尾端加入数据即可。开放定址法:顺延下一个不冲突的地址。rehash:使用另一种hash算法建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。2、HashMap如何扩容HashMap里..

2020-08-05 15:27:59 142

原创 可以进行浮点数运算的计算器

实现一个计算器,输入:运算表达式的字符串,输出:计算结果能够进行运算表达式的正确性校验能够计算小数

2020-07-31 11:38:47 3153

原创 背包问题解决公司零食采购(贪心+冒泡+动态)

问题描述公司需要采购零食,那么在有限金额的情况下,如何选择零食种类及每一种的数量,成为了每次都需要考虑的问题,那么有没有一种可以自动生成零食采购清单的程序,来解救公司选择困难症的采购小姐姐。输入:零食名称的数组,以及对应的单价,以及一个零食偏好度的数组,还有总额。输出:在照顾到零食偏好度的情况下,尽可能的花完预算,输出采购的零食种类、采购量及实际花费。源码:零食购买分配输入参数/*** @params foodName 零食名称* @params prices 零食价格* @.

2020-07-21 21:26:00 620 2

中科大C++课件和试卷

这是中科大C++课件和试卷,至于试卷是不是针对你现在学的,我就不多透露了。 这是中科大C++课件和试卷,至于试卷是不是针对你现在学的,我就不多透露了。 这是中科大C++课件和试卷,至于试卷是不是针对你现在学的,我就不多透露了。

2020-03-04

系统分析师历年真题1990—2010.rar

系统分析师历年真题1990—2010; 系统分析师历年真题1990—2010; 系统分析师历年真题1990—2010; 系统分析师历年真题1990—2010; 系统分析师历年真题1990—2010; 系统分析师历年真题1990—2010;

2020-03-04

空空如也

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

TA关注的人

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