一些读书笔记(三)
是什么终结了士族门阀政治? 是侯景之乱对门阀士族的破袭吗?是武则天对士族门阀的打击吗?是朱温在白马驿的大屠杀吗?是五代十国的终极混乱吗?是赵匡胤和赵光义的个人意志吗? 都不是。 是印刷术和造纸术的改进和推广。 印刷术和造纸术的改造和推广,让有意改革的人们有了对旧秩序发起决胜攻击的决定性武器,让在隋朝就诞生的科举制度终于在宋朝熠熠生辉。
想要做皇帝,不能没头没脑的就做个皇帝了,总得有个名目,让大家有迹可寻,让这件事情看上去具备操作性,能堵住天下人的嘴巴。 毕竟对于上层社会的人来说,这世上最重要的就是『脸面』。 你要干什么,总得有个说的过去的理由,不能没头没脑的就上了,得有一套看上去很科学很合理的流程以及依据。 比如祥瑞啊,比如谶言啊,比如阴阳五行啊。 你总要有个玄而又玄的理由,这样子,才能让众人心服口服。 让大家表面上觉得你是顺应天意,大家的面子上都看得过去,大家都不是逆臣,而是天的顺臣。 对,背锅的就是老天爷。 所以说中国人读书人从来不信老天爷,也并不真的相信鬼神,只是需要的时候拿来背锅而已,不需要的时候…… 一边玩儿去!
而这个时代,百分之九十九的人是不识字的,是发不 ...
一些读书笔记(二)
强而不欺,威而不霸,这才是一个伟大国家和民族的气度与底蕴。
大明统治下的中国并没有在船队上架上高音喇叭,宣扬自己是为了和平友善而来,不像后来那些拿着《圣经》,乘坐着几艘小船,高声叫嚷自己是为了传播福音而来的西方人。 南非的一位著名政治家曾经说过:西方人来到我们面前时,手中拿着《圣经》,我们手中有黄金。后来就变成了,他们手中有黄金,我们手中拿着《圣经》。
于是在靖难之战后七年,朱棣再次披上了盔甲,拿起了战刀,准备走上战场去击败他的敌人,与之前的那次战争不同的是,上一次他是皇子,这一次他是皇帝,上一次是为了皇位,这一次是为了国家。 朱棣不但是一个优秀的皇帝,也是一个优秀的将领,这种上马冲锋、下马治国的本领实在是很罕有的,鞑靼已经领教过了皇帝朱棣的外交手段和政治手腕,现在他们将有幸亲身体会到名将朱棣那闪亮的刀锋掠过身体的感觉。
本雅失里是阿鲁台扶植上台的,两人关系一向很好,也甚少争吵,但在得知朱棣亲率五十万大军前来讨伐时,他们慌张之余,竟然发生了激烈的争吵,令人啼笑皆非的是,他们争吵的内容并不是要不要抵抗和怎么抵抗,而是往哪个方向逃跑! 这二位仁兄虽然壮志凌云,但还是有 ...
一些读书笔记(一)
文字的力量总是振聋发聩,让人热泪盈眶。而历史总是充满遗憾,让人扼腕叹息。在此记录一些读书时引人深思的段落句子,与君共勉。
“伍子胥鞭尸三百”与“申包胥长哭七日”可以说是春秋历史上最为凄美、最为壮烈的一篇乐章:对与错、报仇与忠君、家仇与国恨、私情与公义,纠结在这两个烈丈夫、好朋友之间,演绎了一段又一段壮怀激烈的千古悲歌,它让我们赫然发现,眼泪,并不一定是弱者的表现,当伍子胥瘫坐在楚平王的尸体旁黯然落泪,当申包胥傲立在秦庭上长歌当哭,当孟姜女匍匐在长城下嚎啕不止,强权在无数颗坚定的眼泪面前轰然崩塌,谁说英雄只与刀光剑影相伴,当一切功名被覆盖上数千年厚厚的尘土,在英雄们孤独而幽深的双眼之中,也许只会留下一颗晶莹剔透、闪闪发亮的,英雄泪。
必树吾墓上以梓,令可以为器;而抉吾眼县吴东门之上,以观越寇之入灭吴也!
决定政治兴衰和军事成败的根本性因素是政治、军事本身上的积极进取,而不是地理因素,因为,天下没有攻不破的险要。 潼关虽险,毕竟项羽曾入之,曹操曾入之,刘裕曾入之,安史叛军亦曾入之。 瞿塘虽险,毕竟岑彭曾入之,桓温曾入之,朱龄石曾入之,刘光义曾入之,汤和曾入之。 长江虽险, ...
前端的Rust学习之路(四):引用与借用
学完所有权这一章,是不是感觉有点绕,定义一个值要考虑它怎么传来传去,函数传值返回要转移,绑定给其他变量也要转移。有没有一种方法,能让 Rust 像其他语言一样,只使用某个变量的指针或者是引用呢?答案就是:借用。
Rust 通过借用(borrowing)来获取变量的引用,借用可以让我们在不同的地方使用相同的数据,而不违反所有权规则。
引用与解引用常规引用是一个指针类型,指向对象存储的内存地址,不论数据存储在栈上还是堆上,引用都指向它的内存地址。
1234567fn main() { let x = 5; let y = &x; assert_eq!(5, x); assert_eq!(5, *y);}
Rust 中使用 & 获取变量的引用,这属于不可变引用,当然也有可变引用 &mut 。let y = &x 表示 y 是 x 的一个引用,x 被绑定为 5,所以断言 assert_eq!(5, x);能通过。assert_eq!(5, *y); 中 *y 表示 y 的解引用,也就是解出引用所指向的值,所以这个断言 ...
前端的Rust学习之路(三):所有权系统
关于类型各编程语言中,类型都大同小异,这部分其实看文档 + 多写就能熟悉。不过 Rust 中存在一些较为特殊的类型,并且对于一些基本类型也会有较细的划分,这一部分我们学完所有权系统和引用与借用之后再学习。我认为先了解 Rust 中保证内存安全这一部分是很有用的,这是 Rust 的灵魂。
原则
Rust 中每一个值(对象)都被一个变量所拥有,该变量被称之为值的所有者
每个值同时只能被一个变量所拥有,也就是同时只允许有一位所有者
当变量离开当前作用域之后,值被废弃(drop),占用的内存会被 Rust 自动清理
作用域看名字就很熟悉,没错,就是那个作用域,变量在程序中有效的范围,就是作用域。概念跟 js 没有区别,这里不再赘述。
堆栈栈栈的特点就是 ”先进后出“,”后进先出“,按照顺序存储值并以相反顺序取出值。存入数据叫进栈 ,拿取数据叫 出栈。
每次进栈,数据都是存放在栈顶,每次出栈,都是从栈顶拿取数据。想象一下我们洗碗的时候把碗按照顺序从下往上重叠,用碗的时候从上到下拿取,不能从中间或者底部拿碗。
栈里的数据是有序的、固定大小的,并且数据都较小。用于存储局部变量、函数参数、堆地址等等 ...
前端的Rust学习之路(二):变量
开始先用一段代码来了解下 rust 的语法,来自 rust语言圣经。
12345678910111213141516171819202122232425262728// Rust 程序入口函数,跟其它语言一样,都是 main,该函数目前无返回值fn main() { // 使用let来声明变量,进行绑定,a是不可变的 // 此处没有指定a的类型,编译器会默认根据a的值为a推断类型:i32,有符号32位整数 // 语句的末尾必须以分号结尾 let a = 10; // 主动指定b的类型为i32 let b: i32 = 20; // 这里有两点值得注意: // 1. 可以在数值中带上类型:30i32表示数值是30,类型是i32 // 2. c是可变的,mut是mutable的缩写 let mut c = 30i32; // 还能在数值和类型中间添加一个下划线,让可读性更好 let d = 30_i32; // 跟其它语言一样,可以使用一个函数的返回值来作为另一个函数的参数 let e = add ...
前端的Rust学习之路(一):Rust初体验
一直听说 Rust 性能好,速度快,再加上最近想学习一下 wasm ,准备尝试一下。解释型语言写习惯了,再来开始学 Rust 确实有很多思路需要转变一下。《前端的 Rust 学习之路》系列长期更新,欢迎各位同行指正~
开始什么是 Rust
Rust 是一门系统编程语言,以高性能,速度快,安全而著称,支持函数式,命令式以及泛型等编程范式的多范式语言,通过其特殊的所有权系统来保证安全性,在语法上类似 C++ 。
当然对作为前端,喜欢js, py并且对Java深恶痛绝的我来说,主要关注的是 Rust 是一门跟上述两者截然相反的、需要编译的静态类型语言,需要有明确的类型注解,跟咖啡相比,它很简洁!!!!!😅
如何安装? 安装很容易,官网根据对应系统安装即可,下面简单介绍。
windows 官网找到对应版本 rustup 下载安装即可,rustup 是 rust 的安装工具,安装完成之后 CMD 执行 1rustc -V 输出版本号表示安装成功,rustup 同时为我们安装了 rustc 和 cargo
rustc 就是 Rust 的官方编译器,编译器也就是我们常说的语法分析、 ...
好句
酒池肉林纸醉金迷固然很爽,但是用双手实践开辟一个新世界同样能给人以巨大的心灵满足感;用皮鞭抽工人为你劳作你能获得满足感,跟阶级兄弟一起手拉手肩并肩攻坚克难未必不能获得更高的成就感;有钱能很快乐,平等和正义一样能很快乐。说到底,这是一个资本主义私有制社会,所以说“我坐到资本家的位置上也一样会剥削”,但正因为此,我们才要建立一个没有资本家的社会。你们一个个装得挺被动、挺可怜,说什么“我要做到这位置上……”,那既然如此,为什么不跟我们一起携手创造一个新世界呢?又要剥削享乐,又要装无奈装委屈,那路灯就是你唯一的归宿。这个世界工贼、乏走狗和蠢货太多了,他们开心地吃下了上位者的排泄物,消化一番然后再四处污染环境,导致遍地都是“你是资本家你也一样”这类的无脑言论。人民群众这么好上当,资本家真是笑嘻了。
“我们不需要知道电子游戏是什么,它会不会造成近视它会不会上瘾,我们只需要一个背锅侠,一个可以掩盖家庭教育失败、学校教育失败、社会教育失败的东西,现在它叫游戏,十五年前它是早恋,三十年前它是偶像,三十五年前它是香港电影,四十年前它是武侠小说”
我现在就特别看不起一些年轻人,没有什么阅历,什么都 ...
常用JS工具方法汇总
时间戳转时间类型123456789101112131415161718192021export const formatDateTime = (value = Date.now(), format = "Y-M-D h:m:s") => { if (["null", null, "undefined", undefined, ""].includes(value)) return ""; // ios 和 mac 系统中,带横杆的字符串日期是格式不了的,这里做一下判断处理 if (typeof value === "string" && new Date(value).toString() === "Invalid Date") { value = value.replace(/-/g, "/"); } const formatNum ...
JS里的宏任务和微任务,我有点麻了
有这样一道题123456789101112131415161718192021222324<script> async function async1() { console.log('async1 start'); let a = await async2() console.log(a) console.log('async1 end') } async function async2() { console.log('async2') return 'async2 return' } console.log('script start') setTimeout(() => { console.log('settimeout') }, 0); ...