- 博客(75)
- 资源 (14)
- 收藏
- 关注
原创 面向对象六大原则
面向对象6大原则宗旨:高内聚,低耦合,最大限度复用代码,降低后续软件维护成本。单一职责原则(Single Responsibility Principle)明确每个类的功能角色定位,界定好职责边界。一款成功的软件犹如一个紧密协调的团队,每个团队成员各司其职,分工明确。专业的事情交给专业的人去做,这是面向对象单一职责原则的最好体现。这样的好处是,软件的每个功能都能够内聚起来,形成专一性,为后续功能升级或者Bug链路追踪定位提供便捷性。职责边界划分是一门艺术,在现实生活中,每个对象都与外界存在千丝万缕的
2021-08-21 18:13:32
370
原创 百钱买百蛋算法
百钱买白蛋算法我国古代有一数学书,记载着一道算术题“百钱买白蛋”。题目意是:鸭蛋一个三文钱,鹅蛋一个六文钱,鸡蛋一文钱三个,百钱买白蛋,各得几何。对于这种题目,可以考虑使用不定式方程组求解,可是只能列两个方程,却有三个未知数,显然没法求解,只能另寻它法。#设鹅蛋、鸭蛋、鸡蛋各买x只、y只、z只,于是有:x + y + z = 100 6x + 3y + 1/3z = 100#两个方程,三个未知数,无解对于这个问题,同宗族的一位退休教师老爷爷做了不少研究,同时结合同乡几位资深教师的经验,整
2021-08-15 21:38:09
965
原创 JSON Schema数据校验入门
快速开始我们用一个例子来介绍说明 JSON Schema,虽然不可能面面俱到,但是对JSON Schema的基本概念、语法、使用有个较为全面的了解是完全没问题的。这里假设我们有一个产品类目接口是用JSON Data格式来交互的,这个类目的产品信息字段有: 产品ID:productId 产品的名称:productName 产品的销售价格:price 可选字段的产品标签:tags 产品类目数据简单例子:{ "productId": 1, "produ..
2021-08-07 23:06:50
2202
原创 压缩算法算法
算法笔记–压缩算法定义压缩算法:在计算机科学和信息论中,用更少的比特来表示未经过压缩的源数据算法。完整的压缩算法包括压缩和还原的过程,如下图,http开启压缩可以显著提升传输效率。核心概念我们可利用资料的一致性,规则性,与可预测性去实现数据压缩。源数据越一致,亦代表其统计特性越集中。以影像压缩为例,其集中度代表有傅里叶变换的时域及频域、直方图、特征值数据压缩能够实现是因为多数现实世界的数据都有统计冗余。例如,字母“e”在英语中比字母“z”更加常用,字母“q”后面是“z”的可能性非常小。无损数据压
2021-03-25 22:11:39
1217
原创 二分查找算法
算法笔记–二分查找二分查找是对有序序列查找的一种高效方法,时间复杂度为 log2(n),它的核心思想是分而治之,逐渐细化,最终匹配结果。看图理解首先将数组对半分,判断目标值是在mid的左边,或者右边,或者等于mid值进一步细化,并采用同样的判断重复步骤,直至mid的值等于目标的值案例实践public class BinarySearch { public static void main(String[] args) { int[] a = {1,2,
2021-03-21 22:14:50
263
原创 快速排序算法
算法笔记–快速排序快速排序 是对 冒泡排序的一种改进,时间复杂度为 O(nlogn)。其核心思想是选定一个基准值,将所有比它小的放在左边,所有比它大的放在右边,然后将左右两边的数据递归调用直至完成排序。看图理解核心实现是两个指针索引,分别在左右两边,并向中间推进,当左边遇到比基准值大的,同时右边遇到比基准值小的,将它们值进行交换交换数据后,将指针索引继续向中间靠拢,并重复比较交换的过程直至两指针索引相遇为止,此时左边数据比基准值小,右边诗句比基准值大将左右两部分数据递归调用,
2021-03-21 14:13:24
295
原创 归并排序算法
算法笔记–归并排序归并排序一种有效、稳定的排序算法,其核心思想是分治思想,通过递归调用实现排序。归并排序的时间复杂度为 O(nlogn),适用于数据量大,并且对稳定性有要求的场景。看图理解核心排序,分而治之,引用了另一数组进行数据暂存,双指针引索引推进,实现两个无序数组排序递归思想,分组,由小到大进行排序对第三行两个一组的数据进行归并排序对第二行四个一组的数据进行归并排序整体进行归并排序动图描述整个过程解题:用一个数组来表示元素集合二分数组,分为
2021-03-21 12:16:38
482
原创 希尔排序算法
算法笔记–希尔排序希尔排序是插入排序的一种,它是针对直接插入排序算法的改进,看起来也比较抽象,现实生活中感觉比较类似的例子是扑克洗牌整理牌的过程。它的核心是在大方向分组有序,然后逐渐细化分组有序,最终达到统一有序。希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多。看图理解初始增量第一趟 gap
2021-03-21 11:08:59
284
原创 插入排序算法
算法笔记–再回顾插入排序插入排序也很符合人类的直觉,相比选择排序它看上去更加佛系,它的核心在于插入,就是从无序的元素中佛系取出一个元素然后插入到有序的元素中。这里仍然可以用一篮子苹果来形象描述这个过程,首先我们从篮子中随机取出一个,然后继续从篮子随机取出一个,这时手中有两个苹果,我们对他两按大小进行排序,然后继续从篮子随机取出一个,此时将第三个苹果按大小插入到前面排好序的苹果中去,重复此过程,直至篮子的苹果被拿完。对比可见选择排序在于挑,插入排序在于插。解题:用一个数组来表示元素集合佛系从数组中取
2021-03-20 19:41:24
264
1
原创 选择排序算法
算法笔记–再回顾选择排序选择排序很符合人类的直觉,它的核心就是从无序的元素中挑选出有序的元素排序,可以用一篮子苹果来形象描述,首先我们从篮子中挑选出最小的一个,然后继续从篮子中挑选出最小一个,这时手中就得到了两个比较小的苹果排序,重复此过程,直至篮子的苹果被挑选完,可见这样的挑选过程本身也是排序过程。解题:用一个数组来表示元素集合选定第一个元素,与数组其他元素遍历比较,找到最小的一个,然后交换,此时挑选出最小值选定第二个元素,与剩下的数组(篮子中的苹果)元素遍历比较,找到最小的一个,然后交换,此
2021-03-20 18:44:06
239
原创 冒泡法排序算法
算法笔记–再回顾冒泡法排序冒泡法是我们学习编程接触到的第一个排序算法,简单而形象,整个比对过程跟泉水冒泡十分形似。冒泡法排序首先拿第一个元素与相邻元素进行比较,如果它比较大,就相互交换,这样第一轮遍历下来,最大的值就确定了,第n轮也是如此,都是从第一个开始,一直比较到倒数第n个,这样最大的n个就排好了。解题:用一个数组来表示元素集合拿第一个元素与相邻的元素相比,循环遍历到数组最后,确定最大值拿第一个元素与相邻的元素相比,循环遍历到数组倒数第二个,确定次大值循环遍历直至数组完全排序时间复杂程
2021-03-20 17:50:36
333
原创 算法笔记--简单实现栈的先入后出(FILO,First In Last Out)功能
算法笔记–简单栈的先入后出(FILO,First In Last Out)功能stack 栈,是一个 先入后出(FILO,First In Last Out)的 有序列表,可以形象地理解为手枪的弹匣,装子弹是入栈,打枪是出栈。主要概念:栈顶(Top):允许插入和删除的一端,为 变化的一端。称为栈顶栈底(Bottom):另一端为 固定的一端,称为栈底单向链表如图所示:解题:栈的实现可以用数组、链表来实现定义一个数据存储类型,栈顶指针入栈:栈顶指针++出栈:栈顶指针–栈的优点:
2021-03-14 14:10:01
1728
原创 算法笔记--简单实现单链表的增删功能
算法笔记–简单实现单链表的增删功能链表也是一种线性的数据结构,节点与节点通过指针相连,从指针角度来看,链表可以分为单向链表、双向链表、循环链表。单向链表如图所示:解题:Java没有指针,使用对象引用实现定义一个头结点,链表长度计数器链表的插入:将尾结点的指向改为当前插入的节点链表的删除:找到删除节点,并将删除节点的前节点指向下一节点链表的有点:增删节点十分方便案例实践public class SimpleListDemo { public static void mai
2021-03-14 12:50:17
656
2
原创 求两个字符串匹配算法
算法笔记–求两个字符串匹配有如下字符串 ,判定 str1 中是否包含 str2,如果出现则返回第一次出现的位置,如果没有则返回 -1String str1 = "早安,打工人,打工魂!";String str2 = "打工";解题:使用暴力匹配先拿str2第一个字去str1挨个匹配匹配成功,则拿第 2 个字去匹配如果不匹配,则从头开始暴力匹配法优缺点:优点:简单,容易理解缺点:效率低下可以看到上图的描述,只要有一个不匹配,就从头开始再来,「回溯」次数太多。案例实
2021-03-13 23:19:08
862
原创 Mysql 性能优化分析
文章目录Mysql 性能优化分析思考1.硬件操作系统层面2.Mysql调优2.1性能瓶颈分析与优化2.2日志分析优化2.3查询优化 [连接](https://juejin.cn/post/6844903750839058446#heading-106)2.4建表优化2.5架构优化Mysql 性能优化分析思考性能分析主要是从硬件操作系统和应用软件方面着手:1.硬件操作系统层面硬件操作系统调优对其他应用软件也是一样的,主要从网络传输,运算速度、存储性能方面入手,涉及网卡带宽吞吐效率、CPU性能、内存容量
2021-03-13 17:36:50
364
1
原创 docker常用命令
docker常用命令技巧镜像与容器:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿
2020-12-31 15:13:22
311
原创 docker mysql 主从数据库环境搭建
随着应用业务数据不断的增大,数据库性能压力越来越大。此时,我们可以将数据库扩展成 主从复制模式,将 读操作和 写操作 分离开来,多台数据库 分摊请求,从而 减少单库 的 访问压力,进而应用得到优化。MySQL 5.6 开始主从复制有两种方式:基于日志(binlog)和 基于 GTID(全局事务标示符)。这里只涉及基于日志 binlog 的 主从配置。优点负载均衡–主服务器负责对数据进行 更新、删除 和 新建 等操作,而将 查询 工作落到 从库 头上异地容灾备份–可以将主服务器上的数据同步到 异地从
2020-09-29 10:52:10
296
1
原创 消息队列RabbitMQ、ActiveMQ、Kafka
消息队列消息队列(Message queue)是一种进程间或同一进程的不同线程间的通信方式,消息队列提供了异步的通信协议,也就是说消息的发送者和接收者不需要同时与消息队列交互,消息会保存在队列中,直到接收者取回它。队列可以用链表来实现,它又分为链式队列、循环队列、双端队列等。**功能特点:**应用耦合、异步消息、削峰/限流、高可用性(集群/分布式)常用消息队列 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQAMQP协议概念AMQP(高级消息队列协议)是
2020-08-16 18:42:08
372
原创 HTTP协议与负载均衡技术
Web起源1945年Vannevar Bush在经典论文“As we may think”中提出一种通过机械扩展人类的记忆方法:Memex**人类记忆弱点:**人类因记忆能力不足而不能记忆大容量知识**想不起来:**人类在记忆过程中常因为各种知识间缺乏必要的联系,而经常无法记忆起来已记忆了的知识。“恍然大悟”即是这种情况的最好写照。HTTP协议Http消息的请求与响应http消息主要分...
2020-02-01 23:03:33
1364
原创 cent os 安装使用postgresql
下载yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm -y安装yum -y install postgresql11 postgresql11-server postgresql11-libs初始化数据库/...
2020-02-01 22:40:23
1038
原创 遇见二十年代
时间始终以一种没有中断的单线程方式流逝着,它已悄然来到二十一世的二十年代,距离千禧年的远去也已然二十载。像往年一样聆听新年祝词,看去年的发展变化。很多年度关键词在记忆中漂浮,2019年人均GDP将突破一万美元,这是一个新的台阶,更是一个新的舞台。许多量变的发展,也将逐渐迎来质变,如果说一个人的基础知识积累源于人生命中的前五分之一,那么对于新世纪来说也走过了原始积累阶段。或许星辰大海才是最终的征程,...
2020-01-01 18:01:58
352
原创 pycharm创建Django工程
前言python是脚本语言,不需要编译即可直接运行,特别适合在命令行终端中使用。而在Windows这种命令行不方便的系统中使用一款优秀的IDE不仅可以格式化代码也能够拥有智能化的输入提醒,从而加快开发效率。最近JetBrains官网进不去了,Pycharm2019下载安装链接 https://pan.baidu.com/s/12PpqKPGRogyZf9ms1LyPHQ 提取码 yclw...
2019-10-29 23:23:04
10125
1
原创 centos一键安装nginx
文章目录前言一键安装普通安装常用的命令nginx配置总结前言Nginx是一款高性能的Web服务器,它的内存占用少,启动极快,高并发能力强。常作为负载均衡、反向代理服务器使用。反向代理可以很好隐藏服务器的信息,方向代理示意如图: 一键安装由于经常有在centos上安装部署Nginx的需求,这里总结了一个一键安装脚本,采用默认安装配置,省去烦人的环境依赖的安装配置。#下载脚本wget ...
2019-09-26 23:55:09
11260
1
原创 中国互联网发展报告2018年度总结
中国互联网发展报告2018年度总结文章目录中国互联网发展报告2018年度总结前言2018年的几项大数据纵向比较几项表单数据技术展望总结历年互联网发展报告前言互联网行业的发展瞬息万变,三分钟热度是其最好的代名词。所谓君不见昨日网红遍地,今朝已无人问津!互联网发展之快要求我们思想要紧跟潮流,关注行业领域发展,这里总结一下去年(2018)中国互联网发展的情况,借以推测一下互联网未来的发展。以中国互...
2019-06-30 15:31:11
12636
原创 OAuth 2.0 的解析与应用
文章目录前言授权解析如何授权使用与更新授权讲个例子总结前言互联网是一个巨头垄断的市场,市场资源大多被有实力的大公司支配着,比如google、Alibaba、Tencent等等,当我们想用它们的资源时,就需要用到授权。而OAuth 2.0是目前最流行的授权机制,用来授权给第三方应用,从而能够获取到授权方得用户数据信息。OAuth 2.0给第三方应用带来了巨大的便利,使我们的用户信息可以适用于整个...
2019-06-27 23:57:24
9096
原创 Javascript es6语法新特性总结
目录前言let命令const命令数组的特性前言随着2015年6月份发布的第一个ES6版本开始,新生代的JavaScript语言在编程中用得越来越多,众多浏览器也对ES6有良好的支持。那么ES6出来后,它有哪些新特性,有哪些需要注意的地方,在这里做一个总结。let命令es6为我们带来了let命令,与var命令类似,但是它声明的变量只在代码块中有效(块作用域),即局部变量声明的效果。{ l...
2019-05-30 23:51:27
11194
原创 Hibernate知识梳理
前言Hibernate 是一个高性能的对象关系型持久化存储和查询的服务框架,能胜任大多数对象存储需求。ORM即Object、Relation、Mapping对象关系映射,它可以建立关系型数据与实体类之间的映射关系,方便进行数据库操作。优势特点:1.Hibernate 使用 XML 文件来处理映射 Java 类别到数据库表格中,并且不用编写任何代码。2.为在数据库中直接储存和...
2019-04-01 16:27:16
9245
原创 数据库知识整理
where条件查询知识汇总语法:where 条件表达式常用的运算符字符匹配符在where子句中使用匹配符like或not like可以把表达式与字符串进行比较,从而实现对字符串的模糊查询。其语法格式如下:Where 表达式 [not] like ‘字符串’ [escape ‘换码字符’]注意,比较字符串是不区分大小写的,如M%和m%是相同的比较运算符。...
2019-03-28 23:11:22
9413
原创 Redis知识整理(不定期更新总结)
为什么用redisRedis是一个开源的使用C语言编写、支持数据持久性、Key-Value数据库,并提供多种语言的API的高速缓存框架。优势特点Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis原子 – Re...
2019-03-27 15:12:14
8804
原创 数据库设计三大范式
数据的概念对象object,也称为实体型。在现实世界中具有相同性质、遵循相同规则的一类事物的抽象称为对象。对象是实体集数据化的结果,比如学生、老师、课程等是对象。实例instance 是指对象中的每一个具体的事物,例如学生张三、李四。属性attribute 是实体的某一方面特征的抽象表示,例如学生的姓名、性别、班级、年龄等。主码primary key 能够唯一标识一个实体。次码...
2019-02-26 22:51:35
56537
6
原创 海思HI35xx语音识别方案
前言语音识别是智能化应用的一个重要分支,也是语音交互功能的基础。语音识别基于神经网络算法,借助大数据进行模型训练,据科大讯飞相关数据报道,它们已经能够实现98%以上的准确识别率,同时支持多种外语及国内的一些方言。从语音技术实现方式分类可以分为本地识别和云识别,本地识别主要是借助语音芯片诸如LD3320等,而云识别目前国内比较火的有科大讯飞、百度AI等云服务提供,它们提供友好的API接口,支持多...
2019-01-25 23:40:41
12774
1
原创 Python简单爬取景点信息
前言网络爬虫是为了获取互联网上的海量信息数据,在互联大数据加持的背景下,对数据合理利用成为了推动互联网发展的原动力。对个人而言,可以利用爬虫工具来获取自己想要的数据信息。海量的互联网数据如何筛选到自己想要的,并且有价值的呢,这里借取python的网络爬虫模块来实现景点信息爬取,进而获取收集相关景点的信息。背景知识Python爬虫主要由URL管理器、URL下载器、URL解析器、数据输出部...
2019-01-06 16:19:45
5348
1
原创 python+smtp邮件
前言使用smtp发送邮件是一个很常见的互联网应用场景,实现smtp协议发送邮件的方式很多,可以用简单的Telnet命令行,也可以借用springboot等现有框架构建,当然也可以是python的相关类库实现。更多smtp相关的参考《Spring-boot-email邮件》,这里主要记录一下用python实现smtp发送邮件。需要注意的是,发送者邮箱的密码是授权登录密码,否则会返回553未认证错...
2018-12-31 15:43:45
9489
原创 python+opencv实现人脸检测
前言计算机视觉是人工智能领域中的一个重要分之,传统的安防监控越来越智能化,不仅仅要求简单的移动侦测,还要求能检测人脸。目前实现人脸检测解决方案主要分为两种,一种是依靠大型服务器来实现,它的特点是计算能力强,同时依赖强大的人脸数据库可以运行相关算法将捕获到的人脸进行精准识别;另一种是依赖于嵌入式硬件运行在设备终端,比如海思Hi3559A之类的芯片,它的一个特点就是利用特定的硬件设计,将复杂的图像...
2018-12-31 00:14:14
9903
原创 Python数据解析
前言Python语言在人工智能以及计算机视觉领域十分热门,它处理数据的能力很出色,兼容各种常用的数据类型解析。程序无非就是一系列数据操作行为的集合,从输入到输出以求得人们期望的结果。Python在执行效率和开发效率中找到平衡点,很适合快速开发算法复杂,数据处理量大的应用。高效率的数据处理能力离不开结构化的数据交互,python当然对CSV,JSON、XML这些常用的结构化数据类型是完美兼容的。...
2018-12-30 17:23:32
9979
原创 百度地图API使用样例
前言随着移动互联网的急速发展,对位置服务的需求越来越强烈,如美团、滴滴、共享单车等等一系列的互联网应用都是基于位置提供服务的。国内两大地图提供商百度地图、高德地图不仅仅在导航等应用提供基础的服务,还对外提供一些开放的位置服务的API,开发者可以利用这些第三方的API快速构建自己的位置服务应用。初识百度地图API基于百度地图位置服务开发应用,首先应当先到百度地图开放平台注册开发者账号,然...
2018-12-23 15:44:50
12565
2
海思Hi35XX+百度语音云识别
2019-01-18
海思HI35xx平台CPU芯片温度监控驱动及应用样例源码
2018-10-19
海思HI35xx平台串口操作C源代码及参考资料
2018-10-06
海思HI35xx平台h265解码实例
2018-08-02
海思HI35xx平台h264解码实例
2018-06-30
my ifconfig源码
2018-05-19
海思HI35XX平台音视频编解码程序demo样例
2018-05-04
海思HI35xx系列V400平台gdb调试工具
2018-04-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人