自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘小绪同学的博客

刘小绪的编程之路

  • 博客(73)
  • 资源 (7)
  • 问答 (2)
  • 收藏
  • 关注

原创 如何搭建一个属于自己的博客/企业网站

本文首发于 Guanngxu 的个人博客:如何搭建一个属于自己的博客/企业网站本文参考内容:如何做博客/企业站以及注意事项Typecho支持Emoji表情方法说明:此篇文章得益于王红星的指导,喜欢直接粗暴一点的朋友可以跳过前面,直接从程序的选择开始阅读。我的博客搭建之路说起来有点惭愧,我自己是计算机科学与技术专业出身,虽然博客系统在我眼里是很简单的系统,但是我却一直畏惧从零开始搭建一个系统的麻烦性,因为但是安装程序的运行环境就会耗掉我大量的时间,再加上我写代码、测试、上线等工作少说也得要四五

2020-10-19 12:12:54 124

原创 Vue + TypeScript 项目起手式

在此前我使用的前端框架是 Angular,使用过 TypeScript 后你就会讨厌 JS 了,我学习 Vue 时的最新版本是 2.5,相信大部分同学都不会认为 Vue 那样又细又长的代码很美观吧,简单看了一些网络博客后,我毅然决然引入了 TypeScript 进行开发,本文仅整理记录我自己遇到的一些坑。使用 Cli脚手架是一个比较方便的工具,这里需要注意的是@vue/cli和vue-cli是...

2020-01-10 23:55:47 324

原创 变量提升与作用域

参考内容:lhs rhs是啥意思《Javasript 高级程序设计(第三版)》《你不知道的 JavaScript(上卷)》几乎所有的编程语言都能够存储变量当中的值,并且可以在之后对该值进行访问或修改。很明显需要一套良好的规则来存储这些变量,并且之后可以方便的找到这些变量,这套规则我们称之为作用域。编译原理我们一般把 js 归为「动态」或「解释执行」语言,但是它也会经历编译阶段,不过...

2019-08-08 16:25:18 155

原创 JavaScript 性能优化——惰性载入函数

参考资料:《JavaScript 高级程序设计(第三版)》JavaScript专题之惰性函数深入理解javascript函数进阶之惰性函数因为不同厂商的浏览器相互之间存在一些行为上的差异,很多 js 代码包含了大量的if语句,将执行引导到正确的分支代码中去,比如下面的例子。function createXHR() { if (typeof XMLHttpRequest != ...

2019-08-06 14:30:44 239

翻译 非设计师需要知道的四个设计原则

作者:Anna 4erepawko Mészáros这篇文章是写给无力邀请专业设计师的所有内容创作者的,以及设计师异常忙碌的团队的非设计师们。如果您按照这些简单的步骤进行操作,我保证您的设计会变得更好。这些 Tips 来源于我对身边非设计朋友的多年观察,家人与同事在日常生活中也需要设计他们的东西。比如简历、作品集,Facebook 和 Instagram 上帖子要使用的图片,Youtube 视...

2019-06-22 18:16:02 131

原创 UML 概述及用例图

《UML 精粹》读书笔记。读的是老版,可能和你了解的有一些语法上的不一致UML 全称为统一建模语言,它不是一种方法,而是一种语言,跨越了具体编程语言的限制,以其当前状态定义了一种表示法和一种元模型。为什么需要 UML首先需要明白一点,任何一种工具的出现都是为了解决某个实际问题的,而这个工具自身的生命力还很强,那就说明它解决问题的效果很棒,至少当前没有找到比这一工具更有效率的替代物。软件...

2019-05-22 20:47:12 170

原创 CPU 是怎样工作的

CPU 大家应该都不会陌生,日常用的手机、电脑中都有 CPU,CPU 作为一个设备的大脑,指挥着其它各种硬件的协同工作,芯片技术也是国内一直没有突破的技术。我们先来看看怎么让电路去运算呢?比如如何让电路运算1 + 1,直接使用下面这个装置就可以了。作为一个比较好奇的人,总会想看看那个方框框里面是什么样子的,让我们慢慢解开加法器的外衣。这个电路你应该不会陌生,它需要两个开关都闭合时灯泡才会...

2019-04-27 21:09:37 920

原创 浅析浏览器缓存机制

前端开发人员有大部分时间都在调整页面样式,如果页面没有按照自己预期的样式显示,可能想到的第一个解决方案就是清一下浏览器缓存,HTTP 缓存机制作为 Web 性能优化的重要手段,也应该是 Web 开发人员必备的基础知识。我们常说的浏览器缓存机制也就是 HTTP 缓存机制,它是根据 HTTP 报文的缓存标识运行的,所以首先要对 HTTP 报文有一个简单的了解。HTTP 报文HTTP 报文是浏览器和...

2019-04-25 22:14:56 248

原创 什么是契约测试?

契约测试全称为:消费者驱动契约测试,最早由 Martin Fowler 提出。契约这个词从字面上很容易理解,就是双方(多方)达成的共同协议,那又为什么需要契约测试这个东西呢?在当前微服务大行其道的行业背景下,越来越多的团队采用了前后端分离和微服务架构,我们知道微服务是由单一程序构成的小服务,与其它服务使用 HTTP API 进行通讯,服务可以采用不同的编程语言与数据库,微服务解决了单体应用团队协...

2019-04-10 22:27:28 4032

原创 里氏替换原则(LSP)

里氏替换原则(LSP)里氏替换原则可以描述为:子类型必须能够替换掉它们的基类型。或者描述为:使用基类对象指针或引用的函数必须能够在不了解衍生类的条件下使用衍生类的对象。下面是一个违背 LSP 的一个简单示例;很显然,DrawShape函数的设计使得它必须知道所有Shape基类的衍生类,这个函数更明显的是违背了 OCP。void DrawShape(const Shape& s){...

2019-03-27 22:35:16 227

原创 单一职责与开放封闭原则

单一职责原则(SRP)    为什么要把两个职责分离到单独的类呢?因为每个职责都是变化的一个轴线,如果一个类承担的职责过多,就等于把这些职责耦合在一起了,一个职责的变化可能会削弱这个类满足其它职责的能力,这种耦合会导致脆弱的设计,如果发生变化,设计就会遭到意想不到的破坏。    上面类图中显示 Rectangle 类有两个方法,一个方法把矩形绘制在屏幕上,另一个方法计算矩形的面积。有两个不...

2019-03-17 18:42:53 199

原创 什么是敏捷开发

    刚进入 21 世纪的第一(2001)年,由于看到许多公司的软件开发团队陷入不断增长的过程的泥潭,一批业界专家组成了敏捷联盟,在随后的几个月中他们发表了一份敏捷联盟宣言,如下所示。个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档响应变化胜过遵循计划    上面价值观指出,编译器、源代码控制器、 IDE 等工具对于团队的开发者至关重要,但是不要过分夸大这些工具的作用,使用过...

2019-03-11 00:09:22 68

原创 Ping 的过程是怎样的?(Ping 的原理)

    去年圣诞节前后,一位没有披露身份的工程师,在室外架设了一棵圣诞树和一块 LED 屏幕,这棵圣诞树和 LED 屏幕的每个像素,都可以通过 IPv6 地址控制。    你 ping 一下2001:4c08:2028:2019::RR:GG:BB这个地址(其中 RR、GG、BB 是你设定的任意颜色值),圣诞树就会亮一下这个颜色的灯;你 ping 一下2001:4c08:2028:X:Y:RR:...

2019-03-06 23:03:54 587

原创 并发编程

    在异常控制流提过,如果逻辑控制流在时间上是重叠的,那么它们就是并发的。并发出现在计算机不同层面上,编写并发程序也是程序员必不可少的技能,面试同样必问并发相关知识。    现代操作系统提供了基于三种基本的构造并发程序的方法。分别为:进程、I/O 多路复用和线程。    基于进程的并发编程方法很简单,使用我们很熟悉的fork、exec、waitpid等函数就可以了。比如构造一个并发服务器的...

2019-02-23 21:17:28 74

原创 网络编程(自制服务器)

    现在的网络应用随处可见,无法想象生活离开了网络会变得怎样,最常见的就是通过浏览器上网,在地址栏输入 URL 敲击回车,然后浏览器就呈现出相应的页面。虽然现在的网络应用五花八门,但是它们都是基于相同的编程模型,依赖相同的编程接口。    每个网络应用都是基于客户端-服务端编程模型的,采用这个模型,一个应用是由一个服务器进程和一个或多个客户端进程组成。由服务器管理着某种资源,通过操作这些资源...

2019-01-27 23:38:10 1179

原创 Bootstrap-table 合并相同单元格

    Bootstrap-table 官方提供了合并单元格方法 mergeCells,它根据四个参数可以合并任意个单元格,我们要做的只是告诉它怎么合并。    要合并同一列相同的单元格,无非两种办法,一种是一边遍历一边合并,遍历完了再合并。这里采用第二种办法,这里不需要遍历所有数据,因为用户只能看到当前页的数据,所以只遍历当前页的数据更省时间。    下面是我实现的获取合并信息算法,最终返回...

2019-01-26 23:36:12 1212

原创 系统级 I/O

    文件对于我们来说,貌似再普通不过了,windows 使用扩展名来区分不同的文件,我们接触了 gif、docx、pdf、mp3、mp4、exe 等等好多好多不同的文件,但是它们在磁盘中都长一个样子,对于内核而言,没有什么区别。基本概念    文件这个概念就是对 I/O设备 的抽象,一个文件就是一串 m 个字节的序列,所有的 I/O 设备(网络、磁盘、终端)都被模型化为文件,所有的输入输出...

2019-01-21 09:56:29 97

原创 异常控制流

异常    从给我们的处理器开始加电,到断电为止的这段时间里,取任何一个时间点,程序计数器里面都有一个值 ak,表示相应指令的 Ik,从 ak 到 ak-1 的过程叫做控制转移,最简单的情况是 ak 和 ak-1 在内存中位置相邻,但是我们的程序少不了跳转、调用、返回一类的指令,系统为了应对这种变化,使用了一种使控制流发生突变的机制,这种突变我们称之为异常控制流。    异常控制流是是很重要的...

2019-01-02 22:28:30 86

原创 历史精选文章合集

    这是整理的今年以来历史文章中比较好的文章,写的烂的文章就丢弃了,好文弄成一个合集,方便自己看也方便您看。感悟思考    这部分是点赞率和阅读量都最高的文章,写的都很实在,如果您有什么不同的观点,或者是有补充欢迎在留言区留言。    你如果只是一直囤干货,那永远不可能进步    阅读高于自己的作品,远离精神毒品    谈一点关于名校的话题    谈一下写作的重要性    走捷径...

2018-12-23 21:05:03 476

原创 链接器规则会引入的巨坑

    首先来看一个简单的程序。下面是是两段程序,分别放在link.c和bar.c中。/* link.c */#include<stdio.h>void f(void);int x = 13;int main(){ f(); printf("x=%d\n", x); return 0;}/* bar.c */int x;void f(){ x =...

2018-12-09 16:48:15 86

原创 如何优化程序性能

    这篇笔记主要是摘抄了具体的代码示例,从代码中体会如何优化程序的性能,《深入理解计算机系统》已经看了近三分之二了,越看越发现自己懂得太少太少了,正在题图中的绝望之谷徘徊(我自认为是这样),至少比在愚昧山峰左边的山脚徘徊要好很多。    我们的编译器已经提供了很好的优化机制,但是还有很多细节编译器优化不到,或者说没胆量去优化,因为有一些激进的优化很有可能会违背程序员的初心。// 第一种...

2018-12-05 22:12:21 654

原创 存储器的层次结构

存储技术    我们在买电脑时都会关注内存、处理器、硬盘等部件的性能,都想内存尽可能大,硬盘最好是固态的。    不知道你有没有遇到过自己写了大半天的文档,因为不小心突然关机了,自己辛苦忙活了几个小时的成果又得重写的情况。可是你是否想过为什么关机了就会丢失这些信息呢?为什么硬盘上的文件没有丢?    会丢的那部分信息肯定是和电有关系的,不然也不会一断电就丢信息。内存就是这样的部件,更专业一点...

2018-12-02 12:04:01 809

原创 为什么处理排序数组比未排序数组快

    今天在群里看到一个有意思的问题——为什么处理排序数组比处理没有排序的数组要快,这个问题来源于 StackoverFlow,虽然我看到代码略微知道原因,但是模模糊糊不够清晰,搜了很多博客也讲的不够明白,所以就自己来总结了。    首先来看一下问题,下面是很简单的一段代码,随机生成一些数字,对其中的大于 128 的数字求和,记录并打印出求和所用时间。import java.util.Arr...

2018-11-28 19:13:25 130

翻译 Github 十大最佳实践

1、保护主分支不受直接提交的影响    主分支中的任何一次提交都应该是可以直接部署的,所以永远不要直接提交默认分支,同时也是 Gitflow workflow 成为标准的原因。使用分支保护可以帮你防止直接提交,当然,所有的事情都应该使用pull requests来管理。2、避免基础信息的混乱    或许你在一个新的环境工作,或者你并没有注意到自己的 git 配置是不正确的,因此提交代码时伴...

2018-11-24 15:01:47 368

原创 函数调用与空间分配

    我们在编程序的时候,都会把某一个特定功能封装在一个函数里面,对外暴露一个接口,而隐藏了函数行为的具体实现,一个大型的复杂系统里面包含了很多这样的小函数,我们称之为过程。    过程是相对独立的小模块,系统的运行需要这些过程的紧密合作,这种合作就是函数调用。    在一个函数执行时调用别的函数,比如 P 调用 Q,需要执行一些特定的动作。传递控制,在调用 Q 之前,控制权在 P 的手里,...

2018-11-18 23:20:03 468

原创 顺序、条件、循环语句的底层解释

顺序结构数据传送指令    我们都清楚,绝大多数编译器都把汇编语言作为中间语言,把汇编语言程序变成可运行的二进制文件早就解决了,所以现在的高级语言基本上只需要把自己翻译成汇编语言就可以了。    汇编指令总共只有那么多,大多数指令都是对数据进行操作,比如常见的数据传送指令mov。不难理解,被操作数据无非有三种形式,立即数,即用来表示常数值;寄存器,此时的数据即存放在指定寄存器中的内容;内存引...

2018-11-11 00:48:30 519

原创 机器级程序的小细节

    随着技术的逐渐发展,CPU 中晶体管的数量以每年 37% 的速度递增,CPU 也从 16 位到了 32 位,现在已经到了 64 位,为了保证以前编译的程序仍然能够在最新的机器上使用,所以寄存器保留了原来的命名。    比如一个 16 位的寄存器有自己的名字,当扩展成 32 位的时候,会保留原来 16 位寄存器的名字,并给整个 32 位寄存器取一个新的名字。如同“天生我材必有用”,每个寄存...

2018-11-05 23:01:10 490

原创 整数的加法和乘法运算

深入理解计算机系统第二章读书笔记    在编程入门的时候可能都知道两个正数相加的结果可能为负数,还有一个更奇怪的现象就是:x < y和 x - y < 0两个表达式可能会得出不一样的结果,这些神奇的结果都和计算机整数的底层表示和运算有着密切的关系。    C 语言中有无符号数与有符号数之分,而在 Java 中只有有符号数,下面的内容还是基于 C 语言进行说明,毕竟更 C 比 J...

2018-10-26 22:52:18 396

原创 信息的存储及整数表示

深入理解计算机系统(第三版)第二章前半部分读书笔记字数据大小    前面已经提到过信息=位+上下文,但是基本上的计算机都没有将位作为最小的可寻址单位,而是将字节作为了最小的可寻址单位,内存就是一个非常大的字节数组,它的的每个字节都由一个唯一的数字来标识(这个数字是不需要存的),所有可能的地址集合就是虚拟地址空间。    我们常说的 32 位、64 位指的是一台计算机的字长,用于指明指针数...

2018-10-23 22:35:41 78

原创 ubuntu16.04 下安装mysql

    初次使用 mysql8.0.x 版本,安装失败,查阅官方文档是因为 mysql8.0.x 使用的加密方式和 mysql5.x版本不一样,在给用户授权的时候就不一样了,所以最后换回了 mysql5.7版本。在卸载 mysql8.0.x 版本时也出现了卸载不了的问题,具体解决办法如下:# 卸载 mysql 使用下面的命令,如果顺序执行报错,# 可以先执行后面的再回来执行没有执行的命令su...

2018-10-20 11:31:47 173

原创 计算机系统漫游

    对于程序员来说,HelloWorld 程序再熟悉不过了,下面是 C 语言写的 HelloWorld 程序。#include<stdio.h>int main(){ printf("hello, world\n"); return 0;}    这段程序很简单,仅仅是在屏幕上输出hello world,对于程序员很容易阅读,但是从计算机的角度来看,也是这么简单吗...

2018-10-10 11:18:25 76

原创 python 截屏,合成 pdf

    这篇文章接着使用订阅号获取微信公众号历史文章看。一般爬虫都选择去分析 html 源码,从中选择对我们有用的元素进行保存,但是这样很容易就把作者写文章时的排版给扔掉了,而且有的文章本身就使用了一些图片加以说明,为了保证原汁原味的阅读体验,尝试了一下直接截屏保存的效果还不错。网页截屏保存    selenium 库中 webdriver 已经提供了截屏功能,代码如下所示,但是使用之后发现,...

2018-10-07 21:35:55 751

原创 使用订阅号实现微信公众号历史文章爬虫

    微信公众号已经成为生活的一部分了,虽然里面有很多作者只是为了蹭热点,撩读者的 G 点,自己从中获得一些收益;但是不乏好的订阅号,像刘大的码农翻身、曹大的caoz的梦呓等订阅号非常值得阅读。    平时有时候看到一些好的公众号,也会不自觉去查看该公众号的历史文章,然而每次都看不完,下一次再从微信里面打开历史文章,又需要从头翻起。而且对于写了很多年的大号,每次还翻不到底。有一些平台提供了相关...

2018-10-04 11:54:27 5149

原创 如何解决跨域请求

    刚毕业入职,大部分时间还在培训,中间有一段时间的空闲时间,就学习了下 Angular,在学校都是编写的单体应用,所有代码都放在同一个工程下面,到公司使用的是前后端分离了,虽然后端程序也是我自己写的,但是有一些数据我是从公司现有接口去拿的,然后就遇到让我纠结了两小时的跨域请求问题,在这里做一个简单的总结输出。什么是跨域请求    跨域请求问题是浏览器的同源策略造成的,该策略不允许执行其它...

2018-09-18 23:24:09 1105

原创 RobotFramework 学习记录

安装 RobotFramework    RF 是基于 python 的,所以一定要安装 python 环境。它是一个通用的验收测试和验收测试驱动开发的自动化测试框架,首先安装 python,然后通过pip install robotframework==2.8.5安装 robotframework,(后面的内容只针对 python2 环境)然后安装 wxPython(wxPython 是 P...

2018-09-11 19:23:04 1321

翻译 如何让你的网页看起来更美观

    现在基本都离不开做网页,但是不同网页给人的感觉完全不一样,如何让你的网页看起来更加清爽,怎样让用户更愿意停留在你的网页中,就需要很好的设计了,偶然发现一篇《网页设计中常见的错误》,将其中的内容作了简单的整理。把内容分解成逻辑块    把信息分组到逻辑块中,用户会更容易消化他们,设置内边距为 120px~180px ,并且使用彩色背景分割文本。    字体合适,并且块之间用颜...

2018-09-09 20:55:46 7109 1

原创 《Angulr5 高级编程(第二版)》阅读记录

函数声明式和表达式// 第一种:函数声明式myFunc();function myFunc(){ ...}// 第二种:函数表达式myFunc();let myFunc = function(){ ...}    虽然上面两种函数声明方式在大部分情况下是一样的,第一种可执行,第二种却不可以执行,这是因为浏览器在解析 js 时找到函数声明,并在执行剩余语句...

2018-09-06 13:55:29 529

原创 让HTTPS简要易懂

    充满各种数学证明的密码学是令人头疼的,一听到密码、黑客、攻击等词的时候,就给人一种神秘又高大上的感觉,但除非你真的从事密码学相关工作,否则你并不需要对密码学有多么深刻的理解。    这是一篇适合在饭后的品茶时光中阅读的文章,咱们虚构一个故事来讲解,虽然故事看起来很随性,但是 HTTPS 也是这么工作的。里面有一些术语你也应该听过,因为它们经常出现在技术文献里面。故事背景  ...

2018-08-26 21:31:13 307

翻译 Hash算法简介

这是一篇英文博客,点击原文链接可以访问英文版,不过好像需要工具。    新手在学习区块链时,常常听到的词汇就是哈希和哈希算法,这些算法似乎无处不在。在运行分布式网络和共识机器时(比如比特币和以太坊网络),通过点对点的方式连接数万个结点,需要同时具备“无信任”和高效率验证。也就是说,这些系统需要以紧凑的格式对信息进行编码,允许其参与者进行安全而快速的验证。    比特币和以太坊处理的...

2018-08-26 21:29:40 1378

翻译 如何没有 if 语句

这是一篇英文博客,觉得很既意思又实用,就尝试着翻译了一下,感觉自己英语水平真菜,不要笑话。原版文章可查看底部原文链接。    大约在10年前,我遇到了反 if 运动(anti-if campaign,一个网站),觉得这是一个荒谬的概念。如果不使用 if 语句,你究竟如何才能做出一个有用的程序?荒谬。    但是它会引发你的思考。你还记得你上周不得不去理解的深度嵌套语句吗?这是不是有...

2018-08-06 23:23:26 228

websocket.zip

服务端使用 websocket 主动推送示例,实现的功能为从服务端向客户端推送时间,使用的框架为 tornado

2020-02-05

html+js实现幻灯片

使用html和javaScript实现幻灯片轮流切换,可用于门户网站首页。

2017-12-11

zTree实现树形菜单

使用zTree实现树形菜单,具体可参见zTree的API,此文档给出示例。

2017-12-11

js实现五子棋

使用javaScript语言实现五子棋,操作界面使用Html5实现。简单易懂。

2017-12-11

程序是怎样跑起来的

本书从计算机的内部结构开始讲起,以图配文的形式详细讲解了二进制、内存、数据压缩、源文件和可执行文件、操作系统和应用程序的关系、汇编语言、硬件控制方法等内容,目的是让读者了解从用户双击程序图标到程序开始运行之间到底发生了什么。同时专设了“如果是你,你会怎样介绍?”专栏,以小学生、老奶奶为对象讲解程序的运行原理,颇为有趣。本书图文并茂,通俗易懂,非常适合计算机爱好者及相关从业人员阅读。

2017-12-11

JQuery参考手册

2017-01-18

算法导论中文版

算法导论中文版

2017-01-18

空空如也

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

TA关注的人 TA的粉丝

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