自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

More than coding

分享编程的快乐

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 海量数据的非精确去重利器——从HyperLogLog到布谷鸟过滤器

背景非精确:牺牲一定准确度换取空间效率和时间效率。统计网站的UV(独立访客数):当用户数量非常多时,比如几千万甚至上亿,那么使用普通的哈希表去重将会占用可怕的巨大内存空间。引用吴军博士的《数学之美》中所言,这是因为哈希表的空间效率不够高,哈希表的存储效率一般只有50%。如果用哈希表存储一亿个userId,每个userId对应 8bytes,那么一个id就需要占用16bytes。因此一亿个userId占用1.6GB,如果存储几十亿个userId则需要上百GB的内存。而内存又是非常宝贵的资源,单单为了统计

2022-01-04 14:13:49 1110

原创 Redis对象系统及数据结构 笔记

key-value实现Redis并不是直接通过基本的数据结构来实现键值对数据库的,而是基于这些数据结构实现了一个对象系统,包括了字符串对象、集合对象、哈希对象、有序集合、列表对象。每当我们在数据库中添加一个键值对时,会至少新建两个对象:键值对的键是一个对象,该对象总是为字符串对象键值对的值是一个对象,可以任意的基本数据结构。对象的结构如下:内存回收Redis使用了引用计数法来对对象进行回收。创建一个对象时,计数置为1当对象被使用时,计数会加一当对象不被使用时,计数会减一当对象的

2021-09-04 20:14:09 266

原创 MySQL中相关的树对比分析

B树每个节点都保存数据叶子节点之间没有指针相连B+树非叶子节点上不保存数据,只存主键和指针数据只保存在叶子节点的data域上叶子节点之间有指针相连B树与B+树总结:B树的树内存储数据,因此查询单条数据的时候,B树的查询效率不固定,最好的情况是O(1)。我们可以认为在做单一数据查询的时候,使用B树平均性能更好。但是,由于B树中各节点之间没有指针相邻,因此B树不适合做一些数据遍历操作(如JOIN操作,需要从一个表中取数据,到另一个表中逐行匹配)。B+树的数据只出现在叶子节点上,

2021-03-06 10:14:41 358

原创 类加载与类加载器 学习笔记

class文件的生命周期有:加载-验证-准备-解析-初始化-使用-卸载。其中验证、准备、解析称为连接阶段。接下来了解类文件加载的过程:加载、验证、准备、解析和初始化。加载在此阶段,JVM需要完成三件事:通过类的全限定名获得类的二进制字节流。我们可以从多个途径来获取class的二进制字节流,如zip压缩包读取:这是日后JAR、WAR格式的基础。运行时计算生成:动态代理技术,可以为特定接口生成代理类的二进制字节流。由其他文件生成,如JSP应用。从加密文件读取,可以防止class文件被反编译

2021-03-01 22:57:28 157

原创 图解AbstractQueuedSynchronizer(AQS)实现原理:独占锁篇 笔记

前言

2021-02-24 11:54:58 132

原创 Java线程中断学习笔记

中断:代表线程的一种状态,值为true或false。默认为false,代表没有被中断。// Thread 类中的实例方法,持有线程实例引用即可检测线程中断状态public boolean isInterrupted() {}// Thread 中的静态方法,检测调用这个方法的线程是否已经中断// 注意:这个方法返回中断状态的同时,会将此线程的中断状态重置为 false// 所以,如果我们连续调用两次这个方法的话,第二次的返回值肯定就是 false 了public static boolean

2021-02-22 15:15:21 84

原创 CLH自旋锁的简易实现

前言我们知道,当一个线程想要申请的锁已经被其他线程持有时,那么该线程需要等待其释放锁。等待的方式有两种:一种是将线程状态置为等待状态(非RUNNABLE),另一种就是自旋了。自旋就是不断检测该锁是否被释放,而不是将线程挂起或休眠。这两种方式适用于不同的场景。当线程持有锁的时间较长时(一般情况下,也可以理解为,临界区代码较长),适合使用将线程挂起或休眠的方式,因为自旋太久会消耗大量CPU计算资源;当线程持有锁的时间较短时,适合自旋等待的方式,因为线程被挂起或休眠后需要被唤醒,而频繁的唤醒与挂起线程会导致大

2021-02-18 14:56:19 225

原创 JDK1.8 ConcurrentHashMap之源码分析笔记

前言JDK1.8 的ConcurrentHashMap相较于JDK1.7 的做了比较大的改动,取消了分段锁的设计。JDK8改成了Node数组+链表/红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。同时使用了CAS和synchronized锁来保证线程安全,synchronized锁的粒度为桶中的头节点(链表Node结点或包装红黑树的TreeBin结点)。(JDK1.7 的ConcurrentHashMap分析见此篇文章)

2021-02-14 14:01:26 199

原创 手撕LFU算法

LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。LFU 算法相当于是淘汰访问频次最低的数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。把数据按照访问频次进行排序,而且频次还会不断变化,这也是其相较于LRU更难的原因。其实他们逻辑都是固定的,问题在于如何写出高效优雅的代码。我们为get/put这两种操作设计时间复杂度为.

2021-02-04 18:58:23 416

原创 手撕LRU算法

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最久未使用的页面予以淘汰。LRU是一种缓存淘汰策略,它认为最近使用的数据就是有用的,最久没使用的数据就是没用的,所以在当容量满了之后,会先淘汰掉最久没使用的数据,腾出空间来放新数据。LeetCode的146题就要求我们设计这样一个类,要求我们在O(1)时间复杂度内完成。根据LRU的定义,我们总结出LRU的操作规则:在使用数据(get/put)后,那么该数据就是最近使用的。当容量满了之后,要删.

2021-02-04 11:07:20 386

原创 通用解法团灭LeetCode股票买卖问题

本文受labuladong-团灭 LeetCode 股票买卖影响,在其基础上增加了自己的阐述,方便理解在LeetCode上有这么6道买卖股票的问题,如果你单独去看每道题的题解,可能会觉得这好像是不同的6道题,而且有的解法很精巧,不可能在短时间内想到。其实这6道题都是同一道题(买卖股票的最佳时机 IV)的变种,如果这道题我们会了,那么就可以一举把这6题都拿下。那么接下来我们来看看如何解这道“始祖”题。这里要注意:一笔交易是指从买入股票到卖出的整个过程。我们先来看一下为什么这道题能用动态规划求解.

2021-02-02 16:58:49 448

原创 JDK1.7 ConcurrentHashMap学习笔记

为何用ConcurrentHashMap在并发编程里,HashMap是线程不安全的,如果使用HashMap的话,那么可能会造成死循环,原因是HashMap里的Entry链表在多线程操作下,会变成循环链表,那么一旦get的话,那么next节点永远不为空,就会出现死循环了。而HashTable的操作效率又过低,因为它是使用synchronized对整个HashTable加锁,所有线程都是在竞争同一把锁。当一个线程访问HashTable的同步方法,其他线程如果也访问它的同步方法时会陷入阻塞或轮询状态。如一个线

2021-01-29 11:45:36 213 2

原创 LinkedList容器学习笔记

简介LinkedList是个实现了List接口和Deque接口的双端链表。具有以下特性:支持高效的插入和删除操作,定位到节点后直接插入/删除即可,无需像ArrayList移动大量元素实现了Deque接口,同时具有双向队列的特性线程不安全,如需线程安全,使用静态类Collections类中的synchronizedList方法查找元素需要遍历,效率较低内部结构分析LinkedList内部有以下3个字段,first指向链表头部,last指向链表尾部,size表示链表的长度。 trans

2021-01-24 15:06:16 120

原创 HashMap容器学习笔记

简介HashMap是用来存储键值对的集合,实现了Map接口。它是根据键的hashCode来存储数据,键的存放是无序的,即遍历顺序是不确定的。线程不安全,多线程操作可能出现死循环。多线程场景下建议使用ConcurrentHashMap。最多允许一个键为null,允许多个值为null。底层数据结构JDK1.8之前,HashMap是由 数组+链表 实现的,是一个链表数组。链表是为了解决哈希冲突而存在的(“拉链法”),如果遇到哈希冲突,则把数据插入到链表的头部(“头插法”)。JDK1.8之后,Ha

2021-01-23 10:38:47 153

原创 ArrayList容器学习笔记

简介ArrayList:底层是数组队列,相当于动态数组,它的容量能动态扩充。在添加大量元素之前,使用ensureCapacity方法来提前扩大ArrayList的容量,可减少重新分配内存的次数和复制数组时的开销。继承自AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable。RandomAccess:标志接口,表示支持快速随机访问,在ArrayList中我们可以用元素索引来快速访问对象。Cloneable:覆盖clone方法,

2021-01-20 13:04:50 120

原创 LeetCode 416.分割等和子集 【超详细解答】

LeetCode 416.分割等和子集1. 问题描述2. 解法分析2.1 状态和选择2.2 dp数组的定义2.3 状态转移的逻辑2.4 处理边界情况2.5 初步代码3. 状态压缩/代码优化1. 问题描述这是一道经典的0-1背包问题变种,但是更简单一些。首先我们回顾一下背包问题:给你N个物品和一个可装载重量为W的背包,每个物品有重量和价值两个属性。其中第i个物品的重量为wt[i],价值为val[i],现在让你用这个背包装物品,能装的最大价值是多少?那么我们这道题如何转换成上述的背包问题呢?N

2021-01-16 16:14:18 903

原创 LeonSans动态字体 微信小程序组件

Leon Sans是由Jongmin Kim在2019年开发的一款动态字体,这款字体有许多有趣酷炫的效果。我将其封装成了微信小程序组件,方便大家使用~目前封装了四种字体,GitHub 项目地址 https://github.com/starkZH/LeonSans-WxAppComponent体验可扫码以下小程序码体验快速上手下载components和utils,然后复制至你的项目的根目录下在页面配置的json文件中引入自定义组件,如下:{ "usingComponents"

2020-07-27 23:01:11 1083 3

原创 Chrome扩展-页面注入layer组件

layer是一个方便且功能强大的页面提示组件,最近

2020-05-23 17:05:58 1724

原创 NodeJS环境下使用axios上传文件

最近有个需求,需要在nodejs后端上传图片到云存储服务器,刚好对axios这个库比较熟悉,因此便开始在网上查资料,但是网上大多的都是用axios在前端上传文件的代码,即是基于浏览器环境的。后来找到了基于Nodejs环境的axios上传代码,一番copy后便开始了测试,本以为会一帆风顺,没想到服务器那边却总是返回如下错误,也就是说我们的请求并没有以multipart/form-data的形式封装好...

2020-03-15 00:02:58 6342 1

原创 Request method 'PUT'/ 'POST' not supported 之可能的一个原因

我一直遇到下面这个错误,在网上查了很多原因,在服务器上测试也没问题,但在本地就一直报错。没想到是因为我没有为项目设置application context,设置好就能正常访问了。。Request method 'PUT'/ 'POST' not supported...

2020-02-02 20:48:21 1923

原创 Spring Boot 多环境yml等文件配置切换

在实际的开发过程中,我们需要将应用程序在不同环境下进行部署,而一般每个环境的配置文件都不同,如果采用手工方式来修改配置文件的话,效率低且易出错。因此我们将通过maven来实现配置文件的自动切换一、切分配置文件1.1创建每个环境所对应的配置文件我们可以将不同环境的公共部分放在application.yml里,然后再新建application-dev.yml,application...

2019-09-08 22:20:19 2872

原创 关于mycat连接数据库时出现的Got an error reading communication packets问题

最近在使用mycat去做数据库的读写分离,当配置完成启动mycat后,却一直连接不上我本地的mysql,总是出现下面的错误。Got an error reading communication packets我在网上查了好久,没有一种方案能解决我的问题。后来我就想会不会是mysql的版本问题,我用的是mysql 5.7,到网上一查发现mysql 5.7貌似有挺多问题的,我就重装成mys...

2019-04-25 13:28:23 3088

原创 ngrok配置ssl证书实现https内网穿透

最近在服务器上搭建ngrok服务时,使用了自签的ssl证书,发现无法通过https访问,提示证书无效。但在阿里云申请的免费证书又只能签一个域名,没法同时签根域名和子域名,这样会导致客户端连不上。因此,Let's Encrypt出场了。(本文适合对已经搭建过ngrok服务的读者,木有搭建过的请先按照其他博文搭建后再来观看~)什么是Let's EncryptLet's Encrypt...

2019-03-19 10:55:24 9331 1

原创 Data truncation: Truncated incorrect DOUBLE value

我的trigger在执行delete语句时(update语句也一样),出现了 Data truncation: Truncated incorrect DOUBLE value错误,原语句如下: delete from message where fromUser=old.fromUser and object_id=old.moment_id ;后来经过排查和网上的一些启示发现,当比...

2019-02-03 13:15:02 53310

原创 基于spring boot使用swagger2为Jersey构建api文档

Jersey 框架是一个比较常用的开源的RESTful框架,。相比spring mvc来说,Jersey实现了JAX-RS 标准,并且在编写rest api时,代码看起来更加直观。当我们写好接口后,通常是自己写一份api文档,但这样做随着时间的推移以及业务复杂性的增加,文档会变得越来越难维护,工作量也越来越大。为了解决这些问题,swagger2出现了,它可以很轻松的集成到spring boo...

2019-01-27 10:31:22 3234 4

原创 spring boot通过stomp协议实现通信功能

一、stomp协议简介STOMP是简单(或流式)文本定向消息传递协议。STOMP提供可互操作的有线格式,以便STOMP客户端可以与任何STOMP消息代理进行通信,从而在多种语言,平台和代理之间提供简单而广泛的消息传递互操作性。二、在spring boot开发基于stomp的通信功能1、在pom.xml中添加依赖 <dependencies> &lt...

2019-01-24 20:28:15 5490 3

原创 spring boot thymeleaf页面500问题

Error resolving template "stomp", template might not exist or might not be accessible by any of the 我在按照网上的教程去使用thymeleaf时,总是报以上错误,但我的html文件明明存在,而且在配置文件里也都有配置,controller返回的视图名称也没错,但一访问模板就总是报500错误,...

2019-01-21 14:44:54 5358 3

原创 一种鼠标手势识别的方案

其实鼠标手势识别在实际中好像并没有太多应用场景,比较常见的就是浏览器的手势操作,不过感觉这个也比较鸡肋,如果和硬件结合起来会好一些。我是由于一个小项目的需要,所以动手做鼠标手势识别这个东西,本来想在网上找一下看有没有相关文章,奈何很多根本都看不懂。。所以我就自己构思要如何实现,后来我就想到了一种比较简单的方法,经过测试,识别率是挺高的,应该可以>90%。先上个图:从实际效果来看,...

2018-12-26 09:44:52 2241

原创 微信小程序之画布绘制并管理多张图片

在微信小程序的画布绘制多张图片,很简单,只需要调用drawImage就可以,但是如果要做一个图片编辑的小程序,肯定要对绘制上去的图片、文字等等进行操作,比如移动一下,旋转一下或者缩放等等。但普通的画布并没有对象记忆功能,它最终输出的只是一张图片,因此我们需要自己编写代码去保存绘制的对象,今天就跟大家简单说一下具体怎么实现。大家可以先看一下最终效果,可以对每个对象进行删除及旋转缩放操作。一、...

2018-12-19 20:37:09 6365 10

原创 微信小程序画布开发小记

最近圣诞节就要到了,于是想为我的小程序添加个圣诞帽生成的功能,可以为你的头像选择圣诞帽,然后生成图片到本地。看下效果图,有兴趣的小伙伴也可以扫小程序码体验一下在开发这个功能的过程中,遇到了一些小问题,就在这里记录一下吧。一、canvas加载图片问题在canvas里无法直接加载网络图片,只能使用本地的。所以需要使用 wx.getImageInfo 来把网络图片缓存到本地,然后才能使用...

2018-12-15 19:15:22 878 3

原创 记spring boot配置redis 项目启动时的一个奇怪的错误

在刚开始学redis时,我照着网上的教程,把redis和jedis整合到spring boot,整合完毕后,启动项目总是失败,总是爆出下面的错误:【Correct the classpath of your application so that it contains a single, compatible version of org.springframework.data.reposit...

2018-11-22 20:36:58 16561 9

原创 Jersey 实践:构建RESTful服务及解决跨域问题

最近在准备为我的小程序做个后台,刚好之前在网上了解了RESTful这种设计风格,觉得很简单轻量,便准备采用这种设计方式。有很多框架都能支持RESTful的设计,在一番权衡之后,决定选择jersey框架,因为我的小程序的并发量并不大,而且自己对于spring也还不太熟悉,而jersey框架写起来很简单,开发比较快。接下来便来讲解如何用jersey完整的构建RESTful服务。开发所使用IDE:...

2018-09-16 17:23:39 4183 2

原创 微信小程序开发笔记(一)

最近在把之前写的上传组件改写成自定义组件,以供多个页面使用,在改写的过程中遇到了一些问题,在此记录下。【一】误入死循环。原来是我在properties里的observer里setData的时候不小心也把当前属性也加进去了,造成死循环,使堆栈溢出了,整个控制台直接崩了。。以后要小心。。【二】这个是很基础的知识。。只能说我js还学不好,,原来 [ ]!=[ ] //true最后感谢...

2018-09-12 10:10:49 196

原创 Httpclient 以multipart/form-data形式post上传文件及提交参数

在大学里由于要做某些英语听力作业,是在PC客户端上的,而做完提交后显示的答案又没办法复制,再重新填写的话答案就消失了,所以懒得去记,好在答案图片并不复杂,便想做一个可以识别出图片中的英文的小软件。因为我自己并没有做OCR的经验,于是我就到网上找可以在线识别文字的网站,找着找着找到了一个不错的网站,识别速度很快,还是免费的,因此开始下手。首先例行f12,打开调试窗口,然而没有发现请求参数,而是看到了...

2018-04-06 14:24:53 57881 1

原创 电脑课脱离老师控制

你是否曾为上电脑课时电脑被老师控制无法自主操作而烦恼?哈哈,现在你解脱了,我有四个方法,两个绝对有用的方法,呵呵,快来看看怎么脱离控制吧!1!绝对有用的方法  -----杀手锏:第一个最暴力的且永久的方法就是 : 拔掉主机后面那根类似电话线的网线(有的会发光 或 闪烁,比较容易发现网线并拔掉),缺点就是无法接收老师的文件且无法上交作业什么的,反正

2016-01-10 11:36:44 20599

原创 java打造手机远程控制电脑之详细教程

大家好!今天给大家说说怎么简单地用手机去控制手机,这里用到了tomcat+js+app inventor,其实也不是那么复杂,代码都很简单。先来看看效果图:http://img.blog.csdn.net/20160109124431043http://img.blog.csdn.net/20160109124459568http://img.blog.csdn.net/2016010

2016-01-09 12:35:31 3091 1

全国高校坐标(腾讯地图经纬度) .txt

全国高校坐标(腾讯地图经纬度) .txt

2019-08-01

空空如也

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

TA关注的人

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