自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 布谷鸟过滤器

缓存穿透缓存穿透是指请求了缓存和数据库中都没有的数据,频繁请求这类数据,那么数据库就要频繁响应这种不必要的查询,会导致数据库压力过大。那么如何将这些请求阻挡在外呢?主要有两个思路:1.从缓存和数据库中都取不到得数据,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如两分钟2.使用过滤器布隆过滤器布隆过滤器(Bloom Filter)大概的思路就是,当你请求的信息来的时候,先检查一下你查询的数据我这有没有,有的话将请求压给数据库,没有的话直接返回,是如何做到的呢?

2021-09-18 17:09:15 695

原创 go本地缓存bigcache

缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去。常见类型包括LFU、LRU、ARC、FIFO、LFU(Least Frequently Used ,最不经常使用算法):这个缓存算法使用一个计数器来记录条目被访问的频率。通过使用LFU缓存算法,最低访问数的条目首先被移除。这个方法并不经常使用,因为它无法对一个拥有最初高访问率之后长时间没有被访问的条目缓存负责。LRU (Least recently used,最近最少使用算法)是一种常用的淘汰算法,选择最近最久未使用的数据予以淘汰。

2021-08-17 16:41:34 2558

原创 令牌桶算法实现限流

试想这样的场景, 尽管服务器的 QPS 已经达到限速阈值了, 但是并不想将所有的流量都拒之门外, 仍然让部分流量能够正常通过限流器. 这样我们的服务器在面对突发流量时能够有一定的伸缩空间, 而不是一直处于不可用状态。在开发高并发的系统时,有很多手段来保护系统,如缓存、降级和限流等。缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响。限流的目的通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务(定向到错误页或告知资源没有了)、排队等待(如秒杀、评论、下单等)、降级(直接返回

2021-05-19 19:19:04 4649 2

转载 Go中的命名规范

1.命名规范1.1 Go是一门区分大小写的语言。命名规则涉及变量、常量、全局函数、结构、接口、方法等的命名。 Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写字母开头。当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Analysize,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);命名如果以小写字母开头,则对包外是不可见的,但

2021-03-26 16:30:44 988

原创 Go为什么天生支持高并发

goroutine+channel

2021-02-14 10:59:48 4886 2

原创 常见排序算法总结

排序分类根据时间复杂度的不同,常见的排序算法可以分为三大类:时间复杂度为O(n^2)的算法冒泡排序、选择排序、插入排序、希尔排序等。时间复杂读为O(nlogn)的算法快速排序、归并排序、堆排序等。时间复杂度为O(n)的排序算法计数排序、桶排序、基数排序等。以下将挑选三种较为经典的算法进行介绍。冒泡排序冒泡排序是一种基础的交换排序,是稳定排序类型。package main.java;import java.util.Arrays;public class Sort {

2021-02-13 19:36:10 213 2

原创 解决高并发项目下的热点问题

1.什么是热点点表示我们在系统的业务路径上有一个地方存在性能的瓶颈,比如数据库,件系统,网络,甚至于内存等,这个点一般有io,锁等问题构成。热表示其被访问的频率很高。就是说一个被访问频率很高的io或锁自然而然就造成了我们系统业务路径上的性能瓶颈。这样的热点问题会影响系统稳定性和性能瓶颈,例如支付系统中的热点账户进出款,电商系统中的热点商品参与秒杀,金融系统中的热点理财产品抢购等,都会因为热点问题而影响系统性能。2.热点问题有哪些其次我们需要弄清楚我们的热点问题是属于读热点问题还是写热点问题,

2021-02-08 00:34:03 1282

原创 java异常中throw和throws的区别

throws用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。用在方法声明后面,跟的是异常类名可以跟多个异常类名,用逗号隔开表示抛出异常,由该方法的调用者来处理throws表示出现异常的一种可能性,并不一定会发生这些异常public class ThrowsDemo { public static void main(String args[]) throws Exception{ intArray0 = new int [3];;

2021-01-10 22:00:33 496

原创 并发控制--乐观锁&悲观锁

锁分为三大类:乐观锁、悲观锁、自旋锁乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS 操作实现的,CAS 是一种更新的原子操作,比较当前值跟传入值是否一样,一样则更新,否则失败悲观锁:悲观锁是就是悲观思想,即认为写多

2020-12-27 16:01:57 752 2

原创 django开发的性能优化

在使用django在web项目开发中避免不了会进行性能优化,最近特意总结了一些我用到过的性能优化方法。都是实际开发过程中非常有用的技巧,希望能够对大家有所帮助。1.性能分析工具cprofilefrom cProfile import Profileimport pstatsprof = Profile()prof.enable()# 运行函数run_func()prof.create_stats()p = pstats.Stats(prof)p.print_callees()运

2020-12-19 00:03:17 691 2

原创 linux查找并删除文件

find . -iname “*swp” -print0 | xargs -0 rm

2020-11-27 20:57:58 397

原创 git配置免密push和解决冲突

免密登录通过创建文件存储用户名和密码打开HOMEHOMEHOME目录,如果你不知道在哪,那么可以使用git bash 输入echo $HOME查看这个路径,一般都在C:\Users\administrator下面,注意cmd下面这个命令是查看不到的。然后使用命令创建一个文件名为.git-credentials,在Windows中是不允许直接创建“.”开头的文件。输入以下命令:touch .git-credentials vim .git-credentials https://{usernam

2020-11-22 23:41:58 429

原创 java注解--框架设计的第二灵魂

定义我们常见注解有@Override和@Deprecated,注解也成为元数据,注解是用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。通俗的讲:代码中注释是给人看的,而注解是给编译器看的。spring注解开发Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。原始注解Spring原始注解主要是替代的配置...

2020-11-03 23:19:34 398 2

原创 权限管理功能实现

权限说明场景:不同的用户具有不同的权限,如只有vip用户可以享受高速下载服务,只有svip用户才可以享受极速下载服务。思路:为用户添加角色,通过为角色添加权限从而达到权限控制的目的。数据表构建代码实现model模型类:from datetime import datetimefrom django.db import modelsfrom django.contrib.auth.models import AbstractUserclass UserProfile(Abstract

2020-10-11 23:13:32 1267 1

原创 jwt方式进行登录验证

一般Web应用开发验证用户信息有两种方式,一是使用session,二是使用token。为什么要用TokenToken无需存储降低服务器成本,session是将用户信息存储在服务器中的,当用户量增大时服务器的压力也会随着增大。防御CSRF跨站伪造请求攻击,session是基于cookie进行用户识别的, cookie如果被截获,用户信息就容易泄露。扩展性强,session需要存储无法共享,当搭建了多个服务器时其他服务器无法获取到session中的验证数据用户无法验证成功。而Token可以实现服务器间

2020-09-21 23:42:38 1149 1

原创 第三方微信登录功能实现

登录流程首先到微信开放平台查看网站应用开发登录微信的api文档,梳理出第三方微信登录的流程如下:发送第三方登录请求重定向到微信认证服务器发送登录信息并校验(携带 appid,redirect_uri,status)重定向到redirect_uri,返回code发送code请求access_token校验code,返回access_token用access_token获取用户信息实现在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应

2020-09-20 23:47:37 2943

原创 ElasticSearch和whoosh实现项目中搜索功能

单表搜索单表搜索:实现对于特定表中的某些字段的模糊搜索匹配,这样的搜索一般是比较容易实现的。比如需要根据关键字搜索教师表中的授课教师的信息,django项目可以通过Q方法和contains来实现。# 根据搜索词search_data查询结果Teacher.objects.filter(Q(name__contains=search_data) | Q(course__contains=search_data))全局搜索全局搜索的实现主要提供如下两种方式...

2020-08-27 23:59:01 1323 1

原创 java反射--框架设计的灵魂

反射定义通俗的讲,将类的各个组成部分封装为其他对象,这就是反射机制作用 1. 可以在程序运行过程中,操作这些对象。 2. 可以解耦,提高程序的可扩展性。原理先来了解下java代码在计算机中运行的几个阶段:对应上面的三个阶段,获取Class对象的方式有下面三种:1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 * 多用于配置文件,将类名定义在配置文件中。读取文件,加载类2. 类名.class:通过类名的属性class获取 * 多用于参数的传

2020-08-19 00:29:17 13322 33

原创 栈内存和堆内存

堆和栈在Java中,栈(stack)是由编译器自动分配和释放的一块内存区域,主要用于存放一些基本类型(如int、float等)的变量、指令代码、常量及对象句柄(也就是对象的引用地址)。堆(heap)是一个程序运行动态分配的内存区域,在Java中,构建对象时所需要的内存从堆中分配。这些对象通过new指令“显式”建立,这种分配方式类似于数据结构中的链表。堆内存在使用完毕后,是由垃圾回收(Garbage Collection,GC)器“隐式”回收的。举个栗子:动态声明一个数组arr int[] arr

2020-08-10 21:19:37 1245 1

原创 使用canal实现数据实时同步

canal在实现缓存和数据库数据一致性的时候,我们会用到延时双删等同步策略,但是在删除缓存失败时,会再次出现缓存和数据库不一致的问题。为了应对删除缓存失败的情况,可以通过回溯数据库日志文件,提供一个保障的重试机制即可。流程如下图所示:(1)更新数据库数据(2)数据库会将操作信息写入binlog日志当中(3)订阅程序提取出所需要的数据以及key(4)另起一段非业务代码,获得该信息(5)尝试删除缓存操作,发现删除失败(6)将这些信息发送至消息队列(7)重新从消息队列中获得该数据,重试操作。

2020-08-05 22:11:56 6161

原创 python、go和java中的垃圾回收机制

常见的 GC 算法。分别是:引用计数法、Mark-Sweep法、三色标记法、分代收集法。引用计数标记-清除分代回收Go三色标记法(1.5版本之后)三色标记法是传统 Mark-Sweep (标记清除法)的一个改进,它是一个并发的 GC 算法。首先创建三个集合:白、灰、黑。将所有对象放入白色集合中。然后从根节点开始遍历所有对象(注意这里并不递归遍历),把遍历到的对象从白色集合放入灰色集合。之后遍历灰色集合,将灰色对象引用的对象从白色集合放入灰色集合,之后将此灰色对象放入黑色集合重复 4 直

2020-07-29 22:26:02 1052

原创 uwsgi+nginx在服务器上部署django项目

环境配置此项目部署采用uwsgi+nginx+djagno,首先先确保python、mysql、redis、nginx等都已在服务器安装完毕,具体安装步骤就不再详细说明。安装虚拟环境pip install virtualenv新建虚拟环境mkvirtualenv xxx进入虚拟环境workon xxx然后将requirements.txt文件上传到服务器之后运行:pip install -r requirements.txt # 安装依赖包安装uwsgipi

2020-07-12 21:41:43 319 2

原创 这道列表面试题你确定你会吗

题目如下:A = [[1, 2, 4]]B = A * 3B[1].insert(2, 3)print(B)我以为的答案:[[1,2,3],[1,2,3,4],[1,2,3]]实际上的答案:[[1,2,3,4],[1,2,3,4],[1,2,3,4]]为什么呢在python中,如果一个列表A乘以一个数字n就会得到一个新的列表B,这个列表B的元素是A中的元素重复了n次如上题A*3 得到的B为:B=[[1,2,3],[1,2,3],[1,2,3]]打印列表B内部的元素,发现id

2020-06-18 23:08:25 221

原创 还在抱怨python很慢吗?这些方法让你起飞

咋就慢了?Python作为一种高级编程语言,例如is、in、not等关键词的使用,已经十分接近自然语言。这种编程语法帮助它快速坐稳了科学计算、机器学习领域的头把交椅,但也蒙上了效率低下的阴影。这种效率低下在日常的使用中并没有很强的感受,但在大量复杂计算中,相较于其他语言,劣势明显。下面举个栗子!1.测试内容:求0~N之间质数个数,具体求以下整数区间质数(素数)个数,N分别取1w, 4w, 10w, 20w和50w。 测试的语言包括C、Java、Nodejs、Golang和Python,均使用当前最新

2020-06-09 22:01:39 448

原创 Echarts框架的基本使用

最近做项目用到了ECharts 绘制图表,记录下学习过程。奈何我一个后端最近因为项目需求,干了挺多前端的工作,说不定后面就逐渐变成全栈了,哈哈哈。好像跑题了,回到正题~当前ECharts已经到了4.X版本,推荐直接使用最新版本,官方的文档和说明已经相当完善,下边简单说下学习过程中会用到的页面。了解ECharts 特性ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视

2020-05-09 22:42:46 677 1

原创 React进阶就靠这个了

React简介(1)用来构建UI的 JavaScript库(2)React 不是一个 MVC 框架,仅仅是视图(V)层的库核心概念:虚拟DOM(Virtual DOM)Diff算法(虚拟DOM的加速器,提升React性能的法宝)React官网React中文文档特点使用 JSX语法 创建组件,实现组件化开发,为函数式的 UI 编程方式打开了大门性能高的让人称赞:通过 dif...

2020-04-26 22:49:15 274

原创 python和golang的对比

特点1.Python①解释型语言  程序不需要在运行前编译,在运行程序的时候才翻译,专门的解释器负责在每个语句执行的时候解释程序代码。这样解释型语言每执行一次就要翻译一次,运行效率相对较低。②动态数据类型   支持重载运算符,也支持泛型设计。(运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。泛型设计就是定义的时候不需要指定类型,在客户端使用的时候再去指...

2020-03-14 12:35:01 1347

转载 关于分库分表最全的一篇文章

这里介绍设计分库分表框架时应该考虑的设计要点,并给出相应的解决方案。一、整体的切分方式简单来说,数据的切分就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)中,以达到分散单台设备负载的效果,即分库分表。 数据的切分根据其切分规则的类型,可以分为如下两种切分模式。 垂直(纵向)切分:把单一的表拆分成多个表,并分散到不同的数据库(主...

2020-02-29 13:48:20 225

原创 Mysql语句优化的一些总结

Mysql语句优化1、比如 select id from t where num is null 这样的 sql 也是可以的。但是最好不要给数据库留 NULL,尽可能的使用 NOT NULL 填充数据库。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了,不管是否插入值(NULL 也包含在内),都是占用 100 个字符的空间的,如果是 varchar 这样的...

2020-02-26 21:18:53 257 1

原创 python实现单列模式

什么是单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。实现单例模式因为创建对象时__new__方法执行,并且必须return 返回实例化出来的对象所cls.__instance是否存在,不存在的话就创建对象,存在的话就返回该对象,来保证只有一个实例对象存在(单列),打印ID,...

2020-02-10 22:48:51 453

转载 数据库优化的八种方法

https://www.cnblogs.com/liliuguang/p/11015964.html

2020-02-09 12:36:18 177

转载 Sentry异常捕获平台

Sentry 是一个开源的实时错误追踪系统,可以帮助开发者实时监控并修复异常问题。它主要专注于持续集成、提高效率并且提升用户体验。Sentry 分为服务端和客户端 SDK,前者可以直接使用它家提供的在线服务,也可以本地自行搭建;后者提供了对多种主流语言和框架的支持,包括 React、Angular、Node、Django、RoR、PHP、Laravel、Android、.NET、JAVA 等。同时...

2020-02-07 13:21:42 583

原创 AttributeError: 'AutoSchema' object has no attribute 'get_link'

AttributeError: ‘AutoSchema’ object has no attribute ‘get_link’restframework版本在3.10以上的需要指定默认schema.所以需要在settings.py中添加如下代码REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.cor...

2020-02-03 10:45:00 603

原创 git常用命令和常见问题的解决方法整理

初始化仓库:git init添加远程仓库到本地:git remote add origin https://gitee.com/xxx.git新建并切换到本地dev分支git checkout -b dev 本地分支与远程分支相关联git pull origin dev常见问题及解决:warning: LF will be replaced by CRLF inwind...

2020-02-02 23:24:57 248

原创 drf中的各种view,viewset详解

drf中的各种view,viewsetDjango REST framework里有各种各样的view,其中的继承关系需要梳理,得好好捋一捋这关系。视图的作用Django用“视图”这个概念封装处理用户请求并返回响应的逻辑。视图是一个可调用对象,它不仅可以是基于函数,也可以是基于类的。相比较与函数,基于类的视图有一些区别和优势:组织与特定HTTP方法相关的代码(GET,POST等) ...

2020-02-01 16:00:21 2018

原创 动态规划解决0-1背包问题

问题描述:有3个物品,它们有各自的重量和价值是A[3, 8],B[2, 5],C[5, 12],现有给定容量5的背包,如何让背包里装入的物品具有最大的价值总和?总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现;代码实现#使用动态规划求解0-1背包...

2020-01-31 13:58:21 224

原创 动态规划解决投资问题

问题描述假设有4个工厂,投入总计60万元,如何分配各工厂的资金数,使得总的利润最大。各工厂跟据投资数额获得的投资回报的表格如下:解题思路:老大让老二去统计给老二[10,60]后,老二的最大收益,然后根据老二所能获得的最大利润和自己对比,便能得到总最大利润。而老二则延续老大的做法,老二让老三去统计给老三[10,60]后老三能取得的最大利润,然后根据老三所能获得的最大利润和自己相加对比,便...

2020-01-28 20:58:34 1832

原创 回溯法解决八皇后问题

问题:在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且指出各种不同的放法。思路:使用回溯法依次假设皇后的位置,当第一个皇后确定后,寻找下一行的皇后位置,当满足左上、右上和正上方向无皇后,即矩阵中对应位置都为0,则可以确定皇后位置,依次判断下一行的皇后位置。当到达第8行时,说明八个皇后安置完毕。回溯法实现...

2020-01-22 22:50:07 322

原创 递归实现汉洛塔

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。当搬运的碟子数n=1时,直接搬运即可;(就是递归的基例)当n大于1时:要把n个碟子从针1搬运到针3...

2020-01-22 21:22:43 367

原创 Http压测工具wrk的安装和使用

最近在进行项目压力测试的时候,试了下wrk感觉不错,写下这份使用指南给自己备忘用。安装wrk支持大多数类UNIX系统,不支持windows。安装wrk非常简单,只要从github上下载wrk源码,在项目路径下执行make命令即可。git clone https://github.com/wg/wrkmakemake之后,会在项目路径下生成可执行文件wrk,随后就可以用其进行HTTP压...

2020-01-20 00:00:19 501

空空如也

空空如也

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

TA关注的人

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