- 博客(554)
- 资源 (11)
- 收藏
- 关注
原创 Flask-视图函数
一个视图方法,可以就写一个请求方式,也可以写多个请求方式,也可是单个请求方式,多个请求方式时候,需要判断是GET,还是POSTfrom flask import Flask, requestapp = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def list_project(): if request.method == 'GET': return 'GET所有的项目' elif requ
2021-11-06 11:37:02 1344
原创 Flask-路由(二)
python是解释型语言,是边读代码,边运行哪行,所以容易出现循环导入的问题。在java是编译型语言,是先编译,后运行,一般不出出现这个问题。例如下:d1_route_variable.py,代码从上往下执行,到了第二行的时候导入urls,进入urls模块,urls模块从上往下执行,到第二行的时候导入app,又回到本模块中,然后继续从上往下执行,到第二行的时候导入urls,这样产生了循环导入。from flask import Flask, requestfrom class_05_vie
2021-10-31 13:20:43 196
原创 Flask-路由(一)
wsgi (web server gateway interface)含义 是webserver 和application之间的一个桥梁,pip install flaskwerkzeug(application) jinja2 (渲染html)flash ==》 组装这两个的
2021-10-31 13:20:39 296
原创 Redis缓存淘汰策略
Redis默认内存,1、查看Redis内存大小,通过查看配置文件maxmemory,2、redis默认内存是多少,最大物理内存的四分之三,3、如何修改redis内存设置,修改文件配置,config set maxmemory,config get maxmemory,4、查看 info memoryredis内存淘汰策略,如何淘汰的在下面架构设计之前,有三种不同的淘汰策略,定时删除,对CPU不友好,用处理器性能换取存储空间,CPU比较繁忙惰性删除,数据到达过期时间
2021-10-16 12:23:20 116
原创 集合类在并发情况下如何保证线程安全
在正常单线程的情况下不会出现问题,当多线程的时候,List会出现 java.util.ConcurrentModificationException 这种异常public class ContainerNotSafeDemo { public static void main(String[] args) { /** //第一种写法 List<String> list = Arrays.asList("a","b","c");.
2021-10-16 12:18:15 125
原创 Redis常用类型及使用场景
常用类型一、String1、最常用 set key value 、get key2、同时设置、获取多个键值 MSET key value [key value....] MGET key [key......]3、数值增减 递增数字, INCR key增加指定的整数 INCRBY key increment 递减数值 DECR key减少指定的整数 DECRBY key ...
2021-10-10 10:55:06 136
原创 Spring4和Spring5版本-AOP的顺序区别
@Before 前置通知,在目标方法之前执行@After 后置通知,在目标方法之后执行@AfterReturning 返回通知,执行方法结束前执行(异常不执行)@AfterThrowing 异常通知,出现异常时候执行@Around 环绕通知Spring4 对应在SpringBoot1.X版本内Spring5 对应在SpringBoot2.XAOP的执行顺序不同了@Servicepublic class CalcServiceImpl implement CalcServi
2021-09-25 10:25:55 782
原创 重学Volatile
并发,是多个线程去访问同一个资源;并行,各种事情同时在做。volatile是java虚拟机提供的轻量级的同步机制三大特性,保证可见性,不保证原子性,禁止指令重排序先说下JMM(java内存模型Java Memory Model)本身是一种抽象的概念并不是真实存在的,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:1、线程解锁前,必须把共享变量的值刷新回主内存; 2、线程加锁前,必须读取主内存的最新
2021-08-28 17:54:16 103
原创 HTTPS协议实现的原理
HTTPS协议,相关的概念包括SSL、非对称加密、CA证书先说一下什么是对称加密和非对称加密。双方加密解密都用相同密钥的算法,称为对称加密算法。使用对称加密的缺点,使用对称加密双方都知道密钥和算法。加密解密用的是一个密钥,加密是正向的过程,解密是逆向过程。非对称加密,在非对称加密中,加密和解密用的不是一个密钥,当开发一个网站,我们的用户之间的通信用非对称加密。用户发送请求时,用户用一把钥匙加密数据,服务端用另一把钥匙解密。在这个过程中,服务端拥有的是私钥,用户拥有的是公钥,很多用户可以使用同一个公钥
2021-07-11 09:16:06 306 2
原创 DNS域名解析过程
当我们在浏览器输入一个URL的时候,域名系统(Domain Name System)就开始工作。域名系统是将互联网资源和地址关联起来的一个分布式数据库。DNS和统一资源定位符,域名系统本质就是定位资源,互联网中的各种资源,比如视频、图片、文件、网页。。。。下面就是一个URL的示例:https://www.example.com:8080/test?id=1000#Good【https】Scheme部分是协议,不仅只有https,还有ftp、ssh等,不同的协议代表着不同类型的应用在提供资源。【ww
2021-06-26 20:19:59 274 1
原创 对于IPv4协议,寻址和路由有什么区别呢?
IPv4协议是IP协议的第4个版本,IPv4为传输层提供Host-To-Host,同时IPv4需要底层的数据链路层的支持。IP协议不负责数据的可靠性,传输数据时,数据被切分为一个个数据封包,IP协议上层的传输层协议会对数据进行一层拆分,然后再IP协议会在一次拆分,两次拆分是为了适合底层的设备。数据在网络中传输,不需要建立连接,任由数据在网络中传输,每个节点由路由算法来控制数据选择下一个目的地。IP协议自身不能保证可靠性。例如IP协议可能会遇到以下问题:封包损坏(数据传输过程中被损坏)丢包(数据发送
2021-06-14 22:48:24 495
原创 TCP和UDP对比的优势和劣势
TCP和UDP都是传输层协议。TCP最核心的是提供了可靠性,而UDP核心是灵活性高。HTTP1.0和2.0用的是TCP,到了HTTP3.0用的就是UDP了。UDP应用数据传输、网络控制、音视频、Web技术应用较多。UDP,目标是在传输层提供直接发送报文的能力,Datagram是数据传输的最小单位,UDP协议不会帮助拆分数据,它的目标只有一个,就是发送报文。UDP的报文格式,只有五个部分组成。Source Port是源端口号,因为UDP协议的特性(不需要ACK),因此这个字段是可以省略的,但有时候对
2021-06-05 09:38:44 3481
原创 如何保证TCP的稳定性和流速控制
TCP粘包和拆包中保证顺序的具体算法是TCP滑动窗口算法。TCP作为一个传输层协议,最核心的能力是传输。传输需要保证可靠性,还需要控制流速,这两个核心能力均由滑动窗口提供。滑动窗口数据结构如何保证TCP的稳定性和流速控制如上图所示:深色代表已经收到ACK的段浅色代表发送了,但是还没有收到ACK的段白色代表没有发送的段紫色代表暂时不能发送的段假设一次最多发送5个封包,也就是窗口大小=5,窗口中的数据被同时发送出去,然后等待ACK。如果一个封包ACK到达,就标记为已接收。如何保证TCP的
2021-05-16 20:55:08 328
原创 TCP拆包和粘包的作用是什么
首先我们思考一个问题,应用层的传输一个10M的文件是一次性传输完成,而对于传输层的协议来说,为什么不是一次性传输完成呢。这个有很多原因,比如稳定性,一次发送的数据越多,出错的概率越大。再比如说为了效率,网络中有时候存在并行的路径,拆分数据包就就能更好的利用这些并行的路径。再有,比如发送和接收数据的时候,都存在缓冲区,缓冲区是在内存中开辟的一块空间,目的是缓冲大量的应用频繁的通过网卡收发数据,这个时候,网卡只能一个一个处理应用的请求。当网卡忙不过来的时候,数据就需要排队了。也就是将数据放入缓冲区。如果每个应
2021-05-16 20:46:51 256
原创 TCP协议为什么是3次握手,4次挥手
TCP(Transport Control Protocol)是一个传输层协议,提供Host-To-Host数据的可靠传输,支持全双工是一个连接导向的协议。TCP/IP五层模型应用层传输层网络层数据链路层物理层TCP是在传输层的协议,主要实现主机到主机通信,前提是需要知道主机们的网络地址(IP地址),但是TCP不负责实际地址到地址的传输,因此TCP协议把IP地址给底层的网络层处理。网络层,提供地址到地址的通信,IP协议就是在这一层工作。互联网层解决地址到地址的通信,但是不负责信号在具体两个设
2021-04-24 10:10:20 224
原创 架构技术之分布式数据存储(上)
一、MySQL复制,主从复制MySQL的主从复制,就是将MySQL主数据库中的数据复制到从数据库中去,主要的目的是实现数据库读写分离-写操作访问主数据库,读操作访问从数据库。从而是数据库具有更强大的访问负载力,支撑更多的用户访问。主从复制的原理是当应用程序客户端发送一条更新命令到数据库的时候,数据库会把这条更新命令同步记录到Binglog中,然后由另外一个线程从Binglog中读取这条日志,再通过远程通讯的方式将它复制到从服务器上面,从服务器获得这条更新日志日后,将其加入到自己的Relaylog中,然后
2021-03-28 12:45:35 248 2
原创 架构技术之分布式消息队列
异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型和订阅模型消息队列构建异步调用框架消息的生产者将消息送到消息队列以后,由消息的消费者从消息队列中获取消息,然后进行业务逻辑的处理,消息的生产者和消费者是异步处理的,彼此不会等待阻塞,所以叫做异步架构。一、使用消息队列构建一个异步调用架构,需要3个角色:一是消息的生产者,二是消息队列,三是消息的消费者。消息的生产者是客户端应用程序代码的一部分,用来初始化异步调用处理流程。在消息队列的处理中,生产者职责比
2021-03-28 12:43:03 331
原创 职场中公文、PPT和业务文案如何写
1、公文的写作能力,例如邮件的写作、简历的写作、会议纪要、会议邀请通知、投标书。这些文案的写作通常有特定的格式和话语体系,强调逻辑性,不强调艺术性,写作时中规中矩。对于这类书面表达,一定要精炼简洁、主题明确、逻辑清晰、客观中立。千万不要似是而非、缺乏逻辑,更不要洋洋洒洒、漫无目的、记流水账。2、PPT 写作能力的“魂”——行文逻辑。好的PPT无论是整体还是局部,都是特别注重逻辑性。从整体上,所有的 PPT 页面应该是围绕着一件事情或者一个观点展开的,每一页都是对核心观点的阐释。从局部来说,每一页
2021-03-21 12:08:53 564 2
原创 分布式缓存的路由算法是如何实现的?
所谓分布式对象缓存是指对对象缓存以一个分布式集群的方式对外提供服务,多个应用系统使用同一个分布式对象缓存提供的缓存服务。这里的缓存服务器是由多台服务器组成。这些服务器共同构成了一个集群对外提供服务,所以使用分布式对象缓存一个重要的问题就是,数据进行读写操作的时候,如何找到正确的缓存服务器进行读写操作。如果第一次写入数据的时候写入的是A服务器,但是数据进行缓存读取操作的时候访问的是B服务器,就不能够正确的查找到数据,缓存也就没有效果。那么如何才能找到正确的缓存服务器呢?当需要进行分布式缓存访问的时候,依然
2021-03-21 12:05:00 265
原创 在职场中如何清晰表达、高效沟通
今天说下软技能如何清晰表达、高效沟通。对于做技术的人来说,当然技术是你的核心竞争力,但是也正是对于大家都是做技术,往往都有一个薄弱的环节就是沟通。每天对着电脑,跟着代码打交道,仅仅有限的沟通交流的机会。但是一旦遇到汇报之类的,发表个人见解的时候,你是否能很好的表达出自己的想法呢。这也是大部分做技术人的弱点,但是对于职场,当你走到一定高度的时候,沟通、表达显得尤为重要。所以我们不仅要掌握技术的核心竞争力,还要提高自己的软技能。本次就先说一下如何清晰表达、高效沟通。当我们去参加一些会议的时候,如果细心发现,会
2021-03-14 11:09:55 333
原创 如何成为一名架构师
想必工作多年的研发工程师,有很多都是想成为架构师。但是并不是每一个研发都有机会参与架构设计,很多公司不一定会主动培养你成为架构师。但是我觉得要先掌握架构师的知识体系,然后通过实践进行校验,自己把自己培养成一名架构师。架构师需要具备的能力模型,需要那几部分组成呢1、基础技术架构,这部分是纯技术架构,所有非功能性的技术都是基础技术的范畴。2、业务架构,在业务场景下对业务需求的抽象。3、开发技能,这是架构师落地架构的能力。在一个开发需求过程中,会经历需求分析、架构设计、架构选型、架构落地这四个阶段。对架
2021-03-06 18:53:11 952 2
原创 架构师的视角进行全链路系统性能的优化
一、前端优化前端的优化主要有三个环节:减少请求次数、页面静态化、边缘计算减少请求次数:减少前端脚本与后端服务的请求次数,有三种方案(1)增加缓存控制:前端开发经常设置HTML的缓存控制头部(Cache-Control头),这样浏览器在请求同一个文件的时候,只访问本地保存的资源副本,从而加速文件的访问速度。(2)减少图像的请求次数:大部分网站会将所用到的多张图片拼成一张,这样多张图片只需要下载一次,然后再通过CSS中的background-image和background-position来定位目标位
2021-03-02 23:09:44 483
原创 架构师的视角分析系统性能指标
架构师视角也就是从系统的全链路视角,来分析系统性能指标一、一次请求全链路图步骤一:DNS解析,,用户在浏览器输入URL按回车,请求会进行DNS查找,浏览器通过DNS解析查到域名映射的IP地址,查找成功后,浏览器会和该IP地址建立连接。对应的性能指标为:DNS解析时间。对于这个指标,我们可以通过DNS缓存或DNS预解析,适当增大域名的TTL值来增大DNS服务器缓存域名的时间,进而提升了缓存的命中率。也可以用dns-prefetch标签实现域名的预解析,让浏览器在后台把要用的DNS请求提前解析,当用户访问
2021-03-02 23:04:03 449
原创 SpringBoot整合WebSocket,及注入Bean的方式
最近用到WebSocket协议,所以需要SpringBoot整合WebSocket。首先说下WebSocket协议,它是双向的,在客户端-服务器通信的场景中使用的全双协议,与HTTP不同,它以ws://开头,它是一个有状态协议,意味着客户端和服务器之间的连接保持活动状态,直到被任何一方终止。在客户端和服务器中的任何一方关闭连接后,连接将两端终止。SpringBoot整合WebSocket1、添加maven依赖<dependency> <groupId>
2021-02-28 21:29:42 4694 7
原创 MySQL事务隔离级别、什么是脏读、不可重复读和幻读以及如何解决
MySQL 的事务隔离级别(Isolation Level),是指:当多个线程操作数据库时,数据库要负责隔离操作,来保证各个线程在获取数据时的准确性。它分为四个不同的层次,按隔离水平高低排序,读未提交 < 读已提交 < 可重复度 < 串行化。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210218232452633.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,s...
2021-02-20 23:13:54 1624
原创 设计一个秒杀系统架构
对于秒杀架构的设计,需要遵循以下个原则:东西不能超卖、下单成功的订单数据不能丢失、服务器和数据库不能挂尽量不让机器人抢走整体的思路秒杀架构的设计方案就是一个不断过滤请求的过程,从系统架构层面来说,秒杀系统的分层思路如下。秒杀系统的架构设计目标就是尽可能把上层的用户请求处理掉。下面我们通过业务的流程来设计秒杀的架构一、浏览页面对于PC网站,首先必选前后端分离,然后静态资源放到CDN上。例如我们平时访问的请求是https://static.xxx.jpg。我们可以将这个staticxxx
2021-01-31 14:56:38 260 1
原创 一次完整的 RPC 流程
一次完整的 RPC 流程因为 RPC 是远程调用,首先会涉及网络通信, 又因为 RPC 用于业务系统之间的数据交互,要保证数据传输的可靠性,所以它一般默认采用 TCP 来实现网络数据传输。网络传输的数据必须是二进制数据,可是在 RPC 框架中,调用方请求的出入参数都是对象,对象不能直接在网络中传输,所以需要提前把对象转成可传输的二进制数据,转换算法还要可逆,这个过程就叫“序列化”和“反序列化”。另外,在网络传输中,RPC 不会把请求参数的所有二进制数据一起发送到服务提供方机器上,而是拆分成好几个数据包
2021-01-31 11:30:13 4332
原创 MQ的作用及如何解决消息队列的丢失、重复和积压问题
引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。系统解耦:用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如京豆服务的系统需求无论如何变化,交易服务不用做任何改变,即使当京豆服务出现故障,主交易流程也可以将京豆服务降级,实现交易服务和京豆服务的解耦,做到了系统的高可用。流量控制:遇到秒杀等流量突增的场景,通过 MQ 还可以实现流量的“削峰填谷”的作用,可以根据下游的处理能力自动调节流量。不过引入 MQ 虽然实现了系统解耦
2021-01-31 11:00:51 1027
原创 安全测试-安装 sqli-labs 靶场及Sql注入原理、手动、自动注入、检测及防御
安装 sqli-labs 靶场sqli-labs 是一款用于学习 SQL 注入的靶场平台,覆盖了各种类型的 SQL 注入,题目共 75 道,按难度划分为 4 页。sqli-labs 靶场的项目开源地址为https://github.com/Audi-1/sqli-labs。我们通过docker来进行安装搜索 sqli-labs 镜像docker search sqli-labs然后拉取镜像:docker pull acgpiano/sqli-labs在容器中运行 sqli-labs:doc
2021-01-30 09:23:25 1216
原创 MySQL的索引数据结构、索引优化及使用原则
一、 B+Tree 相比于其他索引数据结构(如 B-Tree、二叉树,以及 Hash 表)的优势;二、掌握实际工作中常用的建立高效索引的技巧(如前缀索引、建立覆盖索引等)。三、索引使用原则一、MySQL从数据结构的角度来看, MySQL 常见索引有 B+Tree 索引、HASH 索引、Full-Text 索引。 MySQL 常见的存储引擎 InnoDB、MyISAM 和 Memory 。在实际应用中,InnoDB 是 MySQL 建表时默认的存储引擎,B+Tree 索引类型也是 MySQL 存储引擎
2021-01-30 09:22:18 183
原创 GC-Roots、对象间的引用级别、分代垃圾回收
一、GC-Roots对象主要是在堆上分配的,我们可以把它想象成一个池子,对象不停地创建,后台的垃圾回收进程不断地清理不再使用的对象。当内存回收的速度,赶不上对象创建的速度,这个对象池子就会产生溢出,也就是我们常说的 OOM。把不再使用的对象及时地从堆空间清理出去,是避免 OOM 有效的方法。那 JVM 是如何判断哪些对象应该被清理,哪些对象需要被继续使用呢?这里首先强调一个概念,这对理解垃圾回收的过程非常有帮助垃圾回收,并不是找到不再使用的对象,然后将这些对象清除掉。它的过程正好相反,JVM 会找到
2021-01-24 21:08:09 333
原创 2020年总结
时光飞逝,转眼的时间又到了2021年,记得也是去年这个时候写下了,2019年的总结,主要是对测试和开发的一些技术栈的总结,还附有两个xmind图片。今年对以往的过去做一次总结,在2020年这一年中,还是一如既往的坚持博客的编写,今年总共输出了44篇博客,并且在四月份的时候,申请成为CSDN博客专家,同时也感谢这么多年来CSDN对我的认可,总体来说这一年博客的数量不如前些年多了,但是在这个平台上结交了很多技术牛人,博客牛人,让我了解自己的不足,不断的取长补短。在前两天的时候也报名参加了CSDN2020年博客之
2021-01-01 11:20:33 204 3
原创 如何让自律成为习惯
相信很多人都有这种感受,经常会在年初给自己定一些目标,可以每当年底复盘的时候,总是有很多目标没有实现。或者每当周末的时候,想我要看什么什么书,可是到周日晚上要睡觉了,才发现定下的目标没有实现。其实这是很多人都容易犯的毛病。我们是从事IT行业的,这个行业的特点就是要不断的学习,所以就要养成自律的习惯。这样才会使自己学到的更多。今天看到一个短视频讲的自律,把它总结如下,如果大家感兴趣可以一起尝试下,养成自律的习惯。然后不断的提升自我。1、警惕快感陷阱反向诈骗——它骗你你也骗它,这个它指的是大脑当你想要做不
2020-12-28 23:07:33 310 2
原创 Vue项目-新建页面和新建路由
我们只建四个页面,在Views文件夹下新建四个以下四个页面BlogDetail.vue(博客详情页)BlogEdit.vue(编辑博客)Blogs.vue(博客列表)Login.vue(登录页面)然后在页面中加div标签<template><div> detail</div></template>接下来在在路由中心配置:router/index.jsimport Vue from 'vue'import VueRouter fr
2020-12-22 00:02:34 2829
原创 Idea创建SpringBoot项目
一、选择SpringInitializr点击Next二、修改Name、Group名称,选择jdk版本8,点击下一步。三、选择SpringBoot版本,勾选SpringBoot DevTools 热加载重启插件、Lombook简化代码插件和MysqlDriver,点击Next四、点击完成。五、删除掉生成的项目中无用的mvn文件,修改pom文件中SpringBoot版本。...
2020-12-16 23:14:56 139
原创 可视化工具Grafana:简介及安装
一、下载安装1、下载官网下载地址:Grafana根据自己的系统版本和配置,下载对应的包,官方提供了如下说明,可直接按照说明进行下载:
2020-11-27 22:17:54 363
原创 tomcat优化配置项
jvm内存配置优化,GC垃圾回收优化1、jvm内存参数调整,提高tomcat性能2、GC策略jvm垃圾回收性能主要指标:吞吐量:工作时间(排除gc时间)占总时间的百分比,工作时间并不仅是程序运行的时间,还包含内存分配时间暂停时间:测试时间段内,由垃圾回收导致的应用程序停止响应次数/时间。垃圾收集器类型GC参数配置我们可以在测试的时候,将jvm参数调整之后,将gc的信息打印出来,便于为我们进行参数调整提供依据,具体参数如下:2、tomcat配置...
2020-10-24 12:01:02 261
原创 质量是设计出来的
协同方角色我在第 10 课时“流程规范篇:高速迭代的研发过程需要怎样的规范?”中有提到,产品研发是为业务服务的。业务流程分为 3 个阶段:产品研发阶段、日常运营/运维阶段、售后服务阶段。这三个阶段涉及许多部门角色的协作,包含但不限于产品经理、研发人员、质量保障人员、客服人员、SRE、业务运营人员、法务人员、商务人员、财务人员等。下面将对在业务流程中与质量保障人员打交道最多的角色及职责进行讲解。(1)PM: 产品经理通常来说,需求分为业务需求和技术需求,业务需求由产品经理负责,技术需求由研发人员负
2020-10-18 17:57:34 1681
chromedriver.exe V2.3
2017-09-11
深入理解java虚拟机
2017-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人