config.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. module.exports = {
  2. port: "8080",
  3. dest: ".site",
  4. base: "/",
  5. // 是否开启默认预加载js
  6. shouldPrefetch: (file, type) => {
  7. return false;
  8. },
  9. // webpack 配置 https://vuepress.vuejs.org/zh/config/#chainwebpack
  10. chainWebpack: config => {
  11. if (process.env.NODE_ENV === 'production') {
  12. const dateTime = new Date().getTime();
  13. // 清除js版本号
  14. config.output.filename('assets/js/cg-[name].js?v=' + dateTime).end();
  15. config.output.chunkFilename('assets/js/cg-[name].js?v=' + dateTime).end();
  16. // 清除css版本号
  17. config.plugin('mini-css-extract-plugin').use(require('mini-css-extract-plugin'), [{
  18. filename: 'assets/css/[name].css?v=' + dateTime,
  19. chunkFilename: 'assets/css/[name].css?v=' + dateTime
  20. }]).end();
  21. }
  22. },
  23. markdown: {
  24. lineNumbers: true,
  25. externalLinks: {
  26. target: '_blank', rel: 'noopener noreferrer'
  27. }
  28. },
  29. locales: {
  30. "/": {
  31. lang: "zh-CN",
  32. title: "二进制跳动",
  33. description: "Java生态圈常用技术框架、开源中间件,Spring 全家桶、分布式架构、团队管理、大厂面试题、职场锦囊、读书单、个人成长、思考等知识"
  34. }
  35. },
  36. head: [
  37. // ico
  38. ["link", {rel: "icon", href: `/favicon.ico`}],
  39. // meta
  40. ["meta", {name: "robots", content: "all"}],
  41. ["meta", {name: "author", content: "Tom哥"}],
  42. ["meta", {"http-equiv": "Cache-Control", content: "no-cache, no-store, must-revalidate"}],
  43. ["meta", {"http-equiv": "Pragma", content: "no-cache"}],
  44. ["meta", {"http-equiv": "Expires", content: "0"}],
  45. ["meta", {
  46. name: "keywords",
  47. content: "Java生态圈常用技术框架、开源中间件,Spring 全家桶、分布式架构、团队管理、大厂面试题、职场锦囊、读书单、个人成长、思考等知识"
  48. }],
  49. ["meta", {name: "apple-mobile-web-app-capable", content: "yes"}],
  50. ['script',
  51. {
  52. charset: 'utf-8',
  53. async: 'async',
  54. // src: 'https://code.jquery.com/jquery-3.5.1.min.js',
  55. src: '/js/jquery.min.js',
  56. }],
  57. ['script',
  58. {
  59. charset: 'utf-8',
  60. async: 'async',
  61. // src: 'https://code.jquery.com/jquery-3.5.1.min.js',
  62. src: '/js/global.js',
  63. }],
  64. ['script',
  65. {
  66. charset: 'utf-8',
  67. async: 'async',
  68. src: '/js/fingerprint2.min.js',
  69. }],
  70. // ['script',
  71. // {
  72. // charset: 'utf-8',
  73. // async: 'async',
  74. // src: 'https://s9.cnzz.com/z_stat.php?id=1278232949&web_id=1278232949',
  75. // }],
  76. // 添加百度统计
  77. ["script", {},
  78. `
  79. var _hmt = _hmt || [];
  80. (function() {
  81. var hm = document.createElement("script");
  82. hm.src = "https://hm.baidu.com/hm.js?eed7b6826268b05ccf1735d9b5d0e3dc";
  83. var s = document.getElementsByTagName("script")[0];
  84. s.parentNode.insertBefore(hm, s);
  85. })();
  86. `
  87. ]
  88. ],
  89. plugins: [
  90. [
  91. {globalUIComponents: ['LockArticle', 'PayArticle']}
  92. ],
  93. // ['@vssue/vuepress-plugin-vssue', {
  94. // platform: 'github-v3', //v3的platform是github,v4的是github-v4
  95. // // 其他的 Vssue 配置
  96. // owner: 'fuzhengwei', //github账户名
  97. // repo: 'CodeGuide', //github一个项目的名称
  98. // clientId: 'df8beab2190bec20352a',//注册的Client ID
  99. // clientSecret: '7eeeb4369d699c933f02a026ae8bb1e2a9c80e90',//注册的Client Secret
  100. // autoCreateIssue: true // 自动创建评论,默认是false,最好开启,这样首次进入页面的时候就不用去点击创建评论的按钮了。
  101. // }
  102. // ],
  103. // ['@vuepress/back-to-top', true], replaced with inject page-sidebar
  104. ['@vuepress/medium-zoom', {
  105. selector: 'img:not(.nozoom)',
  106. // See: https://github.com/francoischalifour/medium-zoom#options
  107. options: {
  108. margin: 16
  109. }
  110. }],
  111. // https://v1.vuepress.vuejs.org/zh/plugin/official/plugin-pwa.html#%E9%80%89%E9%A1%B9
  112. // ['@vuepress/pwa', {
  113. // serviceWorker: true,
  114. // updatePopup: {
  115. // '/': {
  116. // message: "发现新内容可用",
  117. // buttonText: "刷新"
  118. // },
  119. // }
  120. // }],
  121. // see: https://vuepress.github.io/zh/plugins/copyright/#%E5%AE%89%E8%A3%85
  122. // ['copyright', {
  123. // noCopy: false, // 允许复制内容
  124. // minLength: 100, // 如果长度超过 100 个字符
  125. // authorName: "https://offercome.cn",
  126. // clipboardComponent: "请注明文章出处, [offer 来了](https://offercome.cn)"
  127. // }],
  128. // see: https://github.com/ekoeryanto/vuepress-plugin-sitemap
  129. // ['sitemap', {
  130. // hostname: 'https://offercome.cn'
  131. // }],
  132. // see: https://github.com/IOriens/vuepress-plugin-baidu-autopush
  133. ['vuepress-plugin-baidu-autopush', {}],
  134. // see: https://github.com/znicholasbrown/vuepress-plugin-code-copy
  135. ['vuepress-plugin-code-copy', {
  136. align: 'bottom',
  137. color: '#3eaf7c',
  138. successText: '代码已经复制到剪贴板'
  139. }],
  140. // see: https://github.com/tolking/vuepress-plugin-img-lazy
  141. ['img-lazy', {}],
  142. ["vuepress-plugin-tags", {
  143. type: 'default', // 标签预定义样式
  144. color: '#42b983', // 标签字体颜色
  145. border: '1px solid #e2faef', // 标签边框颜色
  146. backgroundColor: '#f0faf5', // 标签背景颜色
  147. selector: '.page .content__default h1' // ^v1.0.1 你要将此标签渲染挂载到哪个元素后面?默认是第一个 H1 标签后面;
  148. }],
  149. // https://github.com/lorisleiva/vuepress-plugin-seo
  150. ["seo", {
  151. siteTitle: (_, $site) => $site.title,
  152. title: $page => $page.title,
  153. description: $page => $page.frontmatter.description,
  154. author: (_, $site) => $site.themeConfig.author,
  155. tags: $page => $page.frontmatter.tags,
  156. // twitterCard: _ => 'summary_large_image',
  157. type: $page => 'article',
  158. url: (_, $site, path) => ($site.themeConfig.domain || '') + path,
  159. image: ($page, $site) => $page.frontmatter.image && (($site.themeConfig.domain && !$page.frontmatter.image.startsWith('http') || '') + $page.frontmatter.image),
  160. publishedAt: $page => $page.frontmatter.date && new Date($page.frontmatter.date),
  161. modifiedAt: $page => $page.lastUpdated && new Date($page.lastUpdated),
  162. }]
  163. ],
  164. themeConfig: {
  165. // docsRepo: "aalansehaiyang/offercome",
  166. // 编辑文档的所在目录
  167. docsDir: 'docs',
  168. // 文档放在一个特定的分支下:
  169. docsBranch: 'master',
  170. //logo: "/logo.png",
  171. editLinks: true,
  172. sidebarDepth: 0,
  173. //smoothScroll: true,
  174. locales: {
  175. "/": {
  176. label: "简体中文",
  177. selectText: "Languages",
  178. editLinkText: "在 GitHub 上编辑此页",
  179. lastUpdated: "上次更新",
  180. nav: [
  181. {
  182. text: 'Spring全家桶', link: '/md/spring/springcloud/spring-cloud-alibaba.md'
  183. },
  184. {
  185. text: '主流中间件',
  186. items: [
  187. {
  188. text: 'Redis',
  189. link: '/md/middleware/redis/亿级系统的Redis缓存如何设计.md'
  190. },
  191. {
  192. text: 'MySQL',
  193. link: '/md/middleware/mysql/mysql 一棵 B+ 树能存多少条数据?.md'
  194. },
  195. {
  196. text: 'MQ 消息队列',
  197. link: '/md/middleware/mq/聊聊 Kafka 那点破事.md'
  198. }
  199. ]
  200. },
  201. {
  202. text: '💎 分布式架构',
  203. items: [
  204. {
  205. text: '🎡 系统架构',
  206. link: '/md/arch/system/网关技术选型,为什么选择 Openresty.md'
  207. },
  208. {
  209. text: '🏝 电商技术',
  210. link: '/md/arch/business/电商系统架构, 常见的 9 个大坑.md'
  211. },
  212. {
  213. text: '🏖 案例实战',
  214. link: '/md/arch/case/借助流程引擎优化系统的复杂度.md'
  215. },
  216. {
  217. text: '⛲ 设计模式',
  218. link: '/md/arch/designmodel/软件设计模式系列(第一期).md'
  219. }
  220. ]
  221. },
  222. {
  223. text: '大厂面试专栏', link: '/md/interview/tech/JAVA基础那点破事.md'
  224. },
  225. {
  226. text: '付费专栏',
  227. items: [
  228. {
  229. text: '《系统架构与优化》',
  230. link: '/md/pay/arch/optimize.md'
  231. },
  232. {
  233. text: '《面试通关技巧》',
  234. link: '/md/pay/interview/introductory.md'
  235. },
  236. {
  237. text: '《职场锦囊》',
  238. link: '/md/pay/job/001 | 职场遭遇老板 PUA,怎么办?.md'
  239. }
  240. ]
  241. },
  242. {
  243. text: '🌍 知识星球', link: '/md/zsxq/Tom哥的知识星球.md'
  244. },
  245. {
  246. text: '团队管理', link: '/md/team/manage/团队管理那点破事.md'
  247. },
  248. {
  249. text: '开源框架精选', link: '/md/opensource/frame.md'
  250. },
  251. {
  252. text: '读书单', link: '/md/about/book/读书单.md'
  253. },
  254. {
  255. text: '公众号', link: 'https://www.yuque.com/tom666/daohang/ttrs0z'
  256. },
  257. {
  258. text: '个人成长', link: '/md/about/grow_up/google_search.md'
  259. }
  260. ],
  261. sidebar: {
  262. "/md/team/": genTeam(),
  263. "/md/middleware/": genMiddleware(),
  264. "/md/opensource/": genOpensource(),
  265. "/md/zsxq/": genZsxq(),
  266. "/md/interview/": genInterview(),
  267. "/md/spring/": genSpring(),
  268. "/md/about/": genAbout(),
  269. "/md/pay/arch/": genPayArch(),
  270. "/md/pay/interview/": genPayInterview(),
  271. "/md/pay/job/": genPayJob(),
  272. "/md/arch/" :genArch()
  273. }
  274. }
  275. }
  276. }
  277. };
  278. // 分布式架构
  279. function genArch() {
  280. return [
  281. {
  282. title: "系统架构",
  283. collapsable: false,
  284. sidebarDepth: 0,
  285. children: [
  286. "system/网关技术选型,为什么选择 Openresty.md",
  287. "system/gRPC 网关,针对 HTTP 2.0 长连接性能优化,提升吞吐量.md",
  288. "system/海量数据业务有哪些优化手段?.md",
  289. "system/人人都是架构师?!谈何容易!.md",
  290. "system/中台不是万能药!.md",
  291. "system/外部接口大量超时,把整个系统拖垮,引发雪崩!如何解决?熔断.md",
  292. "system/【高并发、高性能、高可用】系统设计经验.md",
  293. "system/OpenResty 实现限流.md",
  294. "system/如何设计一个高并发系统?.md",
  295. "system/为什么是 HTTP2 ,而不是HTTP2.0 ?.md"
  296. ]
  297. },
  298. {
  299. title: "电商技术",
  300. collapsable: false,
  301. sidebarDepth: 0,
  302. children: [
  303. "business/电商系统架构, 常见的 9 个大坑.md",
  304. "business/万级并发电商库存扣减如何设计?不超卖!.md",
  305. "business/电商订单自动确认收货的N种实现.md",
  306. "business/深入剖析优惠券核心架构设计.md",
  307. "business/如何玩好优惠券这把营销利剑?.md",
  308. "business/如何设计一个高性能的秒杀系统.md",
  309. "business/聊聊电商促销业务.md"
  310. ]
  311. },
  312. {
  313. title: "案例实战",
  314. collapsable: false,
  315. sidebarDepth: 0,
  316. children: [
  317. "case/借助流程引擎优化系统的复杂度.md",
  318. "case/Redis分布式锁.md",
  319. "case/Redis + Lua 组合实现分布式限流.md",
  320. "case/电商大促,「网站实时成交额」仪表大盘技术方案?.md",
  321. "case/电商平台的热点商品架构方案.md",
  322. "case/搞了个线上故障,被老板骂了.md"
  323. ]
  324. },
  325. {
  326. title: "设计模式",
  327. collapsable: false,
  328. sidebarDepth: 0,
  329. children: [
  330. "designmodel/软件设计模式系列(第一期).md",
  331. "designmodel/软件设计模式系列(第二期).md",
  332. "designmodel/软件设计模式系列(第三期).md",
  333. "designmodel/学会这10个设计原则,离架构师又进了一步.md"
  334. ]
  335. }
  336. ];
  337. }
  338. // 《职场锦囊》
  339. function genPayJob() {
  340. return [
  341. {
  342. title: "职场锦囊",
  343. collapsable: false,
  344. sidebarDepth: 0,
  345. children: [
  346. "001 | 职场遭遇老板 PUA,怎么办?.md",
  347. "002 | 与同事发生冲突怎么办?.md",
  348. "003 | 职场不相信眼泪,千万不要玻璃心 ?.md",
  349. "004 | 入职一家新公司,如何快速熟悉代码.md",
  350. "005 | 工作中,同事不配合怎么办?.md",
  351. "006 | 要想职场混的好,向上管理很重要.md",
  352. "007 | 离职后,一定要立刻找到新工作吗?.md",
  353. "008 | 空降领导如何做,才能平稳着陆?.md",
  354. "009 | 修炼心态,避免职场内耗!.md",
  355. "010 | 为什么程序员要修炼自己对外「沟通」能力?.md"
  356. ]
  357. }
  358. ];
  359. }
  360. // 《面试通关技巧》
  361. function genPayInterview() {
  362. return [
  363. {
  364. title: "面试通关技巧",
  365. collapsable: false,
  366. sidebarDepth: 0,
  367. children: [
  368. "introductory.md",
  369. "第 1 讲:找工作有哪些渠道.md",
  370. "第 2 讲:如何挑选心仪公司?.md",
  371. "第 3 讲:JD 不是摆设,教你看懂岗位.md",
  372. "第 4 讲:什么时候跳槽最合适?.md",
  373. "第 5 讲:设计让面试官眼前一亮的简历?.md",
  374. "第 6 讲:怎么让面试官喜欢你?.md",
  375. "第 7 讲:面试中遇到不会的问题怎么办?.md",
  376. "第 8 讲:HR环节一般喜欢问哪些问题?.md",
  377. "第 9 讲:如何挑选最适合自己的 offer?.md",
  378. "第 10 讲:如何争取更高薪资?.md"
  379. ]
  380. }
  381. ];
  382. }
  383. // 《系统架构与优化》
  384. function genPayArch() {
  385. return [
  386. {
  387. title: "系统架构与优化",
  388. collapsable: false,
  389. sidebarDepth: 0,
  390. children: [
  391. "optimize.md",
  392. "基础篇:为什么流量入口要部署网关?.md",
  393. "基础篇:负载均衡常用的 7 种算法.md",
  394. "架构篇:10 个架构原则,离架构师又进了一步.md",
  395. "架构篇:DDD如何指导微服务落地.md",
  396. "中间件:4 种主流 RPC 框架.md",
  397. "中间件:注册中心的 5 种技术选型.md",
  398. "中间件:缓存是性能优化的首选利器.md",
  399. "中间件:缓存的 7 大经典问题.md",
  400. "中间件:通过消息队列分担系统压力.md",
  401. "中间件:消息队列必问的 6 个经典问题.md",
  402. "中间件:ElasticSearch 解决复杂条件查询.md",
  403. "数据库:海量数据业务有哪些方案.md",
  404. "数据库:分布式主键 id 的 7 种生成策略.md",
  405. "数据库:分布式事务的 7 种技术方案.md",
  406. "数据库:SQL 优化 7 条经验总结.md",
  407. "代码篇:接口性能优化的 15 个技巧.md",
  408. "代码篇:接口幂等性的 8 种解决方案.md",
  409. "代码篇:学会13 种锁,从此不再为“锁”心烦.md",
  410. "代码篇:异步编程的 7 种实现方式.md",
  411. "提升篇:通过链路追踪优化慢请求.md",
  412. "提升篇:通过Arthas快速定位线上问题",
  413. "稳定性:限流的 4 种策略方案.md",
  414. "稳定性:系统高可用的 11 个方案技巧.md"
  415. ]
  416. }
  417. ];
  418. }
  419. // 团队管理
  420. function genTeam() {
  421. return [
  422. {
  423. title: "团队管理",
  424. collapsable: false,
  425. sidebarDepth: 0,
  426. children: [
  427. "manage/团队管理那点破事.md",
  428. "manage/第一次带团队感觉很慌.md",
  429. "manage/管理者一定会遇到的那些事.md",
  430. "manage/如何打造一个高效的研发团队.md",
  431. "manage/作为技术团队TL,如何运用OKR提高团队产出.md",
  432. "manage/教你几招,如何快速把一个团队搞垮.md"
  433. ]
  434. }
  435. ];
  436. }
  437. // 大厂面试专栏
  438. function genOpensource() {
  439. return [
  440. {
  441. title: "",
  442. collapsable: false,
  443. sidebarDepth: 2,
  444. children: [
  445. "frame.md"
  446. ]
  447. }
  448. ];
  449. }
  450. // 知识星球
  451. function genZsxq() {
  452. return [
  453. {
  454. title: "",
  455. collapsable: false,
  456. sidebarDepth: 1,
  457. children: [
  458. "Tom哥的知识星球.md"
  459. ]
  460. }
  461. ];
  462. }
  463. // 主流中间件
  464. function genMiddleware() {
  465. return [
  466. {
  467. title: "Redis",
  468. collapsable: true,
  469. sidebarDepth: 0,
  470. children: [
  471. "redis/亿级系统的Redis缓存如何设计.md",
  472. "redis/什么是布隆过滤器?如何解决高并发缓存穿透问题?.md",
  473. "redis/为什么Redis Cluster是16384个槽位.md",
  474. "redis/Redis主节点的Key已过期,但Client访问从节点依然可以读到过期数据.md",
  475. "redis/Redis 宕机,数据丢了,老板要辞退我.md",
  476. "redis/2米的大长图一文打尽 Redis 核心技术.md",
  477. "redis/Redis主节点宕机,要如何处理?.md",
  478. "redis/秒杀活动技术方案,Redis申请32个G,被技术总监挑战了.md",
  479. "redis/一下说出了 Redis 16 个常见使用场景,惊呆面试官.md",
  480. "redis/Redis Cluster集群,当master宕机,主从切换,客户端报错 timed out.md",
  481. "redis/如何解决 Redis 数据倾斜、热点等问题.md"
  482. ]
  483. },
  484. {
  485. title: "MySQL",
  486. collapsable: true,
  487. sidebarDepth: 0,
  488. children: [
  489. "mysql/mysql 一棵 B+ 树能存多少条数据?.md",
  490. "mysql/一张千万级的数据表,删除了一半的数据,你觉得B+树索引文件会不会变小?.md",
  491. "mysql/SQL 语句明明命中了索引,为什么执行很慢?.md",
  492. "mysql/跑了4个实验,实战讲解 MySQL的行锁、间隙锁.md",
  493. "mysql/讲一讲 MySQL 数据备份杀手锏 binlog.md",
  494. "mysql/拉取 binlog,自动同步数据.md",
  495. "mysql/MySQL 主备延迟有哪些坑?主备切换策略.md",
  496. "mysql/ MySQL 主从延迟 7 种解决方案.md",
  497. "mysql/SQL 优化有哪些技巧.md"
  498. ]
  499. },
  500. {
  501. title: "MQ 消息队列",
  502. collapsable: true,
  503. sidebarDepth: 0,
  504. children: [
  505. "mq/聊聊 Kafka 那点破事.md",
  506. "mq/Kafka 如何解决消息不丢失?",
  507. "mq/如何保证 MQ消息是有序的?",
  508. "mq/关于消息队列,面试官一般都会问哪些.md"
  509. ]
  510. }
  511. ];
  512. }
  513. // Spring 全家桶
  514. function genSpring() {
  515. return [
  516. {
  517. title: "Spring Cloud",
  518. collapsable: false,
  519. sidebarDepth: 0,
  520. children: [
  521. "springcloud/spring-cloud-alibaba.md",
  522. "springcloud/spring-frame-compare.md"
  523. ]
  524. },
  525. {
  526. title: "Spring Boot",
  527. collapsable: false,
  528. sidebarDepth: 0,
  529. children: [
  530. "springboot/Mybatis.md",
  531. "springboot/Druid.md",
  532. "springboot/Redis.md",
  533. "springboot/Redis-safety.md",
  534. "springboot/ShardingSphere.md",
  535. "springboot/Guava.md",
  536. "springboot/Caffeine.md",
  537. "springboot/ElasticSearch.md",
  538. "springboot/Kafka.md",
  539. "springboot/Pulsar.md",
  540. "springboot/Apollo.md",
  541. "springboot/RabbitMQ.md",
  542. "springboot/Elastic-Job.md",
  543. "springboot/EhCache.md",
  544. "springboot/RocketMQ.md",
  545. "springboot/Nacos.md",
  546. "springboot/MongoDB.md",
  547. "springboot/Spring-Data-JPA.md",
  548. "springboot/OkHttp.md",
  549. "springboot/HttpClient.md",
  550. "springboot/gRPC.md",
  551. "springboot/Dubbo.md",
  552. "springboot/Seata.md"
  553. ]
  554. },
  555. {
  556. title: "Spring",
  557. collapsable: false,
  558. sidebarDepth: 0,
  559. children: [
  560. "spring/如何实现注解RPC Consumer属性动态注入.md",
  561. "spring/借助Proxy代理提升架构扩展性.md",
  562. "spring/统计代码块耗时的小工具.md"
  563. ]
  564. }
  565. ];
  566. }
  567. // 大厂面试专栏
  568. function genInterview() {
  569. return [
  570. {
  571. title: "面试专题",
  572. collapsable: false,
  573. sidebarDepth: 0,
  574. children: [
  575. "tech/JAVA基础那点破事.md",
  576. "tech/JAVA集合那点破事.md",
  577. "tech/JAVA 并发那点破事.md",
  578. "tech/JVM 那点破事.md",
  579. "tech/项目亮点.md",
  580. "tech/面试那点破事.md",
  581. "tech/Redis 缓存那点破事.md",
  582. "tech/MySQL 那点破事.md",
  583. "tech/Mybatis 那点破事.md",
  584. "tech/Spring 那点破事.md",
  585. "tech/Spring Boot 那点破事.md",
  586. "tech/Spring Cloud 那点破事.md",
  587. "tech/MQ 那点破事.md",
  588. "tech/Kafka 那点破事.md",
  589. "tech/RocketMQ 那点破事.md",
  590. "tech/TCP 网络那点破事.md",
  591. "tech/操作系统那点破事.md",
  592. "tech/Docker 那点破事.md",
  593. "tech/Kubernetes 那点破事.md",
  594. "tech/Nginx 那点破事.md"
  595. ]
  596. },
  597. {
  598. title: "面试技巧",
  599. collapsable: false,
  600. sidebarDepth: 0,
  601. children: [
  602. "skill/你离职的原因是什么?如何避坑?.md"
  603. ]
  604. }
  605. ];
  606. }
  607. // 关于自己
  608. function genAbout() {
  609. return [
  610. {
  611. title: "个人成长",
  612. collapsable: false,
  613. sidebarDepth: 0,
  614. children: [
  615. // "me/about-me.md",
  616. "book/读书单.md",
  617. "grow_up/google_search.md",
  618. "grow_up/知识改变命运,读书改变生活.md",
  619. "grow_up/提高「程序员」的思维方式.md",
  620. "grow_up/入职一家新公司,如何快速熟悉代码?.md"
  621. ]
  622. }
  623. ];
  624. }