
技术_编程语言
文章平均质量分 85
csdn_yuan88
这个作者很懒,什么都没留下…
展开
-
高并发之缓存
Web缓存是用于临时存储(缓存)Web文档(如HTML页面和图像),以减少服务器延迟的一种信息技术。Web缓存系统会保存下通过这套系统的文档的副本;如果满足某些条件,则可以由缓存满足后续请求。缓存的作用减少网络带宽消耗:当Web缓存副本被使用时,只会产生极小的网络流量,可以有效的降低运营成本。降低服务器压力:给网络资源设定有效期之后,用户可以重复使用本地的缓存,减少对源服务器的请求,间接降低服务器的压力。同时,搜索引擎的爬虫机器人也能根据过期机制降低爬取的频率,也能有效降低服务器的压力。减少网络..原创 2022-04-04 14:07:12 · 3066 阅读 · 0 评论 -
高并发之降级
由于爆炸性的流量冲击,对一些服务进行有策略的放弃,以此缓解系统压力,保证目前主要业务的正常运行。它主要是针对非正常情况下的应急服务措施:当此时一些业务服务无法执行时,给出一个统一的返回结果。降级服务的特征原因:整体负荷超出整体负载承受能力。目的:保证重要或基本服务正常运行,非重要服务延迟使用或暂停使用大小:降低服务粒度,要考虑整体模块粒度的大小,将粒度控制在合适的范围内可控性:在服务粒度大小的基础上增加服务的可控性,后台服务开关的功能是一项必要配置(单机可配置文件,其他可领用数据库和缓存)..原创 2022-04-04 14:05:54 · 1622 阅读 · 0 评论 -
高并发之限流
原文:高并发之限流高并发系统设计的三利器:缓存、限流、降级,三利器简述缓存缓存比较好理解,在大型高并发系统中,如果没有缓存数据库将分分钟被爆,系统也会瞬间瘫痪。使用缓存不单单能够提升系统访问速度、提高并发访问量,也是保护数据库、保护系统的有效方式。大型网站一般主要是“读”,缓存的使用很容易被想到。在大型“写”系统中,缓存也常常扮演者非常重要的角色。比如累积一些数据批量写入,内存里面的缓存队列(生产消费),以及HBase写数据的机制等等也都是通过缓存提升系统的吞吐量或者实现系统的保护措施。甚至消息中间原创 2021-03-14 18:33:37 · 223 阅读 · 0 评论 -
读书_w3c架构师01通用设计与方法论
原文:读书_w3c架构师01通用设计与方法论读书_w3c架构师架构 秒杀系统优化思路基本思路(1)将请求尽量拦截在系统上游(不要让锁冲突落到数据库上去)(2)充分利用缓存,秒杀买票,这是一个典型的读多写少的应用场景,大部分请求是车次查询第一层,客户端怎么优化(浏览器层,APP层)(a)产品层面,用户点击“查询”或者“购票”后,按钮置灰,禁止用户重复提交请求;(b)JS层面,限制用户在x秒之内只能提交一次请求;第二层,站点层面的请求拦截怎么拦截?怎么防止程序员写for循环调原创 2021-03-14 18:23:53 · 277 阅读 · 2 评论 -
[转]正则表达式中re.match、re.search、re.findall的用法和区别
正则表达式中re.match、re.search、re.findall的用法和区别re.match 用法re.match语法:re.match(pattern,string,flags=0)pattern:表示正则表达式string:要匹配的字符flags:控制匹配的方式**re.match匹配方式:**从字符起始位置匹配,若起始位置匹配不成功返回none。即只匹配起始位置import re string='www.baidu.com'pattern1='w...转载 2021-01-31 22:04:16 · 483 阅读 · 0 评论 -
[转]微服务轮子项目(27) -MySQL 主从复制、主从切换、主主复制
文章目录 1. 主从复制 1.1 主库安装 1.1.1 创建配置文件 1.1.2 启动主库 1.1.3 主库创建用于同步的账号 1.2 从库安装 1.2.1 创建配置文件 1.2.2 启动从库 1.2.3 关联主库 1.2.4 启动并查看slave 1.2.5 创建从库的普通用户 1.3 主库查看同步信息 2. 主从切换 2.1 对主库进行锁表...转载 2021-01-29 16:39:27 · 332 阅读 · 0 评论 -
[转]从根上理解高性能、高并发:深入计算机底层,理解线程与线程池
系列《从根上理解高性能、高并发(一):深入计算机底层,理解线程与线程池》 《从根上理解高性能、高并发(二):深入操作系统,理解I/O与零拷贝技术》 《从根上理解高性能、高并发(三):深入操作系统,彻底理解I/O多路复用》 《从根上理解高性能、高并发(四):深入操作系统,彻底理解同步与异步》 《从根上理解高性能、高并发(五):深入操作系统,理解高并发中的协程》(* 本文) 《从根上理解高性能、高并发(六):通俗易懂,高性能服务器到底是如何实现的》前言作为即时通讯技术的开发者来说,高性能、高转载 2021-01-28 19:34:32 · 294 阅读 · 0 评论 -
linux_负载分析之LoadAverage
原创:linux_负载分析之LoadAverage平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数。和 CPU 使用率并没有直接的关系一般的进程需要消耗 CPU、内存、磁盘I/O、网络I/O等资源,在这种情况下,平均负载就不是单独指的CPU使用情况。即内存、磁盘、网络等因素也可以影响系统的平均负载值。不过影响最大的是 CPU 使用率、CPU 等待和磁盘I/O。他不仅包扩了正在使用CPU的进程,还包括等待 CPU 和等待磁盘I/O的进程。查看load average# cat /原创 2021-01-27 08:20:59 · 3922 阅读 · 0 评论 -
软件_手把手教vscode配置c++,python开发环境
原创:软件_手把手教vscode配置c++,python开发环境之前主用Python作为项目开发语言,将项目迁移到arm边缘盒子上后发现arm的cpu不给力,软件速度低于预期,所以计划将部分程序改为c++实现。于是乎,复习了c和c++的一些知识,毕竟十多年未用了(上次用还是本科读书时)。未来一段时间可能将c++作为主力研发语言,之前上学那会使用的codeBlocks貌似也不怎么火了,最近风头正盛的时vscode,打算用vscode进行研发。首先,vscode只能看做加强版的文本编辑器,不能看做IDE。原创 2021-01-26 22:02:48 · 883 阅读 · 0 评论 -
[转]关于Linux下时间片分配给进程还是线程的问题
原文地址:https://www.zhihu.com/question/64723752/answer/223613245在Linux系统中,对于用户创建的进程(线程)来说,CPU分配时间片的单位是线程还是进程?是线程。线程是实际工作的单元[1],进程只是一个容器,用来管理一个或多个线程。1.这是不是就意味着尽量使用多线程并发,这样可以抢到更多的时间片。理论上是的,多线程的一种用途就是能同时做好几件事情,以提高效率。但实际问题是,CPU的数量(核心数,下同)是有限的,而且并不多。如果你的.转载 2021-01-26 15:54:34 · 380 阅读 · 0 评论 -
[转]Django REST framework 简介与中文教程
Django REST framework 简介与中文教程简介在序列化与反序列化时,虽然操作的数据不尽相同,但是执行的过程却是相似的,也就是说这部分代码是可以复用简化编写的。 在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复用简化编写的: 增:校验请求数据–>执行反序列化过程–>保存数据库–>将保存的对象序列化并返回; 删:判断要删除的数据是否存在–>执行数据库删除 改...转载 2021-01-13 15:22:46 · 1013 阅读 · 0 评论 -
[转]为什么mysql默认隔离级别设置为可重复读
一般的DBMS系统,默认都会使用读提交(Read-Comitted,RC)作为默认隔离级别,如Oracle、SQLServer等,而MySQL却使用可重复读(Read-Repeatable,RR)。要知道,越高的隔离级别,能解决的数据一致性问题越多,理论上性能损耗更大,可并发性越低。隔离级别依次为>:串行化 > RR > RC >读未提交在SQL标准中,前三种隔离级别分别解决了幻象读、不可重复读和脏读的问题。那么,为什么MySQL使用可重复读作为默认隔离级别呢?...转载 2021-01-01 00:29:02 · 349 阅读 · 0 评论 -
[转]char数组赋值
c语言易错点定义一个数组char a[10];怎么给这个数组赋值呢?1、定义的时候直接用字符串赋值char a[10]=“hello”;注意:不能先定义再给它赋值,如char a[10]; a[10]=“hello”;这样是错误的!2、对数组中字符逐个赋值char a[10]={‘h’,‘e’,‘l’,‘l’,‘o’};3、利用strcpychar a[10]; strcpy(a, “hello”);易错情况:1、char a[10]; a[10]=“hello”;//一个字...转载 2020-12-31 15:27:15 · 999 阅读 · 1 评论 -
[转]C/C++语言中值传递、指针传递和引用传递
在C/C++语言中值传递、指针传递和引用传递(C++ only)这三种函数参数传递方式是比较基本的知识,用的比较普遍,但不仔细分析其实质的话,时间长容易记混了。网上的资料也较多但多数都不系统,本文力求用最白话的表达和简单的示例把这三种方式描述清楚。没时间看分析的直接看简述就可以了。简述值传递就是最普通的传递方式,比如函数定义为fun(int a),在调用的地方有int x=6, 使用fun(x)就可以了。这种方式在fun(int a)函数内部的对a的修改 不能 导致外部x的变化...转载 2020-12-31 15:16:10 · 203 阅读 · 0 评论 -
[转](转载+整理)超详细的cmake教程
cmake教程参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和测试 定制安装规则 为工程添加测试 支持gdb 添加环境检查 添加版本 生成安装包 将其他平台的项目迁移到 CMake 其他参考超详细的cmake教程 camke...转载 2020-12-19 14:45:03 · 460 阅读 · 1 评论 -
[转]Linux下VSCode常用的快捷键
写在最前面最近(?)装了linux,于是开始捣鼓vscode的常用快捷键,顺便翻译了一些,给大家参考。Ctrl+Shift+N 新窗口Ctrl+W 关闭窗口Ctrl+K Ctrl+S 显示快捷键Ctrl+X 剪切/没有选择时默认剪切一行Ctrl+C 复制/没有选择时默认复制一行Alt+ ↓ / ↑ 把当前行上移/下移一行Ctrl+Shift+K 删除一行Ctrl+Enter 在当前行的下方插入一空行(在某行中间时可以用)Ctrl+Shift+Enter 在当前行的上方插入一空行(在某行中转载 2020-12-16 19:53:43 · 2709 阅读 · 1 评论 -
[转] python中的高效迭代器函数
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~首先还是要先import一下:#import itertoolsfrom itertools import * #最好使用时用上面那个,不过下面的是为了演示比较 常用的,所以就直接全部导入了一.无限迭代器:由于这些都是无限迭代器,因此使用的时候都要设置终止条...转载 2020-12-16 18:55:54 · 226 阅读 · 0 评论 -
[转]MySQL实现over partition by(分组后对组内数据排序)
前言开发中遇到了这样一个需求:统计商品库存,产品ID + 子产品名称都相同时,可以确定是同一款商品。当商品来自不同的渠道时,我们要统计每个渠道中最大的那一个。如果在Oracle中可以通过分析函数 OVER(PARTITION BY… ORDER BY…)来实现。在MySQL中应该怎么来实现呢。现在通过两种简单的方式来实现这一需求。数据准备/*Table structure for table `product_stock` */CREATE TABLE `produc...转载 2020-12-05 14:58:13 · 4341 阅读 · 2 评论 -
[转]cookie、sesstion、localstorage、sesstionstorage的使用和区别
文章目录 基本概念 cookie详解 1、服务端写入cookie 2、客户端查看cookie 3、前端JS获取cookie sesstion详解 1,服务端生成sesstion。 2,客户端查看sesstionId localStorage的使用 sesstionStorage 基本概念cookie,是在客户端(浏览器)存储少量数据的地方,通常用于存储用户数据。在客户端和服务端进行交互的时候,...转载 2020-12-05 14:51:10 · 468 阅读 · 0 评论 -
[转]Google的60款开源项目
1.机器学习系统 TensorFlow详情:https://github.com/tensorflow/tensorflow2.material-design-icons详情:http://google.github.io/material-design-icons/3.前端开发工具组 MDL详情:https://github.com/google/material-design-lite4.Web 前端框架 Angular详情:https://github.com/angular/an...转载 2020-11-23 13:40:10 · 1658 阅读 · 0 评论 -
[转][进阶]-Python3 异步编程详解
目录1 什么是异步编程1.1 阻塞1.2 非阻塞1.3 同步1.4 异步1.5 并发1.6 并行1.7 概念总结1.8 异步编程1.9 异步之难(nán)2 苦心异步为哪般2.1 CPU的时间观2.2 面临的问题2.3 解决方案3 异步I/O进化之路3.1 同步阻塞方式3.2 改进方式:多进程3.3 继续改进:多线程3.4 非阻塞方式3.5 非阻塞改进3.5.1 epoll3.5.2 回调(Callback)3.5.转载 2020-11-13 09:28:02 · 683 阅读 · 0 评论 -
[转]CMake 生成makefile 步骤
1、首先创建一个目录下的makefile//main.cpp#include<iostream>using namespace std;int main(){ cout<<"Hello word!"<<endl; return 0;}在main文件所在的目录创建CMakeLists.txt//CMakeLists.txtPROJECT(main)CMAKE_MINIMUM_REQUIRED(VERSION 2.8)AUX_SOURCE_DIRECT转载 2020-11-13 09:11:03 · 3896 阅读 · 0 评论 -
关于代码调试de那些事
写代码最完美的就是, 想清楚, 码, 运行, perfect, DONE, 下班.当然, 那是完美的状态. 大多数时候只存在于理想中.现实是, 我们会被各种坑, 被环境坑, 被语言坑, 被依赖坑, 被第三方库坑, 被编辑器坑, 被自己坑(三个月前的自己/昨天的自己/几分钟前的自己), 被数据库坑, 被缓存坑, 被队友坑(这个比较惨), 被需求变更坑(这个也是)……所以, 总是避免不了代码调试.今天顺带过了下<<想计算机科学家一样思考Python>>, 里面每一章最后都转载 2020-10-28 08:22:53 · 1288 阅读 · 0 评论 -
[转]itertools --- 为高效循环而创建迭代器的函数
本模块实现一系列iterator,这些迭代器受到APL,Haskell和SML的启发。为了适用于Python,它们都被重新写过。本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯Python中有可能创建简洁又高效的专用工具。例如,SML有一个制表工具:tabulate(f),它可产生一个序列f(0),f(1),...。在Python中可以组合map()和count()实现:map(f,count())。这...转载 2020-09-06 19:21:37 · 190 阅读 · 0 评论 -
强大的可视化利器 Chrome Trace Viewer 使用详解
最近研究了下 Chrome 自带的 Trace Viewer,发现功能还挺强大的,用来做 Performance Profile,Timeline Tracing 等很方便,但官方的使用文档比较晦涩,资料也比较匮乏和分散,就专门整理了下。注:Trace Viewer 其实可以脱离chrome://tracing在线使用,具体操作后面会讲到Trace Viewer 介绍Trace-Viewer is the javascript frontend for Chromeabout:t...转载 2020-09-02 07:51:17 · 18644 阅读 · 9 评论 -
Python Type Hint类型注解
原文地址:https://realpython.com/python-type-checking/在本指南中,你将了解Python类型检查。传统上,Python解释器以灵活但隐式的方式处理类型。Python的最新版本允许你指定可由不同工具使用的显式类型提示,以帮助您更有效地开发代码。通过本教程,你将学到以下内容:类型注解和提示(Type annotations and type hints) 代码里添加静态类型 静态类型检查 运行时强制类型一致这是一个全面的指南,将涵盖很多领域。如果您只转载 2020-09-02 07:16:06 · 1101 阅读 · 0 评论 -
[转]关于Python里的类型注解
我们知道 Python 是一种动态语言,在声明一个变量时我们不需要显式地声明它的类型,例如下面的例子:a=2print('1+a=',1+a)print('1+a=',1+a)运行结果:1+a=3这里我们首先声明了一个变量 a,并将其赋值为了 2,然后将最后的结果打印出来,程序输出来了正确的结果。但在这个过程中,我们没有声明它到底是什么类型。但如果这时候我们将 a 变成一个字符串类型,结果会是怎样的呢?改写如下:a='2'pri...转载 2020-09-02 07:14:03 · 364 阅读 · 0 评论 -
[转]Pytest 基础教程
文章目录第一部分:快速入门 一、快速入门 1. 安装 Pytest 2. 第一个测试函数 3. 运行测试函数 4. 测试失败 第二部分:测试函数 一、断言 二、捕获异常 三、标记函数 1.Pytest 查找测试策略 2. 标记测试函数 四、跳过测试 五、预见错误 六、 参数化 第三部分:固件 一、 什么是固件 二、预处理和后处理 三、作用域 四、自动执行 五、重命名 六、参数化 七...转载 2020-08-23 22:28:45 · 341 阅读 · 0 评论 -
[转]浅析GPU计算——cuda编程
在《浅析GPU计算——CPU和GPU的选择》一文中,我们分析了在遇到什么瓶颈时需要考虑使用GPU去进行计算。本文将结合cuda编程来讲解实际应用例子。(转载请指明出于breaksoftware的csdn博客) 之前我们讲解过,CPU是整个计算机的核心,它的主要工作是负责调度各种资源,包括其自身的计算资源以及GPU的计算计算资源。比如一个浮点数相乘逻辑,理论上我们可以让其在CPU上执行,也可以在GPU上执行。那这段逻辑到底是在哪个器件上执行的呢?cuda将决定权交给了程序员,...转载 2020-08-23 22:28:12 · 389 阅读 · 0 评论 -
[转]Cuda笔记【1】GPU计算DEMO
声明本文是看小破站某cuda入门教程留下来的笔记,多上PPT上内容,夹杂一点自己的理解,和代码注释 教程地址:https://www.bilibili.com/video/av74148375 git地址(PPT和源码):https://github.com/huiscliu/tutorials 主要目的是为Gstreamer打点基础,不然基本抓瞎文章目录 声明 介绍 什么是GPU计算 为什么要使用GPU计算 CPU与GPU分工与协作 GPU计算架构...转载 2020-08-23 22:27:41 · 829 阅读 · 0 评论 -
openCVPracticalExercise学习笔记04
原创:openCVPracticalExercise学习笔记0430使用OpenCV实现图像孔洞填充31使用OpenCV将一个三角形仿射变换到另一个三角形 1234567891011 # Given a pair of triangles, find the affine transform.warpMat = cv2.getAffineTransform( np.float32(tri1Cropped), np.float32(tri.原创 2020-08-23 22:24:24 · 264 阅读 · 0 评论 -
openCVPracticalExercise学习笔记03
原创:openCVPracticalExercise学习笔记0320使用OpenCV实现基于增强相关系数最大化的图像对齐(略)21使用OpenCV的Eigenface如何计算如何计算EigenFaces要计算EigenFaces,我们需要使用以下步骤:1)获取面部图像数据集:我们需要一组包含不同类型面部的面部图像。在这篇文章中,我们使用了来自CelebA的约200张图片。CelebA数据集见:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html2原创 2020-08-23 22:23:53 · 242 阅读 · 1 评论 -
django进阶07用户模块与权限系统
原创:django进阶07用户模块与权限系统Django默认提供了用户权限管理模块auth, 123 user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_user. 该表继承自Abstractuser. group表,定义用户组模型,该表只包含一个name字段和一个permissions(权限)多对多关系字段,在数据库中被命名为auth_group. Permission, 权限表,提供表级别的权限控制,可以检查用.原创 2020-08-23 22:23:21 · 632 阅读 · 0 评论 -
django进阶06数据库事务
原创:django进阶06数据库事务锁1.1:乐观锁:概念:同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景。实现方式:读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段是否和第一次读取一致。如果一致,更新数据,否则不更新,重新读取后再提交。1.2:悲观锁:概念:当一条数据正在被修改时,不允许其他任何关于这条数据的操作。实现方式:读取一个字段之后,加锁,不允许其他任何读、写操作。执行处理逻辑,更新数据完毕后,释放锁。1.3:二者比较:乐观锁的开销远低于悲观锁原因原创 2020-08-23 22:22:34 · 224 阅读 · 0 评论 -
django进阶05中间件
原创:django进阶05中间件django进阶05中间件什么是中间件django的中间件(middleware)是一个轻量级的插件系统,在django中的请求和响应中,可以利用中间件干预视图的请求和响应。如何启用中间件若要启用中间件组件,请将其添加到 Django 配置文件settings.py的 MIDDLEWARE 配置项列表中。五大钩子函数传统方式自定义中间件其实就是在编写五大钩子函数: 12345 process_r.原创 2020-08-23 22:21:58 · 196 阅读 · 0 评论 -
python进阶22再识单例模式
原创:python进阶22再识单例模式父子进程内部变量是否可以直接共享,当然不是,需要“特殊加工”下才行。那么在web开发中的单例模式,是真正的全局唯一的单例么?自然也是否惭愧,自己用单例还是比较多的,还真是第一次注意到这一点。之前使用时,想当然的以为就是(应用程序级别)全局唯一的,譬如java的类里的static,python模块中的定义的对象(只会加载一次),但严格说,都是错误的用法(侥幸的是,尚未出现由此导致的Bug,大概率因为自己用单例大多是为了保存静态内容(只查,不改),加速查询而已。并未原创 2020-08-23 22:21:11 · 180 阅读 · 0 评论 -
python标准库学习笔记
原创:python标准库学习笔记数据结构bisect 模块里实现了一个向列表插入元素时也会顺便排序的算法。struct — 二进制数据结构:用途:在 Python 基本数据类型和二进制数据之间进行转换。heapq – 堆排序算法:heapq 实现了适用于 Python 列表对象的最小堆排序算法。queue — 线程安全的 FIFO 队列:提供线程安全的 FIFO 实现,LIFO Queue (后进先出型队列),Priority Queue (优先队列)weakref — 实现对象的弱引用;用原创 2020-08-09 19:30:46 · 214 阅读 · 0 评论 -
python为list实现find方法
原创:python为list实现find方法string类型的话可用find方法去查找字符串位置: 1 a_list.find('a') 如果找到则返回第一个匹配的位置,如果没找到则返回-1,而如果通过index方法去查找的话,没找到的话会报错。如果我们希望在list中也使用find呢?方法1,独立函数法 1234567 def list_find(item_list, find_item..原创 2020-08-09 19:30:11 · 11110 阅读 · 0 评论 -
python阅读wtfbook疑问和验证
原创:python阅读wtfbook疑问和验证What the f*ck Python! :https://github.com/leisurelicht/wtfpython-cnDeep down, we’re all the same./本质上,我们都一样. 12 class WTF: pass Output: 12345678 >>> WTF() == WTF..原创 2020-08-09 19:29:34 · 1983 阅读 · 0 评论 -
python中的return的返回与执行
转载 author:headsen chen date:2018-03-21 15:12:09notice:created by headsen chen himself and not allowed to copy ,or you count law questions. 1,打印函数名和打印函数的执行过程的区别: &nb转载 2020-07-29 08:04:58 · 620 阅读 · 0 评论