12季冬纪第十二

季冬纪第十二

季冬#

【题解】

见《孟冬》。

一曰:

季冬之月,日在婺女(1),昏娄中(2),旦氐中(3)。其日壬癸,其帝颛顼,其神玄冥,其虫介,其音羽,律中大吕(4)。其数六,其味咸,其臭朽,其祀行,祭先肾。雁北乡(5),鹊始巢,雉雊鸡乳(6)。天子居玄堂右个(7),乘玄辂,驾铁骊,载玄旂,衣黑衣,服玄玉,食黍与彘,其器宏以弇。

【注释】

(1)婺女:星宿名,二十八宿之一,又简称“女”,在今宝瓶座。

(2)娄:星宿名,二十八宿之一,在今白羊座。

(3)氐:星宿名,二十八宿之一,在今天秤座。

(4)大吕:十二律之一,属阴律。

(5)乡:向。

(6)雊(ɡòu):山鸡鸣叫。乳:鸟生子叫乳,这里指鸡孵小鸡。

(7)玄堂右个:北向明堂的右侧室。

【译文】

第一:

季冬之月,太阳的位置在婺女宿。黄昏时刻,娄宿出现在南方中天;拂晓时刻,氐宿出现在南方中天。季冬于天干属壬癸,主宰之帝是颛顼,佐帝之神是玄冥,应时的动物是龟鳖之类的甲族,相配的声音是羽音,音律与大吕相应。这个月的数字是六,味道是咸,气味是朽,要举行的祭祀是行祭,祭祀时祭品以肾脏为尊。这个月,大雁将要向北飞,喜鹊开始搭窝,山鸡鸣叫,家鸡孵卵。天子住在北向明堂的右侧室,乘坐黑色的车,车前驾黑色的马,车上插黑色的绘有龙纹的旗帜;天子穿黑色的衣服,佩戴黑色的饰玉,吃的食物是黍米和猪肉,使用的器物宏大而口敛。

命有司大傩(1),旁磔(2),出土牛,以送寒气。征鸟厉疾(3),乃毕行山川之祀,及帝之大臣、天地之神祇(4)。

【注释】

(1)傩(nuó):驱除灾疫的祭祀。

(2)旁磔(zhé):在四方之门都割裂牺牲,举行祭祀,以攘除阴气。旁,遍。磔,割牲祭神。

(3)征鸟:远飞之鸟。征,远行。厉:高。

(4)帝之大臣:指有功于民的前世公卿。神:指天神。祇(qí):指地神。

【译文】

天子命令主管官吏大规模举行傩祭,四方城门都割裂牺牲,并制作土牛,以此送寒冬之气。远飞的鸟飞得高而且快。普遍地举行对山川之神的祭祀以及对有功于民的先世公卿大臣、天神地神的祭祀。

是月也,命渔师始渔,天子亲往,乃尝鱼,先荐寝庙。冰方盛,水泽复(1),命取冰。冰已入,令告民出五种。命司农计耦耕事(2),修耒耜,具田器。命乐师大合吹而罢(3)。乃命四监收秩薪柴(4),以供寝庙及百祀之薪燎(5)。

【注释】

(1)水泽:水聚积的洼地。复:重叠。这句意思是水泽之处冰一层层冻得很坚硬。

(2)司农:负责农业的官。耦(ǒu)耕:古代的一种耕作方法,两人各执耒耜合耕一尺宽的土地。

(3)乐师:乐官之长。大合吹:大规模合奏各种吹奏乐。

(4)四监:指四监大夫。周制,天子领地内有县有郡,一县辖四郡,每郡有一大夫监临。四监大夫即监临各郡的大夫。秩薪柴:按常规应交纳的薪柴。秩,常。

(5)薪燎:焚柴祭神的燎祭。

【译文】

这个月,命令负责捕鱼的官吏开始捕鱼,天子亲自前往观看,于是品尝刚捕到的鲜鱼,品尝之前,要先进献给祖庙。这时候,冰冻得正结实,积水的池泽层层冻结,于是命令凿取冰块。冰块藏入冰窖之后,命令有司告诉百姓从谷仓中拿出五谷,选择种子。命令负责农业的官吏,谋划耕作的事情,修缮犁铧,准备耕田的农具。命令乐官举行吹奏乐的大合奏,结束一年的训练。命令王畿内的郡县大夫收缴按常规应该交纳的木柴,来供给祖庙及各种祭祀举行燔燎。

是月也,日穷于次(1),月穷于纪(2),星回于天(3)。数将几终,岁将更始。专于农民,无有所使。天子乃与卿大夫饬国典,论时令,以待来岁之宜。乃命太史次诸侯之列(4),赋之牺牲,以供皇天上帝社稷之享。乃命同姓之国,供寝庙之刍豢(5);令宰历卿大夫至于庶民土田之数(6),而赋之牺牲,以供山林名川之祀。凡在天下九州之民者(7),无不咸献其力,以供皇天上帝社稷寝庙山林名川之祀。

【注释】

(1)穷:尽。次:指十二次。古人为了说明日月星辰的运行,把黄道附近一周天从西向东分为十二等分,每个等分给一个名称,如星纪,玄枵等,这叫十二次。季冬之月,日躔于玄枵,运行一年,又终于玄枵,所以说“日穷于次”。

(2)纪:指日月相会。

(3)回:返回。以上三句是说日月星辰运行一周天,又返回到原来的位置。

(4)次:编排。诸侯:这里指与天子异姓的诸侯国。列:次序。

(5)刍豢:指祭祀用的牺牲。牛羊叫刍,猪狗叫豢。

(6)宰:指小宰,太宰的属官,帮助太宰管理政令。历:排列,依次列出。

(7)九州:古时将天下分为九州,即冀、豫、雍、扬、兖、徐、幽、青、荆。

【译文】

这个月,日月星辰绕天一周,又都回到原来的位置。一年的天数接近终了,新的一年将要重新开始。要让农民专心筹备农事,不要差遣他们干别的事情。天子与公卿大夫整饬国家的法典,讨论按季节月份制定的政令,以此来准备明年应做之事。命令太史排列各异姓诸侯的次序,使他们按国家大小贡赋牺牲,以供给对皇天上帝及社稷之神的祭祀。命令同姓诸侯供给祭祀祖庙所用的牛羊犬豕。命令小宰依次列出从卿大夫到一般老百姓所有土地的数目,使他们贡赋牺牲,以供祭祀山林河流之神使用。凡是在天下九州的百姓,必须全部献出他们的力量,以供给对皇天上帝、社稷之神、先祖神主以及山林河流之神的祭祀。

行之是令,此谓一终(1),三旬二日(2)。

【注释】

(1)一终:指一年终了。

(2)三旬二日:《季夏纪》有“甘雨三至,三旬二日”之语,此处上无所承,恐有脱文,也指雨雪而言。

【译文】

实行这些政令,这就算一年终了。……在三旬中有二日。

季冬行秋令,则白露蚤降(1),介虫为妖,四鄙入保;行春令,则胎夭多伤(2),国多固疾(3),命之曰逆(4);行夏令,则水潦败国,时雪不降,冰冻消释。

【注释】

(1)蚤:通“早”。

(2)胎夭:指在母腹中及刚出生的动物。

(3)固疾:久治不愈的病。固,同“痼”。

(4)逆:指违背时气。

【译文】

季冬如果实行应在秋天实行的政令,那么,白露就会过早降落,有甲壳的动物就会成灾,四方边邑的百姓就会为躲避来犯之敌而藏入城堡。如果实行应在春天实行的政令,那么,幼小的动物就会遭到损伤,国家就会流行久治不愈的疾病,给这种情况命名叫做“逆”。如果实行应在夏天实行的政令,那么,大水将为害国家,冬雪将不能按时降落,冰冻将会融化。

士节#

【题解】

本篇以及《季冬纪》中的《介立》、《诚廉》、《不侵》都是谈士的节操的。本篇记述了齐国的隐士北郭骚悦服晏子之义、以死为晏子洗清冤诬的事迹,宣扬了士“当理不避其难,临患忘利,遗生行义”的节操,阐发了孟子“舍身取义”的思想。文章呼吁“欲立大功名”的人主当以寻找这样的士作为要务。

二曰:

士之为人,当理不避其难(1),临患忘利,遗生行义,视死如归。有如此者,国君不得而友,天子不得而臣。大者定天下,其次定一国,必由如此人者也(2)。故人主之欲大立功名者,不可不务求此人也。贤主劳于求人,而佚于治事(3)。

【注释】

(1)当:面对。理:义。

(2)由:用。

(3)佚(yì):通“逸”,安逸。

【译文】

第二:

03季春纪第三

季春纪第三

季春#

【题解】

见《孟春》。

一曰:

季春之月,日在胃(1),昏七星中(2),旦牵牛中(3)。其日甲乙,其帝太皞,其神句芒,其虫鳞,其音角,律中姑洗(4)。其数八,其味酸,其臭膻,其祀户,祭先脾。桐始华,田鼠化为(5);虹始见,萍始生。天子居青阳右个(6),乘鸾辂,驾苍龙,载青旂,衣青衣,服青玉,食麦与羊,其器疏以达。

【注释】

(1)日在胃:指太阳的位置在胃宿。胃,星宿名,二十八宿之一,在今白羊座。

(2)七星:星宿名,即星宿,二十八宿之一,在今长蛇座。

(3)牵牛:星宿名,即牛宿,二十八宿之一,在今摩羯座。

(4)姑洗(xiǎn):十二律之一,属阳律。参见《孟春纪》注。

(5)(rú):鹌鹑之类的鸟。田鼠化为只是古人的一种传说。

(6)青阳右个:东向明堂的右侧室。

【译文】

第一:

季春三月,太阳的位置在胃宿。初昏时刻,星宿出现在南方中天;拂晓时刻,牛宿出现在南方中天。季春于天干属甲乙,主宰之帝是太皞,佐帝之神是句芒,应时的动物是龙鱼之类的鳞族,声音是中和的角音,音律与姑洗相应。这个月的数字是八,味道是酸,气味是膻,要举行的祭祀是户祭,祭祀时,祭品以脾脏为尊。这个月梧桐树开始开花,鼹鼠变成鹌鹑之类的鸟,彩虹开始出现,浮萍开始长出。天子居住在东向明堂的右侧室,乘坐饰有用青凤命名的响铃的车子,车前驾青色的马,车上插绘有龙纹的青色旗帜;天子穿青色的衣服,佩戴青色的饰玉,吃的是麦子和羊,使用的器物纹理空疏而通达。

是月也,天子乃荐鞠衣于先帝(1),命舟牧覆舟(2),五覆五反(3),乃告舟备具于天子焉。天子焉始乘舟。荐鲔于寝庙(4),乃为麦祈实。

【注释】

(1)鞠衣:指后妃们躬桑时穿的像初生的桑叶那种黄色的衣服。先帝:指太皞等古帝王。

(2)舟牧:主管船只的官。覆舟:指把船翻过来检查船底有无漏洞。

(3)反:翻转。

(4)鲔(wěi):鱼名,即鲟鱼。寝庙:指宗庙。

【译文】

这个月,天子向太皞等先帝进献黄色的衣服,祈求蚕事如意。命令主管船只的官吏把船底翻过来检查,船底船身要反复检查五次,于是向天子报告船只已经齐备。天子于是开始乘船。向祖宗进献鲟鱼,祈求麦子籽实饱满。

是月也,生气方盛(1),阳气发泄,生者毕出(2),萌者尽达,不可以内(3)。天子布德行惠,命有司发仓窌(4),赐贫穷,振乏绝(5),开府库,出币帛,周天下,勉诸侯,聘名士,礼贤者。

【注释】

(1)生气:指使万物生长发育之气。

(2)生:一作“牙”,是。牙,萌芽。毕:都,全。

(3)内(nà):纳入,指纳入财物。

(4)窌(jiào):地窖。

(5)振:同“赈”,救济。乏绝:出门在外而无川资叫乏,居于家中而无饮食叫绝。

【译文】

这个月,春天的生养之气正盛,阳气向外发散,植物的萌芽都长出来了。这个时候,不能收纳财货。天子要施德行惠,命令主管官吏打开粮仓地窖,赐与贫困没有依靠的人,赈救缺乏资用衣食的人;打开储藏财物的仓库,拿出钱财,周济天下;鼓励诸侯聘用名士,对贤人以礼相待。

是月也,命司空曰(1):“时雨将降,下水上腾,循行国邑(2),周视原野,修利堤防,导达沟渎,开通道路,无有障塞;田猎罼弋(3),罝罘罗网(4),喂兽之药,无出九门(5)。”

【注释】

(1)司空:主管土地、建筑、道路等事的官,周代为六卿之一。

(2)循:巡视。国邑:国都和城邑。

(3)罼(bì):捕捉禽兽的长柄网。弋:拴在生丝线上射出去以后可以收回的箭。

(4)罝罘(jūfú):都是捕兔的网。罗:捕鸟的网。这里罝罘罗网泛指一切捕捉禽兽的网。

(5)无:通“毋”,不要。九门:天子的都城有十二个城门,东方主生养,东方三门本来就不许上述猎具出城,这里的九门指东方三门之外的南、西、北三方九个城门。

【译文】

这个月,天子命令司空说:“应时的雨水将要降落,地下水将向上翻涌,应该巡视国都和城邑,普遍地视察原野,整修堤防,疏通沟渠,开通道路,使之没有障碍壅塞。打猎所需要的各种网具,毒杀野兽的药,不能带出城去。

是月也,命野虞无伐桑柘(1)。鸣鸠拂其羽,戴任降于桑(2),具栚曲筐(3)。后妃斋戒,亲东乡躬桑(4)。禁妇女无观(5),省妇使(6),劝蚕事。蚕事既登,分茧称丝效功(7),以共郊庙之服(8),无有敢堕(9)。

【注释】

(1)野虞:主管山林田野的官。柘(zhè):柘树,叶子可以养蚕。

(2)戴任:鸟名。

(3)栚(zhèn)曲(jǔ)筐:都是采桑养蚕的用具。栚,放蚕薄的木架的横木。曲,蚕薄(蚕箔)。,圆底的筐。筐,方底的筐。

(4)东乡(xiànɡ):向东方。乡,向。

(5)观:指游观。

(6)妇使:指妇女除养蚕之外的工作。

(7)效功:考核功效,即考核完成工作的情况。

(8)共:同“供”,供给。郊:指在郊外祭天。庙:指“供”在宗庙祭祖。

(9)堕:同“惰”,懈怠,懒惰。

【译文】

这个月,命令主管山林的官吏不要砍伐桑树、柘树。此时,斑鸠振翅高飞,戴任落在桑间。人们准备蚕薄、放蚕薄的支架以及各种采桑的筐篮。王后王妃斋戒身心,向东方亲自采摘桑叶。禁止妇女去游玩观赏,减少她们的杂役,鼓励她们采桑养蚕。蚕事已经完成,把蚕茧分给妇女,要她们缫丝,然后称量每人所缫之丝的轻重,考核她们的功效,用这些蚕丝来供给祭天祭祖所用的祭服,不许有人懈怠。

是月也,命工师令百工审五库之量(1),金铁、皮革筋、角齿、羽箭干、脂胶丹漆,无或不良。百工咸理,监工日号(2),无悖于时,无或作为淫巧(3),以荡上心。

【注释】

(1)工师:统领百工的官。百工:指各种工匠。库:储藏器材的五种仓库,金铁为一库,皮革筋为一库,角齿为一库,羽箭杆为一库,脂胶丹漆为一库。

(2)监工:监督百工的官,由工师担任。日号:每日发布号令。

(3)淫巧:过分奇巧,这里指过分奇巧之物。淫,过分。

【译文】

这个月,命令主管百工的官吏让百工仔细检查各种库房中器材的数量和质量,金铁、皮革兽筋、兽角兽齿、羽毛箭杆、油脂粘胶丹砂油漆,不许质地不好。各种工匠都从事自己的工作,监督百工的官员每日发布号令,使所制器物不违背时宜,不得制作过分奇巧的器物,来勾动在上位者的奢望。

是月之末,择吉日,大合乐(1),天子乃率三公、九卿、诸侯、大夫,亲往视之。

【注释】

23贵直论第三

贵直论第三

贵直#

【题解】

封建社会中,君主能否虚心纳谏是关系功业成败、国家存亡的重要问题。对于这个问题,本书多处论及,本论大部分篇目则集中加以讨论。

本篇主要论述君主要尊崇直言敢谏之士,虚心听取他们的逆耳之言。文章赞扬了狐援、烛过这样的“直士”的耿介忠贞,同时以齐湣王和赵简子为例,说明对直士态度不同,结果也就不同。

一曰:

贤主所贵莫如士。所以贵士,为其直言也。言直则枉者见矣(1)。人主之患,欲闻枉而恶直言。是障其源而欲其水也,水奚自至?是贱其所欲而贵其所恶也(2),所欲奚自来?

【注释】

(1)枉:邪曲。见(xiàn):显露。

(2)所欲:指“闻枉”。所恶(wù):指恶闻直言的做法。

【译文】

第一:

贤明的君主所崇尚的莫过于士人。之所以崇尚士人,是因为他们言谈正直。言谈正直,邪曲就会显现出来了。君主的弊病,在于想闻知邪曲却又厌恶正直之言。这就等于阻塞水源又想得到水,水又从何而来?这是轻贱自己想要得到的而尊尚自己所厌恶的,想要得到的又从何而来?

能意见齐宣王(1)。宣王曰:“寡人闻子好直,有之乎?”对曰:“意恶能直?意闻好直之士,家不处乱国,身不见污君。身今得见王(2),而家宅乎齐,意恶能直?”宣王怒曰:“野士也!”将罪之。能意曰:“臣少而好事,长而行之,王胡不能与野士乎(3),将以彰其所好耶?”王乃舍之。若能意者(4),使谨乎论于主之侧,亦必不阿主。不阿(5),主之所得岂少哉?此贤主之所求,而不肖主之所恶也。

【注释】

(1)能意:战国时齐国人,姓能,名意。

(2)身今得见王:当作“今身得见王”。

(3)与:用,听取。

(4)能意者:当作“若能意者”。

(5)不阿:当作“不阿主”。

【译文】

能意见齐宣王。宣王说:“我听说你喜好正直,有回事吗?”能意回答说:“我哪里能做到正直?我听说喜好正直的士人,家不住在政治混乱的国家,自身不见德行污浊的君主。如今我来见您,家又住在齐国,我哪里能算得上正直!”宣王生气地说:“真是个鄙野的家伙!”打算治他的罪。能意说:“我年少时喜好直言争辩,长大以后一直这样做,您为什么不能听取鄙野之士的言论,来彰明他们的爱好呢?”宣王于是赦免了他。像能意这样的人,如果让他在君主身边谨慎地议事,一定不会曲从君主。不曲从君主,君主得到的教益难道会少吗?这正是贤明的君主所追求的,不肖的君主所厌恶的。

狐援说齐湣王曰(1):“殷之鼎陈于周之廷(2),其社盖于周之屏(3),其干戚之音在人之游(4)。亡国之音不得至于庙,亡国之社不得见于天,亡国之器陈于廷,所以为戒。王必勉之!其无使齐之大吕陈之廷(5),无使太公之社盖之屏(6),无使齐音充人之游。”齐王不受。狐援出而哭国三日,其辞曰:“先出也,衣纻(7);后出也,满囹圄。吾今见民之洋洋然东走而不知所处(8)。”齐王问吏曰:“哭国之法若何?”吏曰:“斮(9)。”王曰:“行法!”吏陈斧质于东闾(10),不欲杀之,而欲去之。狐援闻而蹶往过之(11)。吏曰:“哭国之法斮,先生之老欤?昏欤?”狐援曰:“曷为昏哉?”于是乃言曰:“有人自南方来,鲋入而鲵居(12),使人之朝为草而国为墟(13)。殷有比干,吴有子胥,齐有狐援。已不用若言(14),又斮之东闾,每斮者以吾参夫二子者乎(15)!”狐援非乐斮也,国已乱矣,上已悖矣,哀社稷与民人,故出若言。出若言非平论也,将以救败也,固嫌于危(16)。此触子之所以去之也,达子之所以死之也(17)。

【注释】

(1)狐援:战国齐臣,他书或作“狐咺”、“狐爰”。齐湣王:战国齐国君,名地,齐宣王子。

(2)鼎:古代一种礼器,被视为立国的重器,政权的象征。

(3)社:祭祀土神处,也是国家政权的象征。屏:屏障,这里指遮盖神社的棚屋之类。

(4)干戚之音:武舞的音乐。古代舞蹈分文、武两种,文舞执羽旄,武舞执干戚。干,盾牌。戚,大斧。这里以“干戚之音”指代殷商的宫廷音乐。游:游乐。

(5)大吕:齐钟名。

(6)太公:战国田齐的开国始祖,姓田,名和,原为齐康公相,后逐康公,取代姜姓自立为诸侯。

(7)衣纻(chīzhù):意思是生活可得温饱。,用葛草纤维织成的较细的布。纻,用苎麻织的粗布。

(8)洋洋然:犹“茫茫然”,心神不定,无所依归的样子。

(9)斮(zhuó):斩。

(10)东闾:齐国都的东门。

(11)蹶:跌倒,这里指走路跌跌撞撞。过:访,见。

(12)鲋(fù)入:像鲫鱼一样地进来。鲋,鲫鱼。鲫鱼体小,用以形容恭谨谦卑。鲵(ní)居:像鲸鲵一样地处于齐国。鲵,雌鲸。鲸体大,吞食小鱼,用以形容凶残。

(13)为草:变为草莽。狐援这些话当有所指。史载,齐湣王四十年(前284),燕、秦、韩、赵、魏等国伐齐,齐湣王奔卫。楚派淖(zhuō)齿率兵救齐,遂为湣王相,继而淖齿杀湣王,与燕国瓜分了齐国原来侵占的土地和宝器。狐援之言或与当时形势有关。《战国策·齐策》以狐咺(援)说湣王与湣王被杀事为一章。

(14)若:代词,这。

(15)每:当,将。参(sān):使比并为三。

(16)嫌:近。危:言语惊人。

(17)触子、达子:都是齐湣王之臣,其事见《慎大览·权勋》篇。

【译文】

狐援劝齐湣王说:“殷商的九鼎被摆放在周的朝廷上,它的神社被盖上周的庐棚,它的舞乐被人们用在游乐中。亡国的音乐不准进入宗庙,亡国的神社不准见到天日,亡国的重器被摆放在朝廷上,这些都是用来警戒后人的。您一定要好自为之啊!千万不要让齐国的大吕摆在别国的朝廷,不要让太公建起的神社被人罩盖上庐棚,不要让齐国的音乐充斥在别人的游乐之中。”齐王不听他的劝谏。狐援离开朝廷以后,为国家即将到来的灾难哭了三天,哭道:“先离开的,尚可穿布衣;后离开的,遭难满监狱。我即将看到百姓仓惶东逃,不知道在哪里安居。”齐王问狱官说:“国家太平无事却给它哭丧的,按法令该治什么罪?”狱官回答说:“当斩。”齐王说:“照法令行事!”狱官把刑具摆在国都东门,不愿杀死狐援,只想把他吓跑。狐援听到这个消息,反倒跌跌撞撞地去见狱官。狱官说:“国家无事而为国哭丧的依法当斩,您这样做,是老糊涂了呢,还是头脑发昏呢?”狐援说:“怎么是发昏呢!”于是进一步说道:“有人从南方来,进来时像鲫鱼那样恭顺谦卑,住下以后却像鲸鲵那样凶狠残暴,使别人朝廷变为草莽,国都变为废墟。殷商有个比干,楚国有个伍子胥,齐国有个狐援。既不听我的这些话,又要在东门把我杀掉,这是要把我同比干、伍子胥比并为三吧!”狐援并不是乐于被杀,国家太混乱了,君主太昏愦了,他哀怜国家和人民,所以才说这样的话。这些话并不是持平之论,他是想用以挽救国家的危亡,所以讲的话才近于危言耸听。湣王不纳忠言却戮辱直士,这正是触子弃之而去的原因,也正是达子战败而死于齐难的原因。

赵简子攻卫,附郭(1)。自将兵,及战,且远立,又居于屏蔽犀橹之下(2)。鼓之而士不起。简子投桴而叹曰(3):“呜呼!士之速弊一若此乎!”行人烛过免胄横戈而进曰(4):“亦有君不能耳,士何弊之有?”简子艴然作色曰(5):“寡人之无使,而身自将是众也,子亲谓寡人之无能,有说则可,无说则死!”对曰:“昔吾先君献公即位五年(6),兼国十九,用此士也。惠公即位二年(7),淫色暴慢,身好玉女,秦人袭我,逊去绛七十(8),用此士也。文公即位二年,厎之以勇(9),故三年而士尽果敢;城濮之战(10),五败荆人,围卫取曹,拔石社(11),定天子之位(12),成尊名于天下,用此士也。亦有君不能耳,士何弊之有?”简子乃去屏蔽犀橹,而立于矢石之所及,一鼓而士毕乘之。简子曰:“与吾得革车千乘也(13),不如闻行人烛过之一言。”行人烛过可谓能谏其君矣。战斗之上(14),桴鼓方用,赏不加厚,罚不加重,一言而士皆乐为其上死。

【注释】

(1)附:迫近。郭:外城。

(2)屏蔽屏橹:当作“屏掩犀橹”。屏蔽,掩蔽物。犀橹:犀皮制作的大盾牌。

(3)桴(fú):鼓槌。

(4)行人:官名,负责外交事务。胄:头盔。“免胄横戈”是手执武器、甲胄在身的臣下谒见君主时的礼节,以示恭敬。

(5)艴(bó)然:盛怒的样子。作色:因发怒脸上变色。

(6)献公:晋献公,春秋晋国君。

(7)惠公:晋惠公,晋献公之子。

(8)逊:逃遁。去:离,距离。绛:指新绛,晋国都,在今山西曲沃西南。

(9)厎(dǐ):通“砥”,磨砺。

(10)城濮之战:公元前632年晋楚两国在城濮进行的一次战争,结果晋获全胜。城濮:春秋卫地,在今河南范县南。

(11)石社:地名,所在不详。

(12)定天子之位:晋文公元年(前636),周襄王之弟叔带率狄人伐周,襄王出奔郑。第二年,晋文公兴兵诛叔带,复纳襄王。“定天子之位”即指这件事。

(13)与:与其。革车:兵车。

(14)上:等于说“时”。

【译文】

赵简子进攻卫国,逼近外城。他亲自统率军队,可是到了交战的时候,却站得远远的,躲在屏障和盾牌后面。简子击鼓,士卒却动也不动。简子扔下鼓槌感叹道:“哎!士卒变坏竟然快到这个地步!”这时,行人烛过摘下头盔,横拿着戈走上前说:“只不过是您有些地方没能做到罢了,士卒有什么不好!”简子气得勃然变色,说:“我不委派他人而亲自统率这些士卒,你却当面说我无能。你说的有理便罢,没理就治你死罪!”烛过回答说:“从前我们先君献公,即位五年就兼并了十九个国家,用的就是这些士卒。惠公即位二年,纵情声色,残暴傲慢,喜好美女,秦人袭击我国,晋军溃逃到离绛城只有七十里的地方,用的也是这些士卒。文公即位二年,以勇武砥砺士卒,所以三年之后士卒都变得坚毅果敢;城濮之战,五次打败楚军,围困卫国,夺取曹国,攻占石社,安定天子的王位,显赫的名声扬于天下,用的还是这些士卒。所以说只不过是您有些地方没能做到罢了,士卒有什么不好?”简子于是离开屏障和盾牌,站立到箭矢可以射到的地方,只击鼓一通士卒就全都登上了城墙。简子说:“与其让我获得兵车千辆,不如听到行人烛过一席话!”行人烛过可算得上能劝谏他的君主了。正当击鼓酣战之时,赏赐不增多,刑罚不加重,只说了一席话,就使士卒都乐于为君上效死。

直谏#

【题解】

本篇意在告诫君主,直士都是不求私利、敢于犯危的贤者,对此应予体察,使自己“可与言极言”,这样才能国存身安。齐桓公称霸、楚文王兼国三十九就是最好的例证。文章通过对鲍叔牙和葆申的赞扬,也为臣下树立了直言的榜样。

本篇与上篇立意相同,都是从君臣两个方面讨论听谏和进言的原则的。

二曰:

言极则怒,怒则说者危。非贤者孰肯犯危?而非贤者也,将以要利矣(1);要利之人,犯危何益?故不肖主无贤者。无贤则不闻极言,不闻极言,则奸人比周(2),百邪悉起。若此则无以存矣。凡国之存也,主之安也,必有以也(3)。不知所以,虽存必亡,虽安必危。所以不可不论也。

24不苟论第四

不苟论第四

不苟#

【题解】

本篇论臣下应持的操守。所谓“不苟”有两个含义:一是笃行礼义,即“必中理然后动,必当义然后举”。五人之佐不肯为武王系、蹇叔不肯为穆公出不义之谋、赵衰辞赏三例都是说明这一点的。二是谨守分职。公孙枝请见客而受罚,说明不得越职而行。前者是儒家“非礼勿言,非礼勿动”的翻版,后者则是法家“治不逾官”思想的体现。

一曰:

贤者之事也,虽贵不苟为,虽听不自阿(1),必中理然后动,必当义然后举。此忠臣之行也,贤主之所说,而不肖主之所不说。非恶其声也。人主虽不肖,其说忠臣之声与贤主同,行其实则与贤主有异。异,故其功名祸福亦异。异,故子胥见说于阖闾,而恶乎夫差;比干生而恶于商,死而见说乎周(2)。

【注释】

(1)阿:私。

(2)死而见说(yuè)乎周:武王灭商后,曾封比干表彰他的忠义。

【译文】

第一:

贤明的人做事,即使地位尊贵也不随意而行,即使为君主所听信也不借以谋私,一定要合于事理然后才行动,符合道义然后才去做。这是忠臣的德行,是贤明的君主所赏识的,不肖的君主所厌恶的。不肖的君主并不是厌恶忠臣的声音。他们虽然不肖,喜欢忠臣的声音跟贤明的君主还是相同的,但实际做起来却跟贤明的君主不同。实际行动不同,所以他们的功名祸福也就不同。正因为不同,所以伍子胥被阖闾赏识,却被夫差厌恶;比干活着时被商纣厌恶,死后却被周朝赞赏。

武王至殷郊,系堕(1)。五人御于前(2),莫肯之为,曰:“吾所以事君者,非系也。”武王左释白羽(3),右释黄钺(4),勉而自为系。孔子闻之曰:“此五人者之所以为王者佐也,不肖主之所弗安也。”故天子有不胜细民者,天下有不胜千乘者。

【注释】

(1)系:带子,这里指袜带。

(2)五人:指周武王的五个辅臣,即周公旦、召公奭、太公望、毕公高、苏公忿生。御:侍。

(3)白羽:用白色羽毛装饰的旗帜。

(4)黄钺:用黄金作装饰的大斧。白羽、黄钺都是古代的仪仗。

【译文】

周武王率大军伐纣,到了殷都郊外,袜带掉了下来。当时他的五个辅臣都在身边陪侍,没有一个人肯替他把带子系上,他们说:“我们来侍奉君主,并不是替他系带子的。”武王左手放下白羽,右手放下黄钺,自己费力地把带子系上了。孔子听到这件事后说:“这正是五个人之所以成为王者辅臣的原因,也正是不肖的君主所不能容忍的。”所以天子有时不能胜过小民,占有天下者有时不能胜过只有千辆兵车的诸侯国。

秦缪公见戎由余(1),说而欲留之,由余不肯。缪公以告蹇叔。蹇叔曰:“君以告内史廖(2)。”内史廖对曰:“戎人不达于五音与五味(3),君不若遗之(4)。”缪公以女乐二八人与良宰遗之(5)。戎王喜,迷惑大乱,饮酒昼夜不休。由余骤谏而不听(6),因怒而归缪公也。蹇叔非不能为内史廖之所为也,其义不行也(7)。缪公能令人臣时立其正义,故雪殽之耻(8),而西至河雍也(9)。

【注释】

(1)由余:祖先为晋人,亡入西戎,后归附秦穆公,辅佐穆公霸西戏。

(2)内史廖:名字叫廖的内史。内史,官名,周代开始设置,掌管爵禄赏罚。

(3)达:通晓。

(4)遗(wèi):赠送,送给。

(5)二八人:“人”字为衍文。

(6)骤:屡次。

(7)其义不行:遗女乐良宰使戎王迷乱,并使其君臣不和,这是不义的事,所以蹇叔不做。

(8)雪殽之耻:秦穆公三十六年(前624,秦晋殽之战后三年),秦伐晋,取晋地,并埋葬死于殽的秦军尸骨,起土为坟。“雪殽之耻”即指这件事。雪,洗刷。

(9)河雍:指古雍州,包括今陕西、甘肃两省大部及青海省一部分地区。

【译文】

秦穆公见到戎国的由余,很赏识他,想把他留下。由余不答应。穆公将此事告诉了蹇叔。蹇叔说:“您可以把此事告诉给内史廖。”内史廖听了,回答说:“戎人不懂得音乐和美味,您不如把这些东西送给他们。”穆公就把两队女乐和技艺高超的厨师送给了戎人。戎王十分高兴,神魂颠倒,饮酒昼夜不止。由余多次劝谏,戎王不听,因而一怒之下归附了秦穆公。蹇叔并不是不能做内史廖做的事,而是他所遵守的道义不允许这样做。秦穆公能让臣下时时坚持自己的道义,所以能洗刷殽之战的耻辱,把疆土向西开拓到雍州。

秦缪公相百里奚。晋使叔虎、齐使东郭蹇如秦(1),公孙枝请见之(2)。公曰:“请见客,子之事欤?”对曰:“非也。”“相国使子乎?”对曰:“不也。”公曰:“然则子事非子之事也(3)。秦国僻陋戎夷(4),事服其任(5),人事其事,犹惧为诸侯笑,今子为非子之事!退!将论而罪(6)。”公孙枝出,自敷于百里氏(7)。百里奚请之。公曰:“此所闻于相国欤?枝无罪,奚请?有罪,奚请焉?”百里奚归,辞公孙枝。公孙枝徙(8),自敷于街。百里奚令吏行其罪。定分官(9),此古人之所以为法也。今缪公乡之矣(10)。其霸西戎,岂不宜哉?

【注释】

(1)叔虎:晋大夫,即下文的郤子虎。姓郤,名豹,字叔虎。东郭蹇:齐大夫,姓东郭,名蹇。

(2)公孙枝:秦大夫,字子桑。

(3)子事非子之事:第一个“事”字为动词,做。第二个“事”字为名词,指按职分应做的事。

(4)僻陋戎夷:指处于戎夷所居的僻陋之地。

(5)服:任用。

(6)而:你。

(7)敷:陈说。

(8)徙:指离开百里奚处。

(9)分(fèn)官:名分职守。

(10)乡(xiàng):向,趋向。

【译文】

秦穆公任命百里奚为相国。这时,晋派叔虎、齐派东郭蹇出使秦国,公孙枝请求会见他们。穆公说:“请求会见客人,这是你职分内的事吗?”公孙枝回答说:“不是。”穆公又问:“是相国委派你了吗?”回答说:“没有。”秦穆公说:“既然这样,你是要做不该你做的事。秦国偏僻荒远,处于戎夷之地,即使是事事都有专职,人人各守其责,仍然怕被诸侯耻笑,而现在你竟然要做不该你做的事!下去吧!将审理惩治你的罪过!”公孙枝出来,到百里奚那里陈述事情的原委。百里奚替他向穆公求情。穆公说:“这样的事是相国该过问的吗?公孙枝没有罪的话,有什么必要求情?要是有罪的话,求情又有什么用?”百里奚回来,回绝了公孙枝。公孙枝转而又到闹市中去陈诉。百里奚命令官吏对公孙枝论罪行罚。确定官员的名分职守,这是古人实行法治的方法。如今秦穆公已朝这个方向努力了。他称霸西戎,难道不是情理之中的吗?

晋文公将伐邺(1),赵衰言所以胜邺之术(2)。文公用之,果胜。还,将行赏。衰曰:“君将赏其本乎?赏其末乎?赏其末,则骑乘者存(3);赏其本,则臣闻之郤子虎。”文公召郤子虎曰:“衰言所以胜邺,邺既胜,将赏之,曰:‘盖闻之于子虎,请赏子虎。’”子虎曰:“言之易,行之难,臣言之者也。”公曰:“子无辞。”郤子虎不敢固辞,乃受矣。凡行赏欲其博也,博则多助。今虎非亲言者也,而赏犹及之,此疏远者之所以尽能竭智者也。晋文公亡久矣,归而因大乱之余(4),犹能以霸,其由此欤?

【注释】

(1)邺:春秋卫地,在今河北临漳。

(2)赵衰:晋大夫,曾从晋文公出亡,谥成子。

(3)骑乘者:泛指将士。

(4)因:承袭。

【译文】

晋文公将要伐邺,赵衰提出了胜邺的方法。文公采纳了他的建议,果然获得胜利。伐邺归来,文公将要赏赐他。赵衰说:“您是要赏赐根本呢,还是要赏赐末节呢?如果赏赐末节,那么有参战的将士在;如果赏赐根本,那么我的建议是从郤子虎那里听来的。”文公召见郤子虎,说:“赵衰提出了胜邺的方法,现在伐邺已经获胜,我要赏赐他,他说:‘我是从子虎那里听来的,请赏赐子虎。’”郤子虎说:“事情谈起来容易,做起来难,我只是个谈了几句的人。”文公说:“你就不要推辞了。”郤子虎不敢坚决推辞,才接受了赏赐。凡是奖赏,赏赐的范围应该越大越好,范围大,得到的帮助就多。如今郤子虎并不是直接进言的人,而奖赏仍然赏赐到他,这是关系疏远的人之所以能为君主竭尽才智的原因。晋文公流亡在外很久了,回国后继承的又是大乱以后的残破局面,但仍能凭这种条件成就霸业,大概就是这个原因吧!

赞能#

【题解】

“赞能”即举任贤能。本篇以鲍叔牙和沈尹茎举贤为例,从举荐人才的角度阐述任贤的思想。文章指出“功无大乎进贤”,“得地千里,不若得一圣人”,旨在倡导为臣者当以举贤为己任,并强调了得贤对于成就王霸之业的决定性作用。

二曰:

贤者善人以人(1),中人以事,不肖者以财。得十良马,不若得一伯乐;得十良剑,不若得一欧冶(2);得地千里,不若得一圣人。舜得皋陶而舜授之,汤得伊尹而有夏民,文王得吕望而服殷商。夫得圣人,岂有里数哉(3)?

【注释】

(1)善:亲善。以人:指根据这个人的仁德。人,通“仁”。

(2)欧冶:春秋时冶工,善铸剑。

(3)岂有里数哉:得圣人即可得天下,而天下土地不止千里,所以说“岂有里数哉”。

【译文】

第二:

贤明的人同人亲善是根据这个人的仁德,一般的人同人亲善是根据这个人的功业,不肖的人同人亲善是根据这个人的财富。得到十匹好马,不如得到一个善于相马的伯乐;得到十口宝剑,不如得到一个善于铸剑的欧冶;得到千里土地,不如得到一个圣人。舜得到皋陶就用他治好了天下,汤得到伊尹就拥有了夏的民众,周文王得到吕望就征服了殷商。得到圣人,所能得到的土地哪能以里数计量呢!

管子束缚在鲁,桓公欲相鲍叔。鲍叔曰:“吾君欲霸王,则管夷吾在彼。臣弗若也。”桓公曰:“夷吾,寡人之贼也(1),射我者也,不可。”鲍叔曰:“夷吾,为其君射人者也。君若得而臣之,则彼亦将为君射人。”桓公不听,强相鲍叔。固辞让,而相桓公果听之(2)。于是乎使人告鲁曰:“管夷吾,寡人之雠也,愿得之而亲加手焉。”鲁君许诺(3),乃使吏鞹其拳(4),胶其目,盛之以鸱夷(5),置之车中。至齐境,桓公使人以朝车迎之(6)。祓以爟火(7),衅以牺猳焉(8),生与之如国。命有司除庙筵几(9),而荐之曰(10):“自孤之闻夷吾之言也,目益明,耳益聪,孤弗敢专,敢以告于先君。”因顾而命管子曰:“夷吾佐予!”管仲还走(11),再拜稽首,受令而出。管子治齐国,举事有功,桓公必先赏鲍叔,曰:“使齐国得管子者,鲍叔也。”桓公可谓知行赏矣。凡行赏欲其本也,本则过无由生矣。

【注释】

(1)贼:杀人者。

将epub文件转换为md文件

这是后续记录,好几个月前处理的,因此步骤可能有漏,尽量回忆

下载epub格式书籍#

https://zh.z-lib.fm/ ,网址时不时失效,需要到https://yinghezhinan.com/site/z-library/找到最新网址。注册后下载软件默认是不需要钱的,但是非会员一天只能下载10本(可以多注册几个号,只要求邮箱注册即可),正常情况下够用我这里用《吕氏春秋》这本书举例

epub编辑器#

我这里用的calibre便捷版7.19,具体谷哥一搜便有,不详细讲了(主要是太久了,怕有些细节忘了,不如不说)

编辑目录#

处理前需要先把epub文件备份一下,这里会修改源文件。

编辑书籍#

编辑处理#

一开始的目录长这样

我习惯把前面几章和后面几章都各自归为一章(下面的处理逻辑,会把每一章处理成单独的一个md文件)
随便找一个,右键编辑目录即可
然后在第一个前新建一个书名-版权-前言-目录,之后把其他二三次五级目录都删掉即可,如图:

小技巧:先全选,然后同时按住ctrl+大标题(依次取消大标题选择,然后全部删除小标题)

完毕后点击确定,然后ctrl+s保存,关闭编辑窗口

epub拆分#

现在需要把epub文件进行拆分

注意这几个地方,现在先看一下目前目录结构,点击书籍文件,然后查看他的上级目录,目前只有一本

回到calibre软件,选中书籍,点击Epub拆分功能,ctrl+a全选章节,然后点击每个章节一本书,这里就会多出27本
现在我们再查看刚才的D:\software\calibre\Calibre Portable\Calibre Library\Lu Jiu目录除了一本书原书,其他都是新拆分出来的

拆分后的epub转换成txtZ格式#

选中拆分后的27个文件

转换书籍–>输出格式txtZ(其他设置默认)
随便点一本书的文件夹进去看,会发现多了一个txtZ文件
可以复制一份.txtZ文件,之后改成.zip,会发现就是txt文件+image图片的文件堆了(为了不影响脚本功能,记得删除这里的.zip文件)

shell-批量将txtZ转换成md#

我写了个shell脚本处理epub转md文件,由于个人使用,没有太过讲究,所以有一些限制,建议在linux环境下运行,当然,我是在windows10+cmder下运行该脚本的。脚本内容如下:

脚本#

n=$#
if [ $n -ne 2 ] ; then
   echo -e "Please set the dir(source)(book目录) dir(dest)(md目录). "
   exit 0
fi

#待处理的txtz文件目录
bookDir=$1;
dirMd=$2; 

initDirMd(){
fileName="$1/_index.md" 
cat >> $fileName <<-_EOF_
---
bookCollapseSection: true
title:
---
_EOF_
# echo "创建$fileName成功"
}
initContentMd(){
fileName="$1/index.md"
time=`date '+%Y-%m-%dT%H:%M:%S%:z'`
cat >> $fileName <<-_EOF_
---
title: 
description: 
categories:
  - 学习
tags: 
  - MySQL
  - MySQL是怎样运行的
cssAttach: 
  - book01
cssclasses: 
  - book01
date: $time
lastmod: $time
---
_EOF_
# echo "创建$fileName成功"
}

#遍历books目录并在相应位置创建目录
iterateBooks(){

	local dirBook=$1;
	local dirMd=$2;
	local files=$(ls "$dirBook")
	#echo "$files"
	#临时修改SHELL中的分隔符
	oldIFS=$IFS
	IFS=$'\n'
	initDirMd "$dirMd"
	for file in $files; do
		local fullPathFile="$dirBook/$file";
		if [[ -d $fullPathFile ]]; then
			# echo $file 
			#如果是目录则在目录创建对应的目录
			mkdir -p "$dirMd/$file" 
			initContentMd "$dirMd/$file" 
			#处理目录下文件
			handleDir "$fullPathFile" "$dirMd/$file"
		fi
	done
	IFS=$oldIFS
}

#处理目录下的文件
handleDir(){ 
	local dirBook=$1;
	local dirMd=$2;
	local files=$(ls "$dirBook")
	#echo "$files"
	#临时修改SHELL中的分隔符
	oldIFS=$IFS
	IFS=$'\n'
	for file in $files; do
		#如果是.txtz结尾
		if [[ $(expr "$file" : ".\+\.txtz$") > 0 ]]; then
			local fullPathFile="$dirBook/$file";
			cp -r "$fullPathFile" "$fullPathFile.zip"
		    echo "$fullPathFile"
			unzip -qo  "$fullPathFile" -d $dirBook
			rm "$fullPathFile.zip"

			#处理解压后的文件
			#sed -Ei "s/^##(.*?\s)/\1/g" index.txt 
			# sed不支持PCRE
			# \\\\\[用来取 \[ 
			#sed -Ei "s/\\\\\[([0-9]+)\\\\\]/[\1]/g"  index.txt 

			#替换图片地址
			# 这里-i -pe 一个不能去掉,且顺序不能改。且p去掉没效果,不知道原因
			# perl命令行加上"-e"选项,就能在perl命令行中直接写perl表达式
			# -i:对输入的每一行执行一次代码,并进行原地编辑(覆盖原文件)
			# -p:对输入的每一行执行一次Perl代码,并打印输出结果。 
			# g是全局,p:保存匹配的字符串到${^PREMATCH} ${^MATCH} ${^POSTMATCH}中,它们在结果上对应$` $& $'
			perl -i -pe 's/(\!\[.*?\])\(images/$1\(img/gp' "$dirBook/index.txt"
			#perl中$&表示整个字符串
			# perl -i -pe 's/(\!\[.*?\])\(img.*?\)/$&  \n/gp' "$dirBook/index.txt"
			#替换\(\) \[\]之类的默认转义(不需要)
			perl -i -pe 's/\\\[(.*?)\\\]/\[$1\]/gp' "$dirBook/index.txt"
			perl -i -pe 's/\\\((.*?)\\\)/\($1\)/gp' "$dirBook/index.txt"
			# 反引号`,星号*,下划线_
			perl -i -pe 's/\\`/`/gp' "$dirBook/index.txt"
			perl -i -pe 's/\\\*/\*/gp' "$dirBook/index.txt"
			perl -i -pe 's/\\_/_/gp' "$dirBook/index.txt"
			#标题降1级(#\s+)\*{2}(.*?)\*{4}
			perl -i -pe 's/^#(.*?\s)/$1/gp' "$dirBook/index.txt" 

			#去除#号后面4个星号(#\s+)(.*?)\s*\n\*{4}\s*\n\*{2}(.*)
			#perl -i -0 -pe 's/(#\s+)\*{2}(.*?)\*{4}.*\n\*{4}.*\n\*{2}(.*)\n.*\n/$1$2 $3/gp' "$dirBook/index.txt" 
			


			#去除#后面连续的4个星号
			#perl -i -pe 's/^(#.*?\s)\*{4}/$1/gp' "$dirBook/index.txt" 
			#去除#号后面4个星号(#\s+)\*{2}(.*?)\*{4}
			#perl -i -pe 's/(#\s+)\*{2}(.*?)\*{4}/$1$2/gp' "$dirBook/index.txt"
			#处理img图片
			# sed -Ei "s/(\!\[\.*?\])\(images/\1\(img/g"  "$dirBook/index.txt"
			#替换\(\) \[\]之类的默认转义(不需要)
			# sed -Ei "s/\\\\\[/[/g"  "$dirBook/index.txt"
			# sed -Ei "s/\\\\\]/]/g"  "$dirBook/index.txt"
			# sed -Ei "s/\\\\\(/(/g"  "$dirBook/index.txt"
			# sed -Ei "s/\\\\\)/)/g"  "$dirBook/index.txt"			
			#去除#后面连续的4个星号
			# sed -Ei "s/\*{4}//g"  "$dirBook/index.txt"
			# sed -Ei "s/\\\\\[(.*?)\\\\\]/[\1]/g"  "$dirBook/index.txt"
			# sed -Ei "s/\\\\\((.*?)\\\\\)/(\1)/g"  "$dirBook/index.txt"			
			#标题降1级
			# sed -Ei  "s/^#(.*?\s)/\1/g"  "$dirBook/index.txt"
			mkdir -p "$dirMd/img" 
			cp -r "$dirBook"/images/* "$dirMd/img"
			rm -rf "$dirBook"/images
			echo -ne "\n" >>  "$dirMd/index.md"
			# echo "23" >>  "$dirMd/index.md"
			cat "$dirBook/index.txt" >>  "$dirMd/index.md"
			rm -rf "$dirBook"/index.txt
		fi
	done
	IFS=$oldIFS

}
iterateBooks "$bookDir" "$dirMd"
# handleDir "$bookDir" "$dirMd"

将脚本放在某个目录下(随意)

01-04设置cpp

WelcomeToCpp#

  • 使用c++可以控制CPU应该执行的每条指令
  • C++的代码编译后可以在任何平台运行,前提是有一个为对应平台生成机器代码的编译器
  • 与C++不同,C#或JAVA,他们在虚拟机中运行,运行时将代码从“中间语言”转换为机器代码
  • 学习新事物的关键就是对事物进行实验
  • 将讨论如何利用C++库
  • C++实际上如何工作
  • 关于内存和指针:内存区域,智能指针,移动语义,模板
  • 宏,以及为多个平台编程
  • 编写自己的数据结构,学习如何使他们比C++标准库中的结构更快
  • 低级优化,与编译器和汇编相关

设置C++#

windows平台#

  1. 需要文本编辑器,将C++代码编写为文本文件,传递给编译器以生成某种可执行二进制文件,以便可以运行

  2. 或者跳过1,直接用IDE,即有一套帮助你编写和调试代码的工具。(Visual Studio,视频用的2017,我这里下载的 Visual Studio Community 2022)

  3. 安装勾选:

  4. 新建项目

    不要勾选 Place solution and project in the same directory

    解决方案,solution,是一组相互关联的项目,他们有各种项目类型,解决方案就像工作台,每个项目本质上是一组文件,会编译成目标二进制文件(无论是库还是实际的可执行文件)

  5. 添加新项

  6. 代码文件(Main.cpp)

#include <iostream>
int main() {
	std::cout << "hello world!" << std::endl;
	std::cin.get();
}

配置文件修改#

下载ChernoVS.vssettings文件,并放到下面的位置
C:\Users\ly\AppData\Local\Microsoft\VisualStudio\17.0_f89cedea\Settings

在vs工具栏中-tools-ImportAndExportSettings-

ImportSelectedEnvironmentSettings

选择no,just Import new,选择 ChernoVS.vssetings即可

运行#

  1. 右键,构建(项目)


    文件系统查看:

  2. 双击.exe文件,结果:


    按任意键终止


或者单机本地的Windows调试器来运行它

154【杂项】算竞常用_C++_STL_用法

C++ 标准模板库 (STL, Standard Template Library):包含一些常用数据结构与算法的模板的 C++ 软件库。其包含四个组件——算法 (Algorithms)、容器 (Containers)、仿函数 (Functors)、迭代器 (Iterators).

示例:

  • 算法:sort(a.begin(), a.end())
  • 容器:priority_queue<int> pque
  • 仿函数:greater<int>()
  • 迭代器:vector<int>::iterator it = a.begin()

1 前言#

STL 作为一个封装良好,性能合格的 C++ 标准库,在算法竞赛中运用极其常见。灵活且正确使用 STL 可以节省非常多解题时间,这一点不仅是由于可以直接调用,还是因为它封装良好,可以让代码的可读性变高,解题思路更清晰,调试过程 往往 更顺利。

不过 STL 毕竟使用了很多复杂的结构来实现丰富的功能,它的效率往往是比不上自己手搓针对特定题目的数据结构与算法的。因此,STL 的使用相当于使用更长的运行时间换取更高的编程效率。因此,在实际比赛中要权衡 STL 的利弊,不过这一点就得靠经验了。

接下来,我会分享在算法竞赛中常用的 STL 容器和算法,对于函数和迭代器,就不着重展开讲了。

2 常用容器#

2.1 内容总览#

打勾的是本次将会详细讲解的,加粗的是算法竞赛中有必要学习的。

  • 顺序容器

    • array

    • vector

    • deque

    • forward_list

    • list

  • 关联容器

    • set
    • map
    • multiset
    • multimap
  • 无序关联容器

    • unordered_set
    • unordered_map
    • unordered_multiset
    • unordered_multimap
  • 容器适配器

qt学习

建议版本#

  • Qt 4.8.7 官方推荐的 MinGW 版本为 4.4.x,但是MinGW4.4没法编译,MinGW4.5才行,然后找不到MinGW4.5,这里使用了MinGW4.8。qtCreator配套推荐3.0.1(也可以用3.5.0)

下载(视频所用版本)#

- perl-->  https://strawberryperl.com/download/5.16.3.1/strawberry-perl-5.16.3.1-32bit-portable.zip
- MinGW(4.8.1): https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.8.1/threads-posix/sjlj/i686-4.8.1-release-posix-sjlj-rt_v3-rev2.7z/download (兼容windowsXP)
- (推荐)https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.8.2/threads-posix/dwarf/ (新版win7以上)
=====qt 4.8.7========
- qt库(带MinGW和qtCreator) :https://download.qt.io/new_archive/qt/4.8/4.8.7/qt-opensource-windows-x86-mingw482-4.8.7.exe
- qt库(源码): https://download.qt.io/new_archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.zip
- qtCreator: https://qt.mirror.constant.com/archive/qtcreator/3.0/3.0.1/qt-creator-opensource-windows-x86-3.0.1.exe
===弃用===
- MinGW(4.4): https://www.123912.com/s/u5pSjv-32uAH?提取码:M27Z  
	- 要记得设置环境变量
- qt库: https://download.qt.io/archive/qt/4.7/qt-win-opensource-4.7.0-mingw.exe  
- Qt Creator: https://download.qt.io/archive/qtcreator/2.0/qt-creator-win-opensource-2.0.1.exe  
====使用5.0.2====
qt+mingw--> https://download.qt.io/archive/qt/5.0/5.0.2/qt-windows-opensource-5.0.2-mingw47_32-x86-offline.exe
源码-->  https://download.qt.io/archive/qt/5.0/5.0.2/single/qt-everywhere-opensource-src-5.0.2.zip
=====在线版5.15======
https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/qt-online-installer-windows-x64-online.exe
- .\qt-online-installer-windows-x64-online.exe  --mirror https://mirrors.ustc.edu.cn/qtproject 
- Archive中选择5.15及6.8
- 安装内容:MinGW,Android,QtCharts,QtMultimedia,QtQuich3D,QtShaderTools
=====其他=======
- qt库(带MinGW和qtCreator): https://download.qt.io/new_archive/qt/5.2/5.2.1/qt-opensource-windows-x86-mingw48_opengl-5.2.1.exe

编译静态编译的qmake#

  • 下载源码
  • 路径不能有奇奇怪怪的符号(.-_ 之类)
  • (弃)修改 E:\Qt\qtSrc\qtbase\mkspecs\win32-g++\qmake.conf,修改QMAKE_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc(仅添加-static)

目录结构#

#mkdir "E:\Qt\qtCustom487\buildQtStatic" #/p
mkdir "E:\Qt\qtCustom\buildQtStatic" #/p
#mkdir "E:\Qt\qtCustom487\qtStatic" #/p
mkdir "E:\Qt\qtCustom\qtStatic" 
#mkdir "E:\Qt\qtCustom487\qtSrc" #/p
mkdir "E:\Qt\qtCustom\qtSrc"  
#E:\Qt\qtCustom下
				- buildQtStatic #(新建的)编译时切换到这个目录
				- qtSrc #源码
				- qtStatic #(新建的)install目录

静态编译#

我用的是视频0087集的办法,也可以用 https://www.cnblogs.com/atggg/p/16878575.html试试

平板安装linuxDeploy的问题简记

关于系统服务#

ly@tabs8:~$ ls -l /etc/systemd/system/sshd.service
lrwxrwxrwx. 1 root root 31 Apr  3 14:16 /etc/systemd/system/sshd.service(用户自定义service存放地址) -> /lib/systemd/system/ssh.service(系统安装软件后的service存放地址)

但是sudo service hello status,chroot容器中查找的只是/etc/init.d/这个路径下的hello(不查找/etc/systemd和lib/systemd中的),但是如果使用systemctl disable hello,则/etc/init.d中的hello服务不会被运行,并且会删除/etc/systemd/system/multi-user.target.wants文件夹下的软连接。如果systemctl enable hello,则会在/etc/systemd/system/multi-user.target.wants文件夹下生成一个软连接。
执行完/etc/init.d/hello就不会再操作其他东西了(hello.service没有用)

建议linuxdeploy的自动化开启Sysv模式,然后在/etc/init.d/里头编写脚本就可以了,如果要开机启动,使用systemctl enable xxx即可。

问题1#

chroot容器中,sudo systemctl enable hello.service后,开机启动时并没有执行。但是如果服务名hello在/etc/init.d/文件中存在对应名的SysV Init 脚本,就会执行,这是为什么呢

在普通 chroot 中,SysV Init 脚本能执行是因为其不依赖 PID 1 管理器,而 systemd 服务需要完整的初始化环境。若需 systemd 功能,应优先使用 systemd-nspawn。

问题2 ★#

chroot容器中,默认情况下,系统启动时会执行/etc/init.d/hello脚本(SysV Init 脚本),但是如果sudo systemctl disable hello.service后,开机启动时就不会执行了,这是为什么呢

 Debian 12(即使使用 systemd)默认保留了 SysV Init 兼容性,通过systemd-sysv-generator 工具动态生成 .service 文件来管理 /etc/init.d/ 中的脚本。当执行 systemctl disable hello.service 时:①删除符号链接:会移除 /etc/systemd/system/<target>.wants/ 中指向自动生成的 hello.service 的符号链接(如 multi-user.target.wants/hello.service)。②禁用服务:即使 /etc/init.d/hello 存在,systemd 也不会在开机时触发其执行,因为兼容层已被禁用。

systemctl enable#

ly@tabs8:~$ sudo systemctl disable ssh
Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable ssh
Removed "/etc/systemd/system/multi-user.target.wants/ssh.service".
Removed "/etc/systemd/system/sshd.service".
#=================================
ly@tabs8:~$ ls -l /etc/systemd/system/multi-user.target.wants | grep ssh
ly@tabs8:~$ ls -l /etc/systemd/system/ | grep ssh
#================开机自启动========
ly@tabs8:~$ sudo systemctl enable ssh
Synchronizing state of ssh.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ssh
#创建了两个符号链接
#保证兼容性,十几年前一直是用sshd
Created symlink /etc/systemd/system/sshd.service → /lib/systemd/system/ssh.service.
#multi-user.target.wants下: 开机自启动
Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
#开机自启动其实是直接链接到系统(软件)自己的service
ly@tabs8:~$ ls -l /etc/systemd/system/multi-user.target.wants | grep ssh
lrwxrwxrwx. 1 root root 31 Apr  3 15:05 ssh.service -> /lib/systemd/system/ssh.service
ly@tabs8:~$ ls -l /etc/systemd/system/ | grep ssh
lrwxrwxrwx. 1 root root   31 Apr  3 15:05 sshd.service -> /lib/systemd/system/ssh.service

#====总的来说,我只要在/etc/systemd/system/下创建自己的服务S,然后systemctl enable S即可

service编写(这里没用上)#

vim /etc/systemd/system/vncser

[Unit]
Description=TigerVncService  # 服务描述
After=network.target          # 定义启动顺序(在网络就绪后启动)

[Service]
Type=simple                  # 服务类型(simple/forking/oneshot等)
ExecStart=/usr/local/bin/tigervnc.sh    # 启动命令(绝对路径)
Restart=on-failure           # 失败时自动重启
User=ly                  # 运行用户(可选)
#Group=nogroup                # 运行组(可选)
#WorkingDirectory=/path/to    # 工作目录(可选)

[Install]
WantedBy=multi-user.target   # 定义服务所属的“目标”(开机自启)

一些命令暂记#

#镜像下载 https://mirrors-i.tuna.tsinghua.edu.cn/lxc-images/images/debian/bookworm/arm64/
#发行版 [rootfs.tar]
#源地址 ${EXTERNAL_STORAGE}/linuxdeploy/bookworm.tar.xz

#=====!!!!安装类型[ 目录]会有一些问题,比如ssh提示权限过高,不太懂..=======
#安装路径[ ${ENV_DIR}/rootfs/bookworm ] --> [ /data/data/ru.meefik.linuxdeploy/files/rootfs/bookworm ]----安装类型[ 目录]
#安装路径[ /data/media/0/linuxdeploy/bookworm ]----安装类型[ 目录] 
#建议放镜像
#安装路径{EXTERNAL_STORAGE}/linuxdeploy/bookworm.img----安装类型[ 镜像文件]

#用户名--用户密码--特权用户--本地化--DNS--networktrigger--powertrigger--随便弃用
#(弃用)初始化-启用-run-parts--路径/etc/rc.local--初始用户root
#!!!!初始化我这里使用sysv,通过systemctl enable ssh可以让ssh开机自启动,但是systemctl start ssh不能使用,需要用service ssh start替代
#挂载目录--挂载点--source使用/data/media/0 (data开头的,android14中其他的好像都不行不知道为什么,给ly加了 aid_media_rw  这个组权限) sudo usermod -aG  aid_media_rw username
#其他都不需要

#设置 telnet守护模式打开

挂载目录说明#

为了统一,可以用/mnt/pass_through/0/emulated/0/(内置存储卡) 以及/mnt/pass_through/0/822C-9525/(外置存储卡)

05日志

undolog#

作用#

  1. 恢复某条记录原始状态
  2. 记录修改过程,MVCC的原理,结合事务id知道哪些数据可见 undo log的修改本身会被记录到redo log中。即使undo log未刷盘,崩溃恢复时也可以通过redo log重建undo log。

redolog#

  1. 数据持久性–事务提交后,buffer pool一些脏页没有写入数据库磁盘文件。重启时,利用redolog恢复(表空间、页号、偏移量、数值)的数据(磁盘数据)
  2. 由于redolog有几种策略时机刷入磁盘。另有额外线程每隔1s不断刷入redolog buffer pool数据到redolog磁盘日志文件中,如果事务未提交但是刷入了redolog日志文件也无妨。可以根据一些标识,找到哪个事务是未提交的,然后再用undolog恢复原始状态。
root@db211:/var/lib/mysql# ls
auto.cnf	 ibdata1	     public_key.pem
ca-key.pem	 ib_logfile0 (redolog)	     server-cert.pem
ca.pem		 ib_logfile1 (redolog)		 server-key.pem
client-cert.pem  ibtmp1		     sys
client-key.pem	 mysql		     test
db211-slow.log	 performance_schema  xx
ib_buffer_pool 	 private_key.pem

update语句执行流程#

流程#

  1. 事务开始
    1. 写Undo Log到Undo Log Buffer(记录旧值)
    2. 修改Buffer Pool中的数据页(生成脏页)
    3. 写Redo Log到Redo Log Buffer(记录物理变更) 修改BufferPool后,还会MySQL还会生成对应的Binlog 事件逻辑操作记录),先写入线程的私有内存缓冲区(Binlog Cache
  2. 事务提交
    1. Redo Log 标记为 Prepare
    2. 写Binlog并刷盘
    3. Redo Log Commit阶段(标记提交)

redolog的刷盘策略#

  1. Redo Log Buffer 空间不足:当 Redo Log Buffer 的写入速度超过刷盘速度时,InnoDB 会强制刷盘以释放空间。
  2. 后台线程定期刷盘:InnoDB 的后台线程(如 log_writer 和 log_flusher)会周期性刷盘(默认每秒一次,由 innodb_flush_log_at_timeout 控制)。
  3. 参数配置触发
    1. 0:设置为 0 的时候,表示每次事务提交时不进行刷盘操作。这种方式性能最高,但是也最不安全,因为如果 MySQL 挂了或宕机了,可能会丢失最近 1 秒内的事务。
    2. 1:设置为 1 的时候,表示每次事务提交时都将进行刷盘操作。这种方式性能最低,但是也最安全,因为只要事务提交成功,redo log 记录就一定在磁盘里,不会有任何数据丢失。
    3. 2:设置为 2 的时候,表示每次事务提交时都只把 log buffer 里的 redo log 内容写入 page cache(文件系统缓存)。page cache 是专门用来缓存文件的,这里被缓存的文件就是 redo log 文件。这种方式的性能和安全性都介于前两者中间。

这里其实有个疑问,就是redolog并不是事务提交后才刷盘的,而是很有可能事务提交前就刷盘了。如果提交前刷盘了,之后系统宕机了,那么redolog磁盘文件就多出了一些未提交事务的日志。解决办法:可以通过一些属性,在undolog中找到未提交事务的id,然后通过undolog回滚未提交事务。