diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/dxl125890.github.io.iml b/.idea/dxl125890.github.io.iml new file mode 100644 index 0000000..af6a604 --- /dev/null +++ b/.idea/dxl125890.github.io.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ab3d294 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e574da8 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/_posts/2023-11-23-cron-task.md b/.idea/sonarlint/issuestore/1/2/122e44665b6b6e9a51978e6cd0bf441eabef919a similarity index 100% rename from _posts/2023-11-23-cron-task.md rename to .idea/sonarlint/issuestore/1/2/122e44665b6b6e9a51978e6cd0bf441eabef919a diff --git a/.idea/sonarlint/issuestore/1/f/1fc61a8d81eedce850da8699e8aaf374e5a4b1f2 b/.idea/sonarlint/issuestore/1/f/1fc61a8d81eedce850da8699e8aaf374e5a4b1f2 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/3/3/33fff0a851c22b12d6b1fc69fd8c37ce74d7e431 b/.idea/sonarlint/issuestore/3/3/33fff0a851c22b12d6b1fc69fd8c37ce74d7e431 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/issuestore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/b/9/b9c1aaaf65573c7e15b93b6d826729e7711cf242 b/.idea/sonarlint/issuestore/b/9/b9c1aaaf65573c7e15b93b6d826729e7711cf242 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/c/d/cd089ae45ce870c45e434019e8f1ed4f066cd425 b/.idea/sonarlint/issuestore/c/d/cd089ae45ce870c45e434019e8f1ed4f066cd425 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/d/f/dfa6599fb5220e23a8098973324f880b753e3587 b/.idea/sonarlint/issuestore/d/f/dfa6599fb5220e23a8098973324f880b753e3587 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/f/5/f5cb290b82dda22ac54f26c86e457dbd0bca97ae b/.idea/sonarlint/issuestore/f/5/f5cb290b82dda22ac54f26c86e457dbd0bca97ae new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/f/6/f6013a00b362253c64368d6eebc50ea2131754e2 b/.idea/sonarlint/issuestore/f/6/f6013a00b362253c64368d6eebc50ea2131754e2 new file mode 100644 index 0000000..b391445 --- /dev/null +++ b/.idea/sonarlint/issuestore/f/6/f6013a00b362253c64368d6eebc50ea2131754e2 @@ -0,0 +1,9 @@ + +IWeb:AvoidCommentedOutCodeCheckK"Remove this commented out code.( +IWeb:AvoidCommentedOutCodeCheckc"Remove this commented out code.(ܶ +? Web:S1827")Remove this deprecated "align" attribute.( +; css:S4649"&Unexpected missing generic font family(М +A css:S4649"&Unexpected missing generic font family( +A css:S4649"&Unexpected missing generic font family(Ւ +A css:S4649"&Unexpected missing generic font family(򧤵 +< css:S4649"&Unexpected missing generic font family( \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/f/e/febd6007dfbc2e16bfcd685077516e6154cdeb55 b/.idea/sonarlint/issuestore/f/e/febd6007dfbc2e16bfcd685077516e6154cdeb55 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000..0da1efd --- /dev/null +++ b/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,23 @@ + +9 + README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d +8 +about.md,1\f\1fc61a8d81eedce850da8699e8aaf374e5a4b1f2 +: + +style.scss,f\e\febd6007dfbc2e16bfcd685077516e6154cdeb55 +; + _config.yml,c\d\cd089ae45ce870c45e434019e8f1ed4f066cd425 +; + search.json,3\3\33fff0a851c22b12d6b1fc69fd8c37ce74d7e431 +5 +CNAME,b\9\b9c1aaaf65573c7e15b93b6d826729e7711cf242 +K +googledb06e025310e016e.html,f\5\f5cb290b82dda22ac54f26c86e457dbd0bca97ae +: + +index.html,f\6\f6013a00b362253c64368d6eebc50ea2131754e2 +Z +*_posts/2024-05-29-建站声明及简介.md,d\f\dfa6599fb5220e23a8098973324f880b753e3587 +d +4_posts/2024-05-29-【TODO】数据结构与算法.md,1\2\122e44665b6b6e9a51978e6cd0bf441eabef919a \ No newline at end of file diff --git a/.idea/sonarlint/securityhotspotstore/1/2/122e44665b6b6e9a51978e6cd0bf441eabef919a b/.idea/sonarlint/securityhotspotstore/1/2/122e44665b6b6e9a51978e6cd0bf441eabef919a new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/1/f/1fc61a8d81eedce850da8699e8aaf374e5a4b1f2 b/.idea/sonarlint/securityhotspotstore/1/f/1fc61a8d81eedce850da8699e8aaf374e5a4b1f2 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/3/3/33fff0a851c22b12d6b1fc69fd8c37ce74d7e431 b/.idea/sonarlint/securityhotspotstore/3/3/33fff0a851c22b12d6b1fc69fd8c37ce74d7e431 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d b/.idea/sonarlint/securityhotspotstore/8/e/8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/b/9/b9c1aaaf65573c7e15b93b6d826729e7711cf242 b/.idea/sonarlint/securityhotspotstore/b/9/b9c1aaaf65573c7e15b93b6d826729e7711cf242 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/c/d/cd089ae45ce870c45e434019e8f1ed4f066cd425 b/.idea/sonarlint/securityhotspotstore/c/d/cd089ae45ce870c45e434019e8f1ed4f066cd425 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/d/f/dfa6599fb5220e23a8098973324f880b753e3587 b/.idea/sonarlint/securityhotspotstore/d/f/dfa6599fb5220e23a8098973324f880b753e3587 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/f/5/f5cb290b82dda22ac54f26c86e457dbd0bca97ae b/.idea/sonarlint/securityhotspotstore/f/5/f5cb290b82dda22ac54f26c86e457dbd0bca97ae new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/f/6/f6013a00b362253c64368d6eebc50ea2131754e2 b/.idea/sonarlint/securityhotspotstore/f/6/f6013a00b362253c64368d6eebc50ea2131754e2 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/f/e/febd6007dfbc2e16bfcd685077516e6154cdeb55 b/.idea/sonarlint/securityhotspotstore/f/e/febd6007dfbc2e16bfcd685077516e6154cdeb55 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb new file mode 100644 index 0000000..0da1efd --- /dev/null +++ b/.idea/sonarlint/securityhotspotstore/index.pb @@ -0,0 +1,23 @@ + +9 + README.md,8\e\8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d +8 +about.md,1\f\1fc61a8d81eedce850da8699e8aaf374e5a4b1f2 +: + +style.scss,f\e\febd6007dfbc2e16bfcd685077516e6154cdeb55 +; + _config.yml,c\d\cd089ae45ce870c45e434019e8f1ed4f066cd425 +; + search.json,3\3\33fff0a851c22b12d6b1fc69fd8c37ce74d7e431 +5 +CNAME,b\9\b9c1aaaf65573c7e15b93b6d826729e7711cf242 +K +googledb06e025310e016e.html,f\5\f5cb290b82dda22ac54f26c86e457dbd0bca97ae +: + +index.html,f\6\f6013a00b362253c64368d6eebc50ea2131754e2 +Z +*_posts/2024-05-29-建站声明及简介.md,d\f\dfa6599fb5220e23a8098973324f880b753e3587 +d +4_posts/2024-05-29-【TODO】数据结构与算法.md,1\2\122e44665b6b6e9a51978e6cd0bf441eabef919a \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index d0bba24..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,16 +0,0 @@ -这是一个可 fork 的博客模板仓库,帮助你快速搭建自己的博客,可以参考我博客的[这篇文章]( https://goldstine.github.io/create_blog_with_github_pages/ )详细指导搭建步骤。 - -### 文章版权 - -`_posts` 文件夹内所有文章版权归我所有,转载需联系我获得授权。 - -### 致谢 - -感谢Jekyll主题[LOFFER](https://fromendworld.github.io/LOFFER/)模提供了原始主题模板,我在其上进行的二次开发。 - -如果搭建过程中有什么问题,也可以扫码添加我的个人技术公众号讨论交流。 - -**这是一个专注编程知识和资源分享的公众号,包含各类编程学习路线,让你在编程路上少走弯路** - -![公众号二维码](https://cdn.jsdelivr.net/gh/goldstine/goldstine.github.io/images/weixin.jpg) - diff --git a/_config.yml b/_config.yml index b5d0e95..8de8e3b 100644 --- a/_config.yml +++ b/_config.yml @@ -3,18 +3,18 @@ # # Name of your site (displayed in the header) -name: "goldstine's blog" +name: "dxlong's blog" # Short bio or description (displayed in the header) -description: "个人技术公众号:Goldstine 分享编程资源 | 学习路线" +description: "激情点燃生命" # # Flags below are optional # # URL of your avatar or profile pic (you could use your GitHub profile pic) -avatar: https://cdn.jsdelivr.net/gh/goldstine/goldstine.github.io/images/0.png +avatar: https://cdn.jsdelivr.net/gh/dxl125890/dxl125890.github.io/images/0.png # 你的favicon(出现在浏览器tab上)图片URL,建议使用较小(64px × 64px)的图片 -favicon: https://cdn.jsdelivr.net/gh/goldstine/goldstine.github.io/images/favicon.ico +favicon: https://cdn.jsdelivr.net/gh/dxl125890/dxl125890.github.io/images/favicon.ico # Tabs in header. There are 'Blog', 'About', 'Archive', 'Tags' # and URL Link(e.g. 'Theme' tab below) tabs. If you don't need one, just delete @@ -47,11 +47,11 @@ footer-links: #weibo: frommidworld #请输入你的微博个性域名 https://www.weibo.com/ behance: # https://www.behance.net/ dribbble: - zhihu: goldstine - email: 15797899690@163.com + zhihu: + email: 485039784@qq.com facebook: flickr: - github: goldstine + github: dxl125890 googleplus: # anything in your profile username that comes after plus.google.com/ instagram: linkedin: @@ -63,7 +63,7 @@ footer-links: youtube: # Text under the icons in footer -footer-text: Copyright (c) 2023 goldstine +footer-text: Copyright (c) 2024 dxl125890 # Enter your Disqus shortname (not your username) to enable commenting on posts # You can find your shortname on the Settings page of your Disqus account @@ -71,17 +71,17 @@ disqus: # fromendworld # Gitalk gitalk: - clientID: 062eeb9a0adf39976274 - clientSecret: 3c319e4cf4a90b70809d7fd1b25e4c6c10376a10 - repo: goldstine.github.io - owner: goldstine + clientID: Ov23lilioG98Z7TYRVry + clientSecret: 67d8f33a8ed95184eaf8115cac0cd3fac94d324d + repo: dxl125890.github.io + owner: dxl125890 # Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking #google_analytics: # Your website URL (e.g. http://barryclark.github.io or http://www.barryclark.co) # Used for Sitemap.xml and your RSS feed -url: https://goldstine.github.io +url: https://dxl125890.github.io # If you're hosting your site at a Project repository on GitHub pages # (http://yourusername.github.io/repository-name) diff --git a/_posts/2019-11-22-create_blog_with_github_pages.md b/_posts/2019-11-22-create_blog_with_github_pages.md deleted file mode 100644 index 0f302ad..0000000 --- a/_posts/2019-11-22-create_blog_with_github_pages.md +++ /dev/null @@ -1,416 +0,0 @@ ---- -layout: post -title: "可能是最全面的github pages搭建个人博客教程" -date: 2022-11-22 -tags: [geek] -comments: true -author: goldstine ---- - -作为一个程序员怎么能没有自己的个人博客呢,这里详细记录和分享我的博客搭建经验,让你轻轻松松拥有自己的博客网站。傻瓜式一站式教你用 github pages 来搭建博客,详细记录全过程,保证你能学会。 - -如果你是非程序员或者不关系技术细节,只需花 3 分钟阅读前面 5 个章节内容,就能轻松拥有自己的博客。 - - - -## 开始 - -话不多说,直接上图先来看下我的博客整体效果。[**点击在线预览我的博客**]( https://goldstine.github.io/blog/),个人比较喜欢这种简约的博客风格,不要花里胡哨但该有的功也都有。 - -![blogPage](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/blogPage.png) - - - -下面列举这个博客具有的功能特性,其中我比较看重归档和搜索能力。 - -### 支持特性 - -- 简约风格博客 - -- Powered By Jekyll - -- 博客文章搜索 - -- 自定义社交链接 - -- 网站访客统计 - -- Google Analytics 网站分析 - -- Gitalk评论功能 - -- 自定义关于about页面 - -- 支持中文布局 - -- 支持归档与标签 - -- 支持改变主题颜色 - -- 支持添加文章目录 - - - -## 建立博客Git仓库 - -首先你要在[github](https://github.com/)上有自己博客仓库,用来生成和存放博客文章。你可以直接fork我的博客仓库。这样你马上有了自己的博客仓库。 - -[点这里我的博客地址](https://github.com/goldstine/goldstine.github.io)进去点击 fork,之后在你自己的仓库下会看到刚复制的仓库,以后的操作都在你自己的仓库进行,当然想感谢我写这个教程就帮我点个 start 吧! - -![fork博客](https://raw.githubusercontent.com/goldstine/goldstine.github.io/master/images/2019-11-22-create_blog_with_github_pages/fork%E5%8D%9A%E5%AE%A2.png) - -**版权声明: fork之后_posts文件夹内容是我的博客文章,版权归我所有。你可以选择删除里面的文章替换上自己的博客文章,如需转载需要与我联系授权 **。 - - - -## 修改博客仓库名称 - -进到你自己的博客仓库,**修改博客仓库名称成你自己的用户名**。因为 github page 解析的时候找的是这个 username.github.io的仓库名,**这一步非常重要**。 - -![修改仓库名称](https://raw.githubusercontent.com/goldstine/goldstine.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E4%BF%AE%E6%94%B9%E4%BB%93%E5%BA%93%E5%90%8D%E7%A7%B0.png) - -此时,不出意外的话,打开域名 https://username.github.io 就能看到你刚搭建的博客了。*注意替换 username成你自己的github 用户名*。 - -## 博客配置 - -上面点开域名看到的还是我的博客配置,显示的博客名字也是我的。还需要更改配置才是你的博客。 - -博客的配置文件是仓库根目录下的_config.yml文件,直接点开它编辑。 - -![config文件](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/config%E6%96%87%E4%BB%B6.png) - -你还需要更改以下配置: - -### 博客名称和描述 - -![更改名称](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E6%9B%B4%E6%94%B9%E5%90%8D%E7%A7%B0.png) - -分别是博客名称和描述,自己任意写点啥。 - -### 博客社交链接 - -![更改社交链接](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E6%9B%B4%E6%94%B9%E7%A4%BE%E4%BA%A4%E9%93%BE%E6%8E%A5.png) - -这里配置社交链接按钮,没配的不显示,我现在配了知乎、邮箱、github账号三个。其他你想加自己加上就可以。 - -### 配置gitalk - -这个是评论功能的配置。评论功能基于gitalk,在配置文件中找到gitalk配置项目: - -修改规则如下: - -```yml -gitalk: - clientID: <你的clientID> - clientSecret: <你的clientSecret> - repo: <你的repository名称> - owner: <你的GitHub用户名> -``` - -原理是利用github的issues评论文章。其中clientID和clientSecret需要[点击这里创建](https://github.com/settings/applications/new) - -![创建gitalk鉴权app](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E5%88%9B%E5%BB%BAgitalk%E9%89%B4%E6%9D%83app.png) - -点绿色按钮创建,成功之后会得到以上两个id,修改配置即可。 - -### Google站长统计 - -首先你要去注册一个[Google Analytics]( https://analytics.google.com/analytics/ )账号,它可以统计你博客网站的访问人数,访问来源等非常丰富的网站数据。如果你不在乎可以不用跳过这节。不过要把配置中我的`google_analytics: UA-XXXXXXX-X`删除,**否则统计到我的去了**。 - -``` -# Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking -google_analytics: UA-XXXXXXX-X -``` - -下面是我的网站实时分析页面展示: - -![google分析页面](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/google%E5%88%86%E6%9E%90%E9%A1%B5%E9%9D%A2.png) - -由于不可描述的原因,国内注册账号可能会遇到问题,所有不配置也没关系。 - -### 博客网址配置 - -``` -# Your website URL (e.g. http://barryclark.github.io or http://www.barryclark.co) -# Used for Sitemap.xml and your RSS feed -url: https://yourname.github.io -``` - -这里配置你自己的博客地址。 - -### 配置提交 - -对_config.ymld的修改需要提交才能生效,点下图中绿色按钮提交。 - -![配置提交](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E9%85%8D%E7%BD%AE%E6%8F%90%E4%BA%A4.png) - -**done! 现在输入上面提到的博客地址,回车,你拥有了自己的博客。** - - - -## 如何写博客 - -好了,博客有了。如何更新文章呢? - -文章用markdown语法,写好统一放在_post文件夹下上传,git page会自动从你的git仓库拉去解析成网页,立刻就能在你的博客网页浏览。 - -关于文章的**命名格式**:博客文章必须按照统一的命名格式 `yyyy-mm-dd-blogName.md` 比如我这篇博客的名字是`2019-11-22-create_blog_with_github_pages.md` - -**看到这里,如果只是简单的想写博客,后面的不看也可以了,你已经拥有了自己的博客!后面章节是记录一些DIY的过程。** - -另外,发现最近用我这个模板的同学越来越多,如果搭建过程中有什么问题,可以在我的公众号「后端技术学堂」讨论交流。 - -![公众号二维码](https://upload-images.jianshu.io/upload_images/7842464-15f939ec039690f6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) - - - -## 本地博客预览 - -到目前为止,我们提交的文章都是必须上传到github仓库才能预览。如果你想写完在本地浏览器看一下效果在上传也是可以的,因为不是所有人都有这样的需求。 - -### 安装 Ruby 和 DevKit - -在官网下载,[点这里]( https://rubyinstaller.org/downloads/ )下载适合系统版本的 [Ruby+Devkit](https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-devkit-2.6.5-1-x64.exe) 包。安装,弹出的窗口选3 - -![安装ruby](https://github.com/lemonchann/lemonchann.github.io/raw/master/images/2019-11-22-create_blog_with_github_pages/%E5%AE%89%E8%A3%85ruby.PNG) - -`gem -v` `ruby -v` 查看得到版本号就说明成功了。 - -如果是在墙内,需要切换安装源到https://gems.ruby-china.com/。墙外请忽略。 - -`gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/` 切换安装源 - -`gem sources -l` 查看版本 - -### bundler安装 - -`gem install bundler` 安装bundler - -`bundle -v 查看版本 - bundle config mirror.https://rubygems.org https://gems.ruby-china.com` 切换安装源 - -### 安装jekyll - -` gem install jekyll` - -![jekyll安装](https://github.com/lemonchann/lemonchann.github.io/raw/master/images/2019-11-22-create_blog_with_github_pages/jekyll%E5%AE%89%E8%A3%85.PNG) - -### 预览博客 - -` jekyll server` 输入之后打开浏览器,不出意外输入localhost:4000即可看到博客内容。 - -![jekyll_server成功](https://github.com/lemonchann/lemonchann.github.io/raw/master/images/2019-11-22-create_blog_with_github_pages/jekyll_server%E6%88%90%E5%8A%9F.PNG) - -如果你没这么顺利,那以下的错误解决供参考 - -#### 常见错误 - -- 缺少某个包 - -![jekyll_error](https://github.com/lemonchann/lemonchann.github.io/raw/master/images/2019-11-22-create_blog_with_github_pages/jekyll_error.PNG) - -如图,缺少jekyll-paginate,安装即可`gem install jekyll-paginate`若还提示缺少就装啥。 - -![jekyll_server_erro错误2](https://github.com/lemonchann/lemonchann.github.io/raw/master/images/2019-11-22-create_blog_with_github_pages/jekyll_server_erro%E9%94%99%E8%AF%AF2.PNG) - -- 权限拒绝 - - socket.rb:201:in `bind` :Permission denied - bind(2) for 127.0.0.1:4000 (Error:EACCES) - -![jekyll_error_EASSE](https://github.com/lemonchann/lemonchann.github.io/raw/master/images/2019-11-22-create_blog_with_github_pages/jekyll_error_EASSE.png) - -出现这个错误一般是4000端口被占用了,解决方法: - -1. netstat -ano|findstr "4000" 找到占用4000端口的进程ID - -2. 查看最后一列数字就是PID=312964 - ![查看netstat](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E6%9F%A5%E7%9C%8Bnetstat.png) - -3. 打开windows资源管理器,结束该进程. - - ![任务管理器](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/%E4%BB%BB%E5%8A%A1%E7%AE%A1%E7%90%86%E5%99%A8.png) - -4. `$ tasklist|findstr 312964`也能查看进程名,查到结束掉他同步骤3. - - - -## 搜索功能集成 - -博客模板本来是没有搜索功能的,搜索功能依赖[Simple-Jekyll-Search](https://github.com/christian-fei/Simple-Jekyll-Search)提供支持。 - -### 配置search.json - -[复制这份代码到你博客的根目录](https://github.com/christian-fei/Simple-Jekyll-Search/blob/master/example/search.json) - -这个配置文件代表可以按博客的标题、标签、时间、分类搜索。 - -### 下载simple-jekyll-searchj文件 - -[下载这整个文件夹](https://github.com/christian-fei/Simple-Jekyll-Search/tree/master/example/js),里面包含simple-jekyll-search.min.js和simple-jekyll-search.js两个文件,连同js文件夹放在你的根目录下面。 - -### 配置搜索框标签 - -在你想展示搜索框的页面我的是index.html,这个页面和每个人的博客模板有关,可能需要一点前端知识,添加如下的html标签。 - -```html -
- -
    -
    - - - - - -``` - -其中,以下两个是二选一的,一个是用云端的js一个是用本地的js如果本地有的话。 - -`` - -配置完成,打开博客,你得到这样一个搜索框。 - -![search_block](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/search_block.png) - -## 搜索框样式 - -搜索框的样式是可以改变的,这里有修改HTML中CSS样式的方法,我搞后端的,前端现学现卖。 - -[html插入标签样式方法](https://blog.csdn.net/u014103733/article/details/72961366) - - - -## 社交链接 - -模板提供的链接没有知乎链接,或者你想增加自定义的链接,都可以通过以下方法添加。以增加zhihu链接为例 - -链接的图片是svg格式的(我也刚知道),大概了解一下什么是svg和viewBox - -[viewBox](https://developer.mozilla.org/zh-CN/docs/Web/SVG/Attribute/viewBox) - -> viewBox属性的值是一个包含4个参数的列表 `min-x`, `min-y`, `width` and `height`, 以空格或者逗号分隔开, 在用户空间中指定一个矩形区域映射到给定的元素,查看属性 - -[深入简出 SVG 教程](https://zhuanlan.zhihu.com/p/36138381) - -### 配置_config.yml - -```yml -footer-links: - weibo: yourname #请输入你的微博个性域名 https://www.weibo.com/ - zhihu: yourname #输入你知乎主页链接上的名字 https://https://www.zhihu.com/people/ -``` - -### 修改svg-icons.html - -因为footer.html中调用了svg-icons.html来生成社交链接。 - -可见是先调用了svg-icon.html显示社交链接,所以修改_include/svg-icons.html增加zhihu链接 - -```html -{% if site.footer-links.zhihu %} -
  • - {% endif %} -``` - -上面配置内容应该都能理解,`viewBox` 指定图片大小。 - -主要是`path d=` 内容的获取,这里其实是指定svg图片的内容,我们可以从 [这里](https://raw.githubusercontent.com/FortAwesome/Font-Awesome/master/svgs/brands/)获取到大部分svg素材,比如知乎的svg[在这](https://github.com/FortAwesome/Font-Awesome/blob/master/svgs/brands/zhihu.svg),点`raw` 按钮查看源文件,复制`path d=`后面的内容到上面的配置即可。 - -![zhihuSvg](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/zhihuSvg.png) - - - -## 添加网站计数 - -网站统计[由不蒜子](http://busuanzi.ibruce.info/)提供支持,就是可以统计网站当前访问次数和人数。配置也非常简单,[官方指引](http://ibruce.info/2015/04/04/busuanzi/#more)在这里。 - -### 修改页面html - -想让统计显示在哪个页面,需要修改那个页面的html,增加如下内容: - -```html - - - -
    - - View: - - - - User: - -
    -``` - -### style标签说明 - -可以通过style标签改变字体颜色与大小。具体参考:[html颜色表](http://xh.5156edu.com/page/z1015m9220j18754.html)和[html style属性](https://www.geeksforgeeks.org/html-style-attribute/) - -eg. `style="font-family:arial;color:Gainsboro;font-size:10px; text-align:right;width:200px;background-color:gray;` - -## 修改博客主题颜色 - -博客使用开源的颜色表[Open Color](https://yeun.github.io/open-color/),博客主题的可选颜色有: - -`red, pink, grape, violet, indigo, blue, cyan, teal, green, lime, yellow` - -修改文件`_sass/_variables.scss`,将文件中当前颜色,比如当前是 `grape` 全部替换成你想要的颜色即可。 - -## 显示文章目录 - -在文章开头信息中心增加 `toc: true` 描述即可打开文章目录显示。效果如下: - -![文章带目录](https://i.loli.net/2020/07/12/TFlRj3kBdpocY9K.png) - - - -## 如何传图片 - -写markdown最头疼的就是图片的插入了,推荐用[PicGo](https://picgo.github.io/PicGo-Doc/zh/guide/)一键上传得到链接,直接可以插入markdown。 - -PicGo支持图片上传github、SM.MS图床、阿里云、腾讯云等主流图床或云端。直接拖图片,上传云端、得到链接一步搞定,方便快捷。 - -![PicGo](https://raw.githubusercontent.com/lemonchann/lemonchann.github.io/master/images/2019-11-22-create_blog_with_github_pages/PicGo.png) - -## 其他功能 - -[小功能](https://blog.csdn.net/ds19991999/article/details/81293467) - -[好用的github插件](https://blog.csdn.net/u012702547/article/details/100533763) - - - -## 网站结构 - -根目录的index.html生成blog首页 - -_include/footer.html生成侧边栏 - -_include/svg-icons.html生成社交头像的链接 - - - -## 致谢 - -感谢 [Jekyll](https://www.jekyll.com.cn/) 提供的技术支持才能有这个博客。 - -感谢 [LOFFER ](https://fromendworld.github.io/LOFFER/document/)提供的原始模板,我在其上进行的二次开发。 - -**我的个人技术公众号「后端技术学堂」分享、记录、成长,扫码添加,一起学习,共同成长。** - -![公众号二维码](https://upload-images.jianshu.io/upload_images/7842464-15f939ec039690f6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) \ No newline at end of file diff --git a/_posts/2023-04-19-notes.md b/_posts/2023-04-19-notes.md deleted file mode 100644 index 3df5d39..0000000 --- a/_posts/2023-04-19-notes.md +++ /dev/null @@ -1,7 +0,0 @@ -``` - 虞美人·听雨 - 宋代 : 蒋捷 -少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 - -而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。 -``` diff --git a/_posts/2023-05-13-navigate.md b/_posts/2023-05-13-navigate.md deleted file mode 100644 index 14a1896..0000000 --- a/_posts/2023-05-13-navigate.md +++ /dev/null @@ -1,9 +0,0 @@ -# 自在飞花轻似梦 - -## 导航栏制作 -修改页面布局 - -## images - -markdow不支持latex标题 - diff --git a/_posts/2023-05-15-axios.md b/_posts/2023-05-15-axios.md deleted file mode 100644 index 6716bb2..0000000 --- a/_posts/2023-05-15-axios.md +++ /dev/null @@ -1 +0,0 @@ -# axios http request diff --git a/_posts/2023-05-16-deploy.md b/_posts/2023-05-16-deploy.md deleted file mode 100644 index b459838..0000000 --- a/_posts/2023-05-16-deploy.md +++ /dev/null @@ -1,52 +0,0 @@ -## application deploy - -Koa Js服务部署到服务器上 - -Koa Js服务容器化,部署Okteto提供的K8S环境里 - -Koa Js服务部署到vercel ,vercel提供免费的Serverless Function ,类似于AWS Lambda - -Koa Js部署到AWS Lambda,使用一个serverless-http框架转化 - -关于AWS Lambda: - -[https://zhuanlan.zhihu.com/p/415577362](https://zhuanlan.zhihu.com/p/415577362) - -[https://zhuanlan.zhihu.com/p/351889768](https://zhuanlan.zhihu.com/p/351889768) - -### Koa Js - -Koa Js是由Express Js设计的Web框架 - -### Vercel - -Vercel是一个用来部署前端应用的云平台,但也可以用来构建轻量级的事件驱动API,并部署到全球边缘网络。 - -国内类似于Vercel平台 ,开源运行时社区 [osrc.com](http://osrc.com) - -OSRC 应用是基于云原生系统可运行的 ****无状态**** 应用,通过 OSRC 发布的 CI 工具,可以快速发布应用,相关案例分享见: [OSRC 实战案例 - 赫兹跳动部署过程 ]([https://osrc.com/user/articles/wiki_771691733172670464](https://link.zhihu.com/?target=https%3A//osrc.com/user/articles/wiki_771691733172670464)),并可以在 OSRC 社区分享给其他人。 - -视频链接:**[注册 Vercel,安装 vercel-cli](https://link.zhihu.com/?target=https%3A//lusun.com/v/Bs3SdBnQ7dS)** - -大纲链接:**[注册Vercel,安装vercel-cli](https://link.zhihu.com/?target=https%3A//logseq.fishyer.com/%23/page/%25E6%25B3%25A8%25E5%2586%258Cvercel%252C%25E5%25AE%2589%25E8%25A3%2585vercel-cli)** - -- 官网:**[Vercel](https://vercel.com/)** -- Vercel和Github的区别 - - Vercel是网站部署 - - Github是代码网盘 -- 什么是Vercel - - 支持部署静态网页和动态接口 - - 自带域名 https - - 自带丰富的模板 - - 官方支持Node.js、Go、Python、Ruby。 -- 安装vercel命令行工具 - - **[Download Vercel CLI – Vercel](https://vercel.com/docs/cli)** - - npm i -g vercel - - yarn global add vercel - - [[Vercel常用命令]] -- npm和yarn的区别 - - 都是包管理工具,不过一般用yarn,因为下载速度更快 - -Ref: - -[https://www.zhihu.com/question/529047706](https://www.zhihu.com/question/529047706) \ No newline at end of file diff --git a/_posts/2023-05-16-smpl.md b/_posts/2023-05-16-smpl.md deleted file mode 100644 index 9d982ea..0000000 --- a/_posts/2023-05-16-smpl.md +++ /dev/null @@ -1,251 +0,0 @@ -# 3D人体建模 - -计算机人体仿真 计算机图形学 -发展:线框建模 实体建模 曲面建模 物理建模 -应用:医学图像 生物医学 手势识别 视频会议 视频游戏 自动新闻播放 电影制作 材料变形 图像压缩 - -#### 目录 -| [相关论文](#相关论文) | [SMPL](#smpl) | [Demo演示](#Demo演示) | [测试](#demo演示) | -|:--------:|:--------:|:--------:|:--------:| - -### 相关论文 -[相关论文,算法,数据](https://github.com/3DFaceBody/awesome-3dbody-papers) - -+ Body Model : SMPL: A Skinned Multi-Person Linear Model. SIGGRAPH Asia, 2015. [Page] [Code] -+ Body Pose : 人体姿态估计 -+ Naked Body Mesh -+ Clothed Body Mesh -+ Human Depth Estimation -+ Human Motion -+ Human-Object Interaction -+ Animation -+ Cloth/Try-On -+ Neural Rendering -+ Dataset - - -## SMPL - -SMPL: A Skinned Multi-Person Linear Model. SIGGRAPH Asia, 2015. -[Page](https://smpl.is.tue.mpg.de/) -[Code](https://github.com/vchoutas/smplx) - -[Meetup](https://www.youtube.com/watch?v=rzpiSYTrRU0&t=147s) - -### SMPL==>SMPL-x -![SMPL-X](https://cdn.jsdelivr.net/gh/goldstine/MyImages/smpl.png) - -不管是为了对人体3D模型进行标准化的参数化,从而建模成3D数字人体模型,还是为了对人体3D模型进行渲染,亦或是为了引入人体姿态先验知识,我们都需要想办法设计一个可以数字化表示人体的方法,SMPL模型就是其中一种最为常用的。 - -A Skinned Multi-Person Linear Model. **Skinned**表示不仅仅骨架点,还是有蒙皮的 ,蒙皮通过 **3D Mesh** 表示 -*3D Mesh* 指的是在立体空间里面用三个点表示一个面,可以视为是对真实几何的采样,其中采样的点越多,3D mesh就越密,建模的精确度就越高(这里的由三个点组成的面称之为三角面片) - -![Skinned](https://cdn.jsdelivr.net/gh/goldstine/MyImages/smpl-01.png) - -**Multi-person**表示的是这个模型是可以表示不同的人的,是通用的。**Linear**就很容易理解了,其表示人体的不同姿态或者不同升高,胖瘦(我们都称之为形状shape)是一个线性的过程,是可以控制和解释的(线性系统是可以解释和易于控制的)。 - -在SMPL模型中,我们的目标是对于人体的形状比如胖瘦高矮,和人体动作的姿态进行定义,为了定义一个人体的动作,我们需要对人体的每个可以活动的关节点进行参数化,当我们改变某个关节点的参数的时候,那么人体的姿态就会跟着改变,类似于BJD球关节娃娃的姿态活动。为了定义人体的形状,SMPL同样定义了参数β ∈ R 10 \beta \in \mathbb{R}^{10}β∈R 10,这个参数可以指定人体的形状指标,我们后面继续描述其细节。 - -总体来说,SMPL模型是一个统计模型,其通过两种类型的统计参数对人体进行描述 - -形状参数(shape parameters):一组形状参数有着10个维度的数值去描述一个人的形状,每一个维度的值都可以解释为人体形状的某个指标,比如高矮,胖瘦等。 -姿态参数(pose parameters):一组姿态参数有着24 × 3 24 \times 324×3维度的数字,去描述某个时刻人体的动作姿态,其中的24 2424表示的是24个定义好的人体关节点,其中的3 33并不是如同识别问题里面定义的( x , y , z ) (x,y,z)(x,y,z)空间位置坐标(location),而是指的是该节点针对于其父节点的旋转角度的轴角式表达(axis-angle representation)(对于这24个节点,作者定义了一组关节点树) - - -Ref: -[以目前的计算机视觉技术能否对一张二维的人体全身照进行3D重建?](https://www.zhihu.com/question/444246895/answer/1824880825) -[人体动作捕捉与SMPL模型 (mocap and SMPL model)](https://fesian.blog.csdn.net/article/details/107265821) - ---- -## 人体模型 - -[多边形网格Polygon_mesh](https://en.wikipedia.org/wiki/Polygon_mesh) - -[AAAI2020 Microsoft:A human body could be represented by a 3D mesh](https://arxiv.org/abs/1905.13143) -点线面集合,这个集合定义了3D计算机图形中的多面体对象的形状 -计算机图形学,尤其是3D Computer Graphics 和 Geometric Modeling的大子分支large sub-field - -3D Human Body?why 基于模型的方法通过拟合特定的body model参数从一个single image 里面估计human body的pose 和 shape - -vertex vector 空间法向量计算 -visual hull? - -坐标系(X,Y,Z) - -Geometric Template - -Appearance Signatrue - - -几种典型3D Body Model: -* SARC3D -* SCAPE -* SMPL(Simple yet powerful body model) - -SMPL通过计算pose和shape parameters的a linear function来render the body mesh, which enables the optimization of SMPL model by learning from massive data. 为啥?为啥学一个linear function就使得对SMPL的优化就通过from data学习来解决? - -SMPL:人体可以认为是一个基础模型和在该模型基础上进行形变的总和,在形变基础上进行PCA,得到刻画形状的低维参数,形状参数(Shape),同时使用**运动树**表示人体的姿态,即运动树每个关节点和父节点的旋转关系,该关系可以表示为三维向量,最终每个关节点的局部旋转向量构成了smpl模型的姿态参数(Pose) - -目前市面上的渲染器,SMPL模型使用的比较多,三维参数化人体模型被广泛使用,它是估计人体三维姿态和形状的有利先验,其主要思想是通过低维度参数对三维人体的变形进行建模 SCAPE-->SMPL-->SMPL-X-->STAR -STAR 由发布SMPL模型的研究人员2020成果,对SMPL模型的有效改进 - - -SMPL source code -['v_template', 'weights', 'posedirs', 'pose', 'trans', 'shapedirs', 'betas', 'J']: -basicModel_m_lbs_10_207_0_v1.0.0.pkl -SMPL模型的标准形态,加上形状参数后的Mesh,加上姿态参数后影响的肌肉的松紧状态,以及由姿态参数驱动关节动作后的Mesh -![SMPL Model](https://cdn.jsdelivr.net/gh/goldstine/MyImages/smpl.jpg) - -(a )中的是由平均顶点集以及权重所描述的人体模型。 - -(b )中平均顶点集在体态的影响下发生了位移,同时体态对关节也产生了影响。 - -(c )平均顶点集在体态与动作的两重影响下发生的位移,注意此时的图并未有任何的pose。 - -(d) shape和pose双重影响下的SMPL模型;总共四项,分别为经过体型与姿势影响的顶点集、经过体型影响的关节,以及姿势和权重。 - -Linear Blend Skinning - -骨骼蒙皮算法 - ---- -视觉三维重建: -[**SMPL论文解读和相关基础知识介绍**](https://zhuanlan.zhihu.com/p/256358005) -zhihu|weixin public account: 视觉三维重建 -### 基础概念 -* 顶点vertex: 动画模型可以看成多个小三角形(四边形)组成,*每个小三角形就可以看成一个顶点*,定点越多,动画模型就越精细 -* 骨骼点:人体的一些关节点,类似于Pose Estimation的key point,每个骨骼点都由一个三元组作为参数去控制(可以查看欧拉角,四元数相关概念) -* 骨骼蒙皮Rig: 建立骨骼点和顶点的关联关系,每个骨骼点会关联很多顶点,并且每个顶点的权重都不同,通过这种关联关系,就可以通过控制骨骼点的**旋转向量** 来控制整个人运动 -* 纹理贴图:动画人体模型的表面纹理,即衣服裤子 -* BlendShape: 控制动画角色运动有两种,一种是上面说的Rig,还有一种是利用BlendShape,这种方式相比于Rig,可以不定义骨骼点,比较方便 -* 蒙皮:将模型从一个姿态转变为另一个姿态,使用的**转换矩阵**叫做**蒙皮矩阵** (**Linear Blend Skinning algorithm**) -* 顶点权重(vertex weights):用于**变形网格mesh** -* uv map:将3D多边形网格展开到2D平面得到UV图像 VR mapping 映射 -* texture map: 将3D多边形网格表面的纹理展开到2D平面,得到纹理图像 -* 拓扑(topology):**重新拓扑** 是将高分辨率模型转换为可用于动画的较小模型的过程,两个mesh拓扑相同是指两个mesh上面任一个三角面片的三个顶点的ID是一样的(如某一个三角面片三个顶点是2,5,8,另一个mesh上也必有2,5,8组成的三角面片) - -[CPP实现Ref](https://www.jianshu.com/p/796e4674ba7e) - -SMPL:
    -相比传统LBS,人体姿态影像体表形貌方法:可以模拟人的肌肉在肢体运动过程中的凸起和凹陷,因此可以避免人体在运动过程中的表面失真,可以精准地刻画人的肌肉拉伸以及收缩运动的形貌 - -## SMPL总体模型 -input args: β:人体高矮胖瘦,头身比例等10个参数,是ShapeBlendPose参数,可以通过10个增量模板控制人体形状变化 -Θ:人体整体运动姿态和24个关节相对角度 每个关节点3DoF - -符号含义: -M:SMPL function - -W:Skinning function - -B~p~ :Pose **blendshapes** function - -B~s~ :Shape blendshapes function - -J: joint regressor :predicts joints from surface - - - -:::info 模型生成的函数 - - - ---- - - -## Pose Estimation -根据数据类型可以具体划分为: -+ 单人姿态估计(Single-Person Skeleton Estimation) -+ 多人姿态估计(Mutil-Person Pose Estimation) -+ 人体姿态跟踪(Video Pose Tracking) -+ 3D人体姿态估计(3D Skeleton Estimation) - -> 多个人体有重叠,行人关键点有重叠
    -> 受到视角影响,衣服影响
    -> 受到人体姿态,物理因素影响
    -> 光照,人体角度,拍摄角度
    - ---- -数据集与评测 -按照单人和多人划分: -+ PCK的评价多出现在单人的姿态估计上 -+ 多人姿态估计评价标准基本上为mAP -按照2D和3D进行划分: -+ MPII/MSCOCO/Human3.6M ---- - -姿态估计模型发展 - -DeepPose(2014年),第一个使用CNN做姿态估计的方法,用关键点回归的方法 - -2015年之前,直接对关键点坐标做精确回归 - -2017年开始,有关键点坐标+HeatMap做预测的过程 - -2018年开始,多人估计占据主流 - -``` -| 2D Pose Estimation -|--| Single Person -|------| CPM(OpenPose) -|------| Stacked Hourglass -|--| Mutil Person -|------|Bottom-up -|----------| PAF(OpenPose) -|------|Top-down -|----------|G-RMI -|----------|Mask-RCNN -|----------|RMPE -|----------|CPN -``` - -OpenPose -[FashionAI_keypoint_detection](https://github.com/HqWei/FashionAI_keypoint_detection)
    -[Pose Estimation](https://www.bilibili.com/video/BV1AL411o7rg/?spm_id_from=autoNext&vd_source=72a29ae6c466879a6137e9bab52b0d97) - -直接回归坐标改进: -网络学习到多阶段的反馈-->误差迭代反馈模型 -先验知识-->双源CNN - -Pose Estimation Application: 打分 | 动作指导 - - -# Demo演示 - -官网SMPL: - -Python | DMPL | Maya | Unity | Unreal: [Download](https://smpl.is.tue.mpg.de/download.php) - -## SMPL for Unity - -FBX格式文件: -以Autodesk Filmbox格式保存的三维模型。它可以在各种数字建模和内容创建程序中使用和共享,包括Autodesk的应用程序套件。游戏开发者和动画师经常使用FBX文件。 - -#### include: -* Male and female models(Unity-compatible FBX format) - * Default mesh.The average SMPL body. - * Rigged skeleton ,using LBS - * 10 shape blendshapes - * 207 corrective pose blendshapes - * UV map -* Scripts and sample Unity project to help you get started - * if you want to edit body shape or repose the mesh,you need the scripts -* readme.txt for installation and license instructions -* How-to_SMPLinUnity.pdf for step-by-step guide for using SMPL in Unity - -System Requirements -Unity 5+ (tested on macOS Sierra and Windows 10) - -Download -[Download version 1.0.0 for Unity](https://download.is.tue.mpg.de/download.php?domain=smpl&sfile=SMPL_unity_v.1.0.0.zip) - -How to use SMPL in Unity -[Download tutorial (PDF)](https://download.is.tue.mpg.de/download.php?domain=smpl&sfile=How_to_SMPLinUnity.pdf) - - - -## UP -[Github](https://github.com/FesianXu) - -- [x] : goldstine -[x] g \ No newline at end of file diff --git a/_posts/2023-05-17-project_init.md b/_posts/2023-05-17-project_init.md deleted file mode 100644 index bd168f6..0000000 --- a/_posts/2023-05-17-project_init.md +++ /dev/null @@ -1,30 +0,0 @@ -# vue3+TypeScript项目初始化 - -一个项目要有统一的规范,需要使用eslint+stylelint+prettier来对代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范,需要使用preinstall来同一包管理工具 - -### 环境准备 - -- node v16.14.2 -- pnpm 8.0.0 ---- -step 1: install pnpm - -npm i -g pnpm - -step 2: 使用pnpm vite初始化 - -pnpm create vite - -step 3: 进入项目根目录,安装全部依赖 pnpm install;运行程序 pnpm run dev => http://127.0.0.1:5173 - - - - - - - - - - - - diff --git a/_posts/2023-05-19-Page.md b/_posts/2023-05-19-Page.md deleted file mode 100644 index 1ac294b..0000000 --- a/_posts/2023-05-19-Page.md +++ /dev/null @@ -1,69 +0,0 @@ - -![Typing SVG](https://cdn.jsdelivr.net/gh/goldstine/MyImages/typing.svg) - -### 😆 主页浏览量 - -![Typing SVG](https://count.getloli.com/get/@ranyong1997.github.readme) -![Typing SVG](https://raw.githubusercontent.com/ranyong1997/ranyong1997/main/assets/github-contribution-grid-snake.svg) -![Typing SVG](https://raw.githubusercontent.com/ranyong1997/image_collect/main/img/20211115230555.png) - -### 🙋 Hello - -欢迎来到我的主页 😝,这是一个很有魅力的地方 🙌,咕咕 ✋~ - -但是记学习真的是一个很棒的习惯 💪,每次一次学习别人的东西转变成为自己的,都是一次成长,了解为什么要这么做,为什么不这么做 ⚡ - -每周我都会尽量进行更新 ☁️,如果没更的话,可能是我忘了,也可能是我在钻研某个东西的时候太入迷了 ~~肯定又熬夜了~~ - -~~同学们不要学我,老是熬夜会长痘~~ - -### 👨‍💻 我的开源项目 - -| 项目名字 | 介绍 | -| :----: | :----: | -| 程序员书籍笔记 | [🌸博客]~~()~~ | -| 个人介绍 | [个人介绍]() | -| Api_Automator | [接口自动化]() | -| Auto_JS脚本开发 | [AutoJS]() | -| Auto_Uiautomator2 | [App自动化]() | -| 测试平台 | [测试平台和后台管理]() | -| 慕课网刷课 | [利用接口完成秒刷]() | -| Auto_UiAutomator_Web | [Web自动化]() | -| Fastapi后端模板 | [Fastapi后端模板]() | - -### 🧐本人使用过的语言 - -![Typing SVG](https://img.shields.io/badge/mysql-%2300f.svg?style=flat-square&logo=mysql&logoColor=white) -![Typing SVG](https://img.shields.io/badge/shell_script-%4285F4.svg?style=style=flat-square&logo=gnu-bash&logoColor=white) -![Typing SVG](https://img.shields.io/badge/-Docker-FCC624?style=flat-square&logo=docker) -![Typing SVG](https://img.shields.io/badge/-Python-pink?style=flat-square&logo=Python) -![Typing SVG](https://img.shields.io/badge/-Vue.js-3f745c?style=flat-square&logo=Vue.js) - -### 💻使用过的平台或系统 - -![Typing SVG](https://img.shields.io/badge/Android--0?style=social&logo=Android&logoColor=3DDC84) -![Typing SVG](https://img.shields.io/badge/Windows10--0?style=social&logo=Windows&logoColor=0078D6) -![Typing SVG](https://img.shields.io/badge/Centos7--0?style=social&logo=Centos&logoColor=262577) -![Typing SVG](https://img.shields.io/badge/MacOS--0?style=social&logo=MacOs&logoColor=00979D) - -### 🔧常用的工具或软件 - -![Typing SVG](https://img.shields.io/badge/PyCharm-Python开发-21d789?style=flat-square&logo=PyCharm&labelColor=ffffff&logoColor=000000) -![Typing SVG](https://img.shields.io/badge/VsCode-软件开发-007ACC?style=flat-square&logo=Visual%20Studio%20Code&labelColor=ffffff&logoColor=007ACC) -![Typing SVG](https://img.shields.io/badge/MySQL-结构型数据库-4479A1?style=flat-square&logo=MySQL&labelColor=ffffff&logoColor=4479A1) -![Typing SVG](https://img.shields.io/badge/MongoDB-文档型数据库-47A248?style=flat-square&logo=MongoDB&labelColor=ffffff&logoColor=47A248) -![Typing SVG](https://img.shields.io/badge/Chrome-浏览器-4285F4?style=flat-square&logo=Google%20Chrome&labelColor=ffffff&logoColor=4285F4) -![Typing SVG](https://img.shields.io/badge/Edge-浏览器-0078D7?style=flat-square&logo=Microsoft%20Edge&labelColor=ffffff&logoColor=0078D7) -![Typing SVG](https://img.shields.io/badge/Premiere-视频剪辑-9999FF?style=flat-square&logo=Adobe%20Premiere%20Pro&labelColor=ffffff&logoColor=9999FF) -![Typing SVG](https://img.shields.io/badge/Photoshop-P图工具-31A8FF?style=flat-square&logo=Adobe%20Photoshop&labelColor=ffffff&logoColor=31A8FF) -![Typing SVG](https://img.shields.io/badge/Steam-悠闲娱乐-000000?style=flat-square&logo=Steam&labelColor=ffffff&logoColor=000000) - -### 🔗常逛的网站 - -[![Typing SVG](https://img.shields.io/badge/Bilibili-B%E7%AB%99%E5%A4%A7%E5%AD%A6-00A1D6?style=for-the-badge&logo=Bilibili&labelColor=ffffff)](https://www.bilibili.com/) -[![Typing SVG](https://img.shields.io/badge/GitHub-程序员交友平台-181717?style=for-the-badge&logo=GitHub&logoColor=181717&labelColor=ffffff)](https://github.com/) -[![Typing SVG](https://img.shields.io/badge/知乎-大型装逼社区-0084FF?style=for-the-badge&logo=ZhiHu&logoColor=0084FF&labelColor=ffffff)](https://www.zhihu.com/) -[![Typing SVG](https://img.shields.io/badge/%E6%8E%98%E9%87%91-%E6%8A%80%E6%9C%AF%E5%AE%A2-0084FF?style=for-the-badge&logo=Juejin&logoColor=0084FF&labelColor=ffffff)](https://www.zhihu.com/) -![Typing SVG](https://cdn.jsdelivr.net/gh/ranyong1997/image_collect@main/img/202211171438831.jpg) - -# 🚀 Action \ No newline at end of file diff --git a/_posts/2023-05-20-VideoPages.md b/_posts/2023-05-20-VideoPages.md deleted file mode 100644 index e7dcabc..0000000 --- a/_posts/2023-05-20-VideoPages.md +++ /dev/null @@ -1,7 +0,0 @@ -# Ref - -[One](https://github.com/XuHSS/HTML-CSS-Make-a-Website.git) -[Two](https://gitee.com/ZhongJialing/TengXunShiPin.git) -[Three](https://github.com/lwf1122/yinyue.git) -视频解析: -[Four](https://github.com/Qikaile/video.git) \ No newline at end of file diff --git a/_posts/2023-05-25-PoseEstimate.md b/_posts/2023-05-25-PoseEstimate.md deleted file mode 100644 index 1ea6933..0000000 --- a/_posts/2023-05-25-PoseEstimate.md +++ /dev/null @@ -1,139 +0,0 @@ -## smpl - -### 深度相机 RGB-D -深度相机(RGB-D Camera):可以直接获取被测对象的三维信息(深度图)的相机; -深度图(Depth Texture):图像中每一个像素值表示场景中某点与摄像机的距离; -两种计算物体位置和深度信息的方法:结构光&ToF(1)结构光:用投影仪投射特定的光信息到物体表面由摄像头采集,根据物体造成的光信号的变化来计算深度,常用于解锁以及安全支付;(2)ToF(Time of Flight,飞行时间):传感器发出经调制的近红外光遇物体后反射,通过计算光线发射和反射时间差或相位差来换算深度,常用于智能机后置摄影具体介绍; - -深度图数据集: -TUM RGB-D数据集 提供多种环境下视频数据 标定参数 groundtruth 工具 -[rgbd-dataset](https://vision.in.tum.de/data/datasets/rgbd-dataset/download) - -深度图 ImageJ查看工具 尺度因子 物理距离=像素值/尺度因子 1.2m=6000/5000 -ImageJ功能强大,输出多种图片格式 对比度设置 深度图一般是16位的 - -能够直接输出深度图的相机:实现方式 -+ 通过软件的方式间接计算获得 -+ 通过硬件方式直接测量输出 - -飞行时间 TOF time of fly - -输出彩色图和深度图 RGB-D相机 所以RGB-D相机是一种特殊的深度相机 - -单目结构光相机 有一个红外发射器和一个红外接收器; -双目结构光相机 有一个红外发射器和两个红外接收器; - -### 编码 : - -时分复用编码 适用于静态物体; -空分复用编码 适用于运动物体 - -### 典型代表 -Kinect v1 : infrared projector ; RGB Camera ; infrared camera -Orbbec -structure sensor -iphone x - -### 应用 -3D人脸解锁 活体检测识别 -3D人脸打光 背景虚化 -手机: 3D美颜 美体 -3D动画表情 -3维重建 RGB-D Slam场景三维重建 -三维测量 AR -更精准手势识别 *人体姿态估计* -机器人slam RGB-D sensor(Microsoft kinect) ; Marker for ground truth ; Mobile robot(Pioneer 3-AT) - - -[深度相机](https://blog.csdn.net/qq_41665685/article/details/103476266?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-103476266-blog-105232489.pc_relevant_aa2&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-103476266-blog-105232489.pc_relevant_aa2&utm_relevant_index=1) -[深度相机RGB-D,KinectFusion](https://blog.csdn.net/weixin_44292547/article/details/125692766) - - -## KinectFusion - -[基于RGB-D相机的三维重建总览](https://blog.csdn.net/qq_29462849/article/details/124906067?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-124906067-blog-128258371.235^v36^pc_relevant_default_base3&spm=1001.2101.3001.4242.1&utm_relevant_index=1) - -基于RGB-D 的三维重建与 SFM和SLAM的三维重建之间的不同?参考上链接. - -“基于RGB-D相机的三维重建”以及“基于深度相机的三维重建“和“基于fusion系列方法的三维重建”其实是三种等价的说法。由于该领域发表的大多数工作都在标题里带有“fusion”,业内也简称这些相关工作为“基于fusion系列方法” - -基于fusion系列的三维重建其实可以大体分为两种,一种是对于静态场景的三维重建,以KinectFusion为典型代表,一种是对于动态场景的三维重建,以DynamicFusion为典型代表。而不论是静态场景亦或是动态场景的fusion系列重建,最大特点就是使用了**TSDF模型(截断符号距离函数模型)**,当然也有个别工作使用了**面元(Surfel)的表示方法(面元简单来讲就是点,法线,颜色,权重,半径以及时间戳等属性的集合)**。值得一提的是,基于动态场景的三维重建的难度远大于基于静态场景的三维重建,当然,对于拓扑不会发生变化的重建(比如驱动一个三维网格模板模型),难度会下降很多。 - -TSDF全称是Truncated Signed Distance Function缩写,译为截断符号距离函数 -通常我们先选定要建模的三维空间,比如2m×2m×2m那么大,然后将这个三维空间分割成许多小块,分辨率通常为256×256×256或是128×128×128,每一个小块被称为体素。 - - -KinectFusion,其核心思想将Kinect传感器采集的深度数据流实时融入到(fusion into)一个当前场景对应的全局的隐式表面模型(TSDF模型)中,并使用一个由粗到精的迭代最近点(ICP)算法,跟踪当前采集的深度帧数据与上文的全局的隐式表面模型之间的相对关系,从而获得Kinect传感器的位姿变化。 - -KinectFusion流程: - -a) Depth Map Conversion (Measurement):从深度图转为三维顶点及其法向量; - -b) Camera Tracking (Pose Estimation):运用ICP算法求解相机位姿; - -c) Volumetric Integration (Update Reconstruction):运用体积表面建模的方法估算物体表面; - -d) Raycasting (Surface Prediction):光线投影方法,计算物体表面点坐标和法线,用于渲染和下一帧的Camera Tracking步骤中相机位姿求解。 - -[Kinectfusion: Real-time dense surface mapping and tracking](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ismar2011.pdf) - -[KinectFusion: Real-time 3D Reconstruction and Interaction](https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/kinectfusion-uist-comp.pdf) - -[A Volumetric Method for Building Complex Models fromRange Images](https://dl.acm.org/doi/pdf/10.1145/237170.237269) - -[KinectFusion论文阅读](https://zhuanlan.zhihu.com/p/35894630) - -[Kinect Fusion 算法浅析:精巧中带坑](https://zhuanlan.zhihu.com/p/24873528) - -[啥是KinectFusion](https://zhuanlan.zhihu.com/p/39021659) - -### 深度图转变 Depth Map conversion -![深度图,点云坐标,顶点法向量;相机坐标转换为全局坐标](https://cdn.jsdelivr.net/gh/goldstine/MyImages/depth.png) -关节点和方向 顶点和法向量 法向量只表示方向,所以单位化 不需要长度,也不需要平移 - -**rgbd-kinect-poseRNN 根据Azure Kinect Body Tracking API检测到的关节估计身体姿势** -[Azure Kinect body tracking joints](https://learn.microsoft.com/en-us/azure/kinect-dk/body-joints) - -Azure Kinect Body Tracking API: - -### 人体骨骼关键点检测 -[关键点检测](https://zhuanlan.zhihu.com/p/69042249) - - - -### 静态与动态Fusion 基于RGB-D相机的三维重建 ---- -1 基于静态场景的三维重建 - -1.1 KinectFusion - -1.2 Kintinuous - -1.3 ElasticFusion - -1.4 ElasticReconstruction - -1.5 InfiniTAM - -1.6 BundleFusion - -2 基于动态场景的三维重建 - -2.1 DynamicFusion - -2.2 volumeDeform - -2.3 BodyFusion - -2.4 DoubleFusion - -2.5 UnstructuredFusion‍ - -2.6 RobustFusion - -2.7 KillingFusion - -2.8 SurfelWarp - -2.9 Fusion4D ---- \ No newline at end of file diff --git a/_posts/2023-06-06-architect-awesome.md b/_posts/2023-06-06-architect-awesome.md deleted file mode 100644 index 9e040cc..0000000 --- a/_posts/2023-06-06-architect-awesome.md +++ /dev/null @@ -1,2499 +0,0 @@ - -

    《后端架构师技术图谱》

    - -:thumbsup: :thumbsup: :thumbsup: 推荐一个在线搜课程的神器,“[课程搜](https://www.kcsou.com)”:[https://www.kcsou.com/s_架构师/](https://www.kcsou.com/s_%E6%9E%B6%E6%9E%84%E5%B8%88/) - ------------ - - -推荐: [《Java技术书籍大全》 - awesome-java-books](https://github.com/sorenduan/awesome-java-books) -

    从初级开发者到资深架构师,看这些书就够了

    -
    - -[![知识共享协议(CC协议)](https://img.shields.io/badge/License-Creative%20Commons-DC3D24.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh) -[![GitHub stars](https://img.shields.io/github/stars/xingshaocheng/architect-awesome.svg?style=flat&label=Star)](https://github.com/xingshaocheng/architect-awesome/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/xingshaocheng/architect-awesome.svg?style=flat&label=Fork)](https://github.com/xingshaocheng/architect-awesome/fork) -[![GitHub watchers](https://img.shields.io/github/watchers/xingshaocheng/architect-awesome.svg?style=flat&label=Watch)](https://github.com/xingshaocheng/architect-awesome/watchers) -[![GitHub followers](https://img.shields.io/github/followers/xingshaocheng.svg?label=%E5%85%B3%E6%B3%A8)](https://github.com/xingshaocheng) - - -* [数据结构](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#数据结构) - * [队列](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#队列) - * [集合](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#集合) - * [链表、数组](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#链表数组) - * [字典、关联数组](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#字典关联数组) - * [栈](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#栈) - * [树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#树) - * [二叉树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#二叉树) - * [完全二叉树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#完全二叉树) - * [平衡二叉树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#平衡二叉树) - * [二叉查找树(BST)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#二叉查找树bst) - * [红黑树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#红黑树) - * [B,B+,B*树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#b-bb树) - * [LSM 树](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#lsm-树) - * [BitSet](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#bitset) -* [常用算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#常用算法) - * [排序、查找算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#排序查找算法) - * [选择排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#选择排序) - * [冒泡排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#冒泡排序) - * [插入排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#插入排序) - * [快速排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#快速排序) - * [归并排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#归并排序) - * [希尔排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#希尔排序) - * [堆排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#堆排序) - * [计数排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#计数排序) - * [桶排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#桶排序) - * [基数排序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#基数排序) - * [二分查找](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#二分查找) - * [Java 中的排序工具](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java-中的排序工具) - * [布隆过滤器](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#布隆过滤器) - * [字符串比较](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#字符串比较) - * [KMP 算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kmp-算法) - * [深度优先、广度优先](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#深度优先广度优先) - * [贪心算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#贪心算法) - * [回溯算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#回溯算法) - * [剪枝算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#剪枝算法) - * [动态规划](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#动态规划) - * [朴素贝叶斯](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#朴素贝叶斯) - * [推荐算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#推荐算法) - * [最小生成树算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#最小生成树算法) - * [最短路径算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#最短路径算法) -* [并发](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#并发) - * [Java 并发](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java-并发) - * [多线程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#多线程) - * [线程安全](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#线程安全) - * [一致性、事务](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#一致性事务) - * [事务 ACID 特性](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#事务-acid-特性) - * [事务的隔离级别](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#事务的隔离级别) - * [MVCC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mvcc) - * [锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#锁) - * [Java中的锁和同步类](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java中的锁和同步类) - * [公平锁 & 非公平锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#公平锁--非公平锁) - * [悲观锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#悲观锁) - * [乐观锁 & CAS](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#乐观锁--cas) - * [ABA 问题](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#aba-问题) - * [CopyOnWrite容器](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#copyonwrite容器) - * [RingBuffer](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ringbuffer) - * [可重入锁 & 不可重入锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#可重入锁--不可重入锁) - * [互斥锁 & 共享锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#互斥锁--共享锁) - * [死锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#死锁) -* [操作系统](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#操作系统) - * [计算机原理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#计算机原理) - * [CPU](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#cpu) - * [多级缓存](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#多级缓存) - * [进程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#进程) - * [线程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#线程) - * [协程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#协程) - * [Linux](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#linux) -* [设计模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#设计模式) - * [设计模式的六大原则](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#设计模式的六大原则) - * [23种常见设计模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#23种常见设计模式) - * [应用场景](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#应用场景) - * [单例模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#单例模式) - * [责任链模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#责任链模式) - * [MVC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mvc) - * [IOC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ioc) - * [AOP](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#aop) - * [UML](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#uml) - * [微服务思想](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#微服务思想) - * [康威定律](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#康威定律) -* [运维 & 统计 & 技术支持](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#运维--统计--技术支持) - * [常规监控](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#常规监控) - * [APM](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#apm) - * [统计分析](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#统计分析) - * [持续集成(CI/CD)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#持续集成cicd) - * [Jenkins](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#jenkins) - * [环境分离](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#环境分离) - * [自动化运维](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#自动化运维) - * [Ansible](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ansible) - * [puppet](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#puppet) - * [chef](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#chef) - * [测试](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#测试) - * [TDD 理论](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tdd-理论) - * [单元测试](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#单元测试) - * [压力测试](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#压力测试) - * [全链路压测](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#全链路压测) - * [A/B 、灰度、蓝绿测试](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ab-灰度蓝绿测试) - * [虚拟化](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#虚拟化) - * [KVM](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kvm) - * [Xen](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#xen) - * [OpenVZ](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#openvz) - * [容器技术](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#容器技术) - * [Docker](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#docker) - * [云技术](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#云技术) - * [OpenStack](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#openstack) - * [DevOps](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#devops) - * [文档管理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#文档管理) -* [中间件](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#中间件) - * [Web Server](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web-server) - * [Nginx](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#nginx) - * [OpenResty](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#openresty) - * [Tengine](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#Tengine) - * [Apache Httpd](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#apache-httpd) - * [Tomcat](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tomcat) - * [架构原理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#架构原理) - * [调优方案](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#调优方案) - * [Jetty](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#jetty) - * [缓存](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#缓存) - * [本地缓存](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#本地缓存) - * [客户端缓存](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#客户端缓存) - * [服务端缓存](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#服务端缓存) - * [Web缓存](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web缓存) - * [Memcached](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#memcached) - * [Redis](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#redis) - * [架构](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#架构) - * [回收策略](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#回收策略) - * [Tair](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tair) - * [消息队列](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#消息队列) - * [消息总线](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#消息总线) - * [消息的顺序](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#消息的顺序) - * [RabbitMQ](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rabbitmq) - * [RocketMQ](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rocketmq) - * [ActiveMQ](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#activemq) - * [Kafka](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kafka) - * [Redis 消息推送](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#redis-消息推送) - * [ZeroMQ](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#zeromq) - * [定时调度](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#定时调度) - * [单机定时调度](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#单机定时调度) - * [分布式定时调度](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式定时调度) - * [RPC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rpc) - * [Dubbo](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#dubbo) - * [Thrift](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#thrift) - * [gRPC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#grpc) - * [数据库中间件](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#数据库中间件) - * [Sharding Jdbc](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#sharding-jdbc) - * [日志系统](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#日志系统) - * [日志搜集](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#日志搜集) - * [配置中心](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#配置中心) - * [API 网关](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#api-网关) -* [网络](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#网络) - * [协议](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#协议) - * [OSI 七层协议](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#osi-七层协议) - * [TCP/IP](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tcpip) - * [HTTP](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#http) - * [HTTP2.0](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#http20) - * [HTTPS](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#https) - * [网络模型](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#网络模型) - * [Epoll](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#epoll) - * [Java NIO](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java-nio) - * [kqueue](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kqueue) - * [连接和短连接](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#连接和短连接) - * [框架](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#框架) - * [零拷贝(Zero-copy)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#零拷贝zero-copy) - * [序列化(二进制协议)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#序列化二进制协议) - * [Hessian](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hessian) - * [Protobuf](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#protobuf) -* [数据库](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#数据库) - * [基础理论](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#基础理论) - * [关系数据库设计的三大范式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#关系数据库设计的三大范式) - * [MySQL](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mysql) - * [原理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#原理) - * [InnoDB](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#innodb) - * [优化](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#优化) - * [索引](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#索引) - * [聚集索引, 非聚集索引](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#聚集索引-非聚集索引) - * [复合索引](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#复合索引) - * [自适应哈希索引(AHI)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#自适应哈希索引ahi) - * [explain](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#explain) - * [NoSQL](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#nosql) - * [MongoDB](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mongodb) - * [Hbase](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hbase) -* [搜索引擎](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#搜索引擎) - * [搜索引擎原理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#搜索引擎原理) - * [Lucene](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#lucene) - * [Elasticsearch](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#elasticsearch) - * [Solr](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#solr) - * [sphinx](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#sphinx) -* [性能](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#性能) - * [性能优化方法论](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#性能优化方法论) - * [容量评估](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#容量评估) - * [CDN 网络](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#cdn-网络) - * [连接池](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#连接池) - * [性能调优](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#性能调优) -* [大数据](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#大数据) - * [流式计算](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#流式计算) - * [Storm](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#storm) - * [Flink](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#flink) - * [Kafka Stream](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kafka-stream) - * [应用场景](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#应用场景-1) - * [Hadoop](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hadoop) - * [HDFS](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hdfs) - * [MapReduce](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mapreduce) - * [Yarn](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#yarn) - * [Spark](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#spark) -* [安全](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#安全) - * [web 安全](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web-安全) - * [XSS](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#xss) - * [CSRF](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#csrf) - * [SQL 注入](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#sql-注入) - * [Hash Dos](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hash-dos) - * [脚本注入](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#脚本注入) - * [漏洞扫描工具](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#漏洞扫描工具) - * [验证码](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#验证码) - * [DDoS 防范](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ddos-防范) - * [用户隐私信息保护](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#用户隐私信息保护) - * [序列化漏洞](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#序列化漏洞) - * [加密解密](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#加密解密) - * [对称加密](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#对称加密) - * [哈希算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#哈希算法) - * [非对称加密](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#非对称加密) - * [服务器安全](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#服务器安全) - * [数据安全](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#数据安全) - * [数据备份](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#数据备份) - * [网络隔离](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#网络隔离) - * [内外网分离](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#内外网分离) - * [登录跳板机](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#登录跳板机) - * [授权、认证](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#授权认证) - * [RBAC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rbac) - * [OAuth2.0](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#oauth20) - * [OIDC](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#oidc) - * [SAML](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#saml) - * [双因素认证(2FA)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#双因素认证2fa) - * [单点登录(SSO)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#单点登录sso) -* [常用开源框架](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#常用开源框架) - * [开源协议](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#开源协议) - * [日志框架](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#日志框架) - * [Log4j、Log4j2](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#log4jlog4j2) - * [Logback](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#logback) - * [ORM](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#orm) - * [网络框架](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#网络框架) - * [Web 框架](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web-框架) - * [Spring 家族](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#spring-家族) - * [工具框架](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#工具框架) -* [分布式设计](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式设计) - * [扩展性设计](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#扩展性设计) - * [稳定性 & 高可用](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#稳定性--高可用) - * [硬件负载均衡](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#硬件负载均衡) - * [软件负载均衡](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#软件负载均衡) - * [限流](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#限流) - * [应用层容灾](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#应用层容灾) - * [跨机房容灾](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#跨机房容灾) - * [容灾演练流程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#容灾演练流程) - * [平滑启动](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#平滑启动) - * [数据库扩展](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#数据库扩展) - * [读写分离模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#读写分离模式) - * [分片模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分片模式) - * [服务治理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#服务治理) - * [服务注册与发现](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#服务注册与发现) - * [服务路由控制](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#服务路由控制) - * [分布式一致](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式一致) - * [CAP 与 BASE 理论](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#cap-与-base-理论) - * [分布式锁](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式锁) - * [分布式一致性算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式一致性算法) - * [PAXOS](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#paxos) - * [Zab](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#zab) - * [Raft](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#raft) - * [Gossip](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#gossip) - * [两阶段提交、多阶段提交](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#两阶段提交多阶段提交) - * [幂等](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#幂等) - * [分布式一致方案](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式一致方案) - * [分布式 Leader 节点选举](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式-leader-节点选举) - * [TCC(Try/Confirm/Cancel) 柔性事务](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tcctryconfirmcancel-柔性事务) - * [分布式文件系统](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#分布式文件系统) - * [唯一ID 生成](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#唯一id-生成) - * [全局唯一ID](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#全局唯一id) - * [一致性Hash算法](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#一致性hash算法) -* [设计思想 & 开发模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#设计思想--开发模式) - * [DDD(Domain-driven Design - 领域驱动设计)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ddddomain-driven-design---领域驱动设计) - * [命令查询职责分离(CQRS)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#命令查询职责分离cqrs) - * [贫血,充血模型](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#贫血充血模型) - * [Actor 模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#actor-模式) - * [响应式编程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#响应式编程) - * [Reactor](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#reactor) - * [RxJava](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rxjava) - * [Vert.x](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#vertx) - * [DODAF2.0](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#dodaf20) - * [Serverless](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#serverless) - * [Service Mesh](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#service-mesh) -* [项目管理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#项目管理) - * [架构评审](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#架构评审) - * [重构](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#重构) - * [代码规范](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#代码规范) - * [代码 Review](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#代码-review) - * [RUP](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rup) - * [看板管理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#看板管理) - * [SCRUM](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#scrum) - * [敏捷开发](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#敏捷开发) - * [极限编程(XP)](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#极限编程xp) - * [结对编程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#结对编程) - * [PDCA 循环质量管理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#pdca-循环质量管理) - * [FMEA管理模式](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#fmea管理模式) -* [通用业务术语](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#通用业务术语) -* [技术趋势](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#技术趋势) -* [政策、法规](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#政策法规) - * [法律](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#法律) - * [严格遵守刑法253法条](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#严格遵守刑法253法条) -* [架构师素质](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#架构师素质) -* [团队管理](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#团队管理) - * [招聘](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#招聘) -* [资讯](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#资讯) - * [行业资讯](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#行业资讯) - * [公众号列表](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#公众号列表) - * [博客](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#博客) - * [团队博客](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#团队博客) - * [个人博客](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#个人博客) - * [综合门户、社区](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#综合门户社区) - * [问答、讨论类社区](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#问答讨论类社区) - * [行业数据分析](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#行业数据分析) - * [专项网站](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#专项网站) - * [其他类](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#其他类) - * [推荐参考书](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#推荐参考书) - * [在线电子书](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#在线电子书) - * [纸质书](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#纸质书) - * [开发方面](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#开发方面) - * [架构方面](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#架构方面) - * [技术管理方面](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#技术管理方面) - * [基础理论](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#基础理论-1) - * [工具方面](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#工具方面) - * [大数据方面](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#大数据方面) -* [技术资源](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#技术资源) - * [开源资源](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#开源资源) - * [手册、文档、教程](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#手册文档教程) - * [在线课堂](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#在线课堂) - * [会议、活动](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#会议活动) - * [常用APP](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#常用app) - * [找工作](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#找工作) - * [工具](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#工具) - * [代码托管](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#代码托管) - * [文件服务](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#文件服务) - * [综合云服务商](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#综合云服务商) - * [VPS](https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#vps) - - -**(Toc generated by [simple-php-github-toc](https://github.com/xingshaocheng/simple-php-github-toc) )** - -# 数据结构 - -## 队列 -* [《java队列——queue详细分析》](https://www.cnblogs.com/lemon-flm/p/7877898.html) - * 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。 - * 阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、PriorityBlockingQueue,采用锁机制;使用 ReentrantLock 锁。 - -* [《LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue对比分析》](https://www.cnblogs.com/mantu/p/5802393.html) - -## 集合 -* [《Java Set集合的详解》](https://blog.csdn.net/qq_33642117/article/details/52040345) - -## 链表、数组 -* [《Java集合详解--什么是List》](https://blog.csdn.net/wz249863091/article/details/52853360) - -## 字典、关联数组 -* [《Java map 详解 - 用法、遍历、排序、常用API等》](https://baike.xsoftlab.net/view/250.html) - -## 栈 -* [《java数据结构与算法之栈(Stack)设计与实现》](https://blog.csdn.net/javazejian/article/details/53362993) -* [《Java Stack 类》](http://www.runoob.com/java/java-stack-class.html) -* [《java stack的详细实现分析》](https://blog.csdn.net/f2006116/article/details/51375225) - * Stack 是线程安全的。 - * 内部使用数组保存数据,不够时翻倍。 - -## 树 - -### 二叉树 - -每个节点最多有两个叶子节点。 -* [《二叉树》](https://blog.csdn.net/cai2016/article/details/52589952) - -### 完全二叉树 -* [《完全二叉树》](https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91/7773232?fr=aladdin) - * 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。 - -### 平衡二叉树 -左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 -* [《浅谈数据结构-平衡二叉树》](http://www.cnblogs.com/polly333/p/4798944.html) -* [《浅谈算法和数据结构: 八 平衡查找树之2-3树》](http://www.cnblogs.com/yangecnu/p/Introduce-2-3-Search-Tree.html) - -### 二叉查找树(BST) -二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。 - -* [《浅谈算法和数据结构: 七 二叉查找树》](http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html) - - -### 红黑树 -* [《最容易懂得红黑树》](https://blog.csdn.net/sun_tttt/article/details/65445754) - * 添加阶段后,左旋或者右旋从而再次达到平衡。 -* [《浅谈算法和数据结构: 九 平衡查找树之红黑树》](http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html) - -### B,B+,B*树 -MySQL是基于B+树聚集索引组织表 - -* [《B-树,B+树,B\*树详解》](https://blog.csdn.net/aqzwss/article/details/53074186) -* [《B-树,B+树与B\*树的优缺点比较》](https://blog.csdn.net/bigtree_3721/article/details/73632405) - * B+树的叶子节点链表结构相比于 B-树便于扫库,和范围检索。 -### LSM 树 - -LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 -Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。 - -* [《LSM树 VS B+树》](https://blog.csdn.net/dbanote/article/details/8897599) - * B+ 树读性能好,但由于需要有序结构,当key比较分散时,磁盘寻道频繁,造成写性能较差。 - * LSM 是将一个大树拆分成N棵小树,先写到内存(无寻道问题,性能高),在内存中构建一颗有序小树(有序树),随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历(二分查找)所有的小树,但在每颗小树内部数据是有序的。 - -* [《LSM树(Log-Structured Merge Tree)存储引擎》](https://blog.csdn.net/u014774781/article/details/52105708) - * 极端的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。 - * 优化方式:Bloom filter 替代二分查找;compact 小数位大树,提高查询性能。 - * Hbase 中,内存中达到一定阈值后,整体flush到磁盘上、形成一个文件(B+数),HDFS不支持update操作,所以Hbase做整体flush而不是merge update。flush到磁盘上的小树,定期会合并成一个大树。 - -## BitSet - -经常用于大规模数据的排重检查。 - -* [《Java Bitset类》](http://www.runoob.com/java/java-bitset-class.html) -* [《Java BitSet(位集)》](https://blog.csdn.net/caiandyong/article/details/51581160) - -# 常用算法 - -* [《常见排序算法及对应的时间复杂度和空间复杂度》](https://blog.csdn.net/gane_cheng/article/details/52652705) - -## 排序、查找算法 - -* [《常见排序算法及对应的时间复杂度和空间复杂度》](https://blog.csdn.net/gane_cheng/article/details/52652705) - -### 选择排序 -* [《Java中的经典算法之选择排序(SelectionSort)》](https://www.cnblogs.com/shen-hua/p/5424059.html) - * 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。 - -### 冒泡排序 -* [《冒泡排序的2种写法》](https://blog.csdn.net/shuaizai88/article/details/73250615) - * 相邻元素前后交换、把最大的排到最后。 - * 时间复杂度 O(n²) - -### 插入排序 -* [《排序算法总结之插入排序》](https://www.cnblogs.com/hapjin/p/5517667.html) - -### 快速排序 -* [《坐在马桶上看算法:快速排序》](https://blog.csdn.net/afjaklsdflka/article/details/52829030) - * 一侧比另外一侧都大或小。 -### 归并排序 -* [《图解排序算法(四)之归并排序》](http://www.cnblogs.com/chengxiao/p/6194356.html) - * 分而治之,分成小份排序,在合并(重建一个新空间进行复制)。 - -### 希尔排序 -TODO - -### 堆排序 -* [《图解排序算法(三)之堆排序》](https://www.cnblogs.com/chengxiao/p/6129630.html) - * 排序过程就是构建最大堆的过程,最大堆:每个结点的值都大于或等于其左右孩子结点的值,堆顶元素是最大值。 - -### 计数排序 -* [《计数排序和桶排序》](https://www.cnblogs.com/suvllian/p/5495780.html) - * 和桶排序过程比较像,差别在于桶的数量。 - -### 桶排序 -* [《【啊哈!算法】最快最简单的排序——桶排序》](http://blog.51cto.com/ahalei/1362789) -* [《排序算法(三):计数排序与桶排序》](https://blog.csdn.net/sunjinshengli/article/details/70738527) - * 桶排序将[0,1)区间划分为n个相同的大小的子区间,这些子区间被称为桶。 - * 每个桶单独进行排序,然后再遍历每个桶。 - -### 基数排序 - -按照个位、十位、百位、...依次来排。 - -* [《排序算法系列:基数排序》](https://blog.csdn.net/lemon_tree12138/article/details/51695211) -* [《基数排序》](https://www.cnblogs.com/skywang12345/p/3603669.html) - - -### 二分查找 -* [《二分查找(java实现)》](https://www.cnblogs.com/coderising/p/5708632.html) - * 要求待查找的序列有序。 - * 时间复杂度 O(logN)。 - -* [《java实现二分查找-两种方式》](https://blog.csdn.net/maoyuanming0806/article/details/78176957) - * while + 递归。 -### Java 中的排序工具 -* [《Arrays.sort和Collections.sort实现原理解析》](https://blog.csdn.net/u011410529/article/details/56668545?locationnum=6&fps=1) - * Collections.sort算法调用的是合并排序。 - * Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序。 - -## 布隆过滤器 - -常用于大数据的排重,比如email,url 等。 -核心原理:将每条数据通过计算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),其中每一位都是通过随机计算获得,在将指纹映射到一个大的按位存储的空间中。注意:会有一定的错误率。 -优点:空间和时间效率都很高。 -缺点:随着存入的元素数量增加,误算率随之增加。 - -* [《布隆过滤器 -- 空间效率很高的数据结构》](https://segmentfault.com/a/1190000002729689) -* [《大量数据去重:Bitmap和布隆过滤器(Bloom Filter)》](https://blog.csdn.net/zdxiq000/article/details/57626464) -* [《基于Redis的布隆过滤器的实现》](https://blog.csdn.net/qq_30242609/article/details/71024458) - * 基于 Redis 的 Bitmap 数据结构。 -* [《网络爬虫:URL去重策略之布隆过滤器(BloomFilter)的使用》](https://blog.csdn.net/lemon_tree12138/article/details/47973715) - * 使用Java中的 BitSet 类 和 加权和hash算法。 - -## 字符串比较 - -### KMP 算法 -KMP:Knuth-Morris-Pratt算法(简称KMP) -核心原理是利用一个“部分匹配表”,跳过已经匹配过的元素。 -* [《字符串匹配的KMP算法》](http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html) - -## 深度优先、广度优先 -* [《广度优先搜索BFS和深度优先搜索DFS》](https://www.cnblogs.com/0kk470/p/7555033.html) - -## 贪心算法 -* [《算法:贪婪算法基础》](https://www.cnblogs.com/MrSaver/p/8641971.html) -* [《常见算法及问题场景——贪心算法》](https://blog.csdn.net/a345017062/article/details/52443781) - -## 回溯算法 -* [《 五大常用算法之四:回溯法》](https://blog.csdn.net/qfikh/article/details/51960331) - -## 剪枝算法 -* [《α-β剪枝算法》](https://blog.csdn.net/luningcsdn/article/details/50930276) - -## 动态规划 -* [《详解动态规划——邹博讲动态规划》](https://www.cnblogs.com/little-YTMM/p/5372680.html) -* [《动态规划算法的个人理解》](https://blog.csdn.net/yao_zi_jie/article/details/54580283) - -## 朴素贝叶斯 - -* [《带你搞懂朴素贝叶斯分类算法》](https://blog.csdn.net/amds123/article/details/70173402) - * P(B|A)=P(A|B)P(B)/P(A) - -* [《贝叶斯推断及其互联网应用1》](http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_one.html) -* [《贝叶斯推断及其互联网应用2》](http://www.ruanyifeng.com/blog/2011/08/bayesian_inference_part_two.html) - - -## 推荐算法 -* [《推荐算法综述》](http://www.infoq.com/cn/articles/recommendation-algorithm-overview-part01) -* [《TOP 10 开源的推荐系统简介》](https://www.oschina.net/news/51297/top-10-open-source-recommendation-systems) - -## 最小生成树算法 -* [《算法导论--最小生成树(Kruskal和Prim算法)》](https://blog.csdn.net/luoshixian099/article/details/51908175) - -## 最短路径算法 - -* [《Dijkstra算法详解》](https://blog.csdn.net/qq_35644234/article/details/60870719) - -# 并发 - -## Java 并发 - -* [Java 并发知识合集](https://github.com/CL0610/Java-concurrency) -* [JAVA并发知识图谱](https://github.com/CL0610/Java-concurrency/blob/master/Java并发知识图谱.png) - -## 多线程 - -* [《40个Java多线程问题总结》](https://www.cnblogs.com/xrq730/p/5060921.html) - -## 线程安全 - -* [《Java并发编程——线程安全及解决机制简介》](https://www.cnblogs.com/zhanht/p/5450325.html) - -## 一致性、事务 - -### 事务 ACID 特性 -* [《数据库事务ACID特性》](https://blog.csdn.net/u012440687/article/details/52116108) - -### 事务的隔离级别 - -* 未提交读:一个事务可以读取另一个未提交的数据,容易出现脏读的情况。 -* 读提交:一个事务等另外一个事务提交之后才可以读取数据,但会出现不可重复读的情况(多次读取的数据不一致),读取过程中出现UPDATE操作,会多。(大多数数据库默认级别是RC,比如SQL Server,Oracle),读取的时候不可以修改。 -* 可重复读: 同一个事务里确保每次读取的时候,获得的是同样的数据,但不保障原始数据被其他事务更新(幻读),Mysql InnoDB 就是这个级别。 -* 序列化:所有事物串行处理(牺牲了效率) - -* [《理解事务的4种隔离级别》](https://blog.csdn.net/qq_33290787/article/details/51924963) -* [数据库事务的四大特性及事务隔离级别](https://www.cnblogs.com/z-sm/p/7245981.html) - -* [《MySQL的InnoDB的幻读问题 》](http://blog.sina.com.cn/s/blog_499740cb0100ugs7.html) - * 幻读的例子非常清楚。 - * 通过 SELECT ... FOR UPDATE 解决。 - -* [《一篇文章带你读懂MySQL和InnoDB》](https://draveness.me/mysql-innodb) - * 图解脏读、不可重复读、幻读问题。 - - -### MVCC - - -* [《【mysql】关于innodb中MVCC的一些理解》](https://www.cnblogs.com/chenpingzhao/p/5065316.html) - * innodb 中 MVCC 用在 Repeatable-Read 隔离级别。 - * MVCC 会产生幻读问题(更新时异常。) - -* [《轻松理解MYSQL MVCC 实现机制》](https://blog.csdn.net/whoamiyang/article/details/51901888) - - * 通过隐藏版本列来实现 MVCC 控制,一列记录创建时间、一列记录删除时间,这里的时间 - * 每次只操作比当前版本小(或等于)的 行。 - - - -## 锁 - -### Java中的锁和同步类 - -* [《Java中的锁分类》](https://www.cnblogs.com/qifengshi/p/6831055.html) - * 主要包括 synchronized、ReentrantLock、和 ReadWriteLock。 - -* [《Java并发之AQS详解》](https://www.cnblogs.com/waterystone/p/4920797.html) - -* [《Java中信号量 Semaphore》](http://cuisuqiang.iteye.com/blog/2020146) - * 有数量控制 - * 申请用 acquire,申请不要则阻塞;释放用 release。 - -* [《java开发中的Mutex vs Semaphore》](https://www.cnblogs.com/davidwang456/p/6094947.html) - * 简单的说 就是Mutex是排它的,只有一个可以获取到资源, Semaphore也具有排它性,但可以定义多个可以获取的资源的对象。 - -### 公平锁 & 非公平锁 - -公平锁的作用就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。 - -* [《公平锁与非公平锁》](https://blog.csdn.net/EthanWhite/article/details/55508357) - * 默认情况下 ReentrantLock 和 synchronized 都是非公平锁。ReentrantLock 可以设置成公平锁。 - -### 悲观锁 - -悲观锁如果使用不当(锁的条数过多),会引起服务大面积等待。推荐优先使用乐观锁+重试。 - -* [《【MySQL】悲观锁&乐观锁》](https://www.cnblogs.com/zhiqian-ali/p/6200874.html) - * 乐观锁的方式:版本号+重试方式 - * 悲观锁:通过 select ... for update 进行行锁(不可读、不可写,share 锁可读不可写)。 - -* [《Mysql查询语句使用select.. for update导致的数据库死锁分析》](https://www.cnblogs.com/Lawson/p/5008741.html) - * mysql的innodb存储引擎实务锁虽然是锁行,但它内部是锁索引的。 - * 锁相同数据的不同索引条件可能会引起死锁。 - -* [《Mysql并发时经典常见的死锁原因及解决方法》](https://www.cnblogs.com/zejin2008/p/5262751.html) - -### 乐观锁 & CAS - -* [《乐观锁的一种实现方式——CAS》](https://blog.csdn.net/u011514810/article/details/76895723/) - * 和MySQL乐观锁方式相似,只不过是通过和原值进行比较。 - -### ABA 问题 - -由于高并发,在CAS下,更新后可能此A非彼A。通过版本号可以解决,类似于上文Mysql 中提到的的乐观锁。 - -* [《Java CAS 和ABA问题》](https://www.cnblogs.com/549294286/p/3766717.html) -* [《Java 中 ABA问题及避免》](https://blog.csdn.net/li954644351/article/details/50511879) - * AtomicStampedReference 和 AtomicStampedReference。 - -### CopyOnWrite容器 - -可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,不适合需要数据强一致性的场景。 - -* [《JAVA中写时复制(Copy-On-Write)Map实现》](https://www.cnblogs.com/hapjin/p/4840107.html) - * 实现读写分离,读取发生在原始数据上,写入发生在副本上。 - * 不用加锁,通过最终一致实现一致性。 - -* [《聊聊并发-Java中的Copy-On-Write容器》](https://blog.csdn.net/a494303877/article/details/53404623) - -### RingBuffer -* [《线程安全的无锁RingBuffer的实现【一个读线程,一个写线程】》](http://www.cnblogs.com/l00l/p/4115001.html) - -### 可重入锁 & 不可重入锁 - -* [《可重入锁和不可重入锁》](https://www.cnblogs.com/dj3839/p/6580765.html) - * 通过简单代码举例说明可重入锁和不可重入锁。 - * 可重入锁指同一个线程可以再次获得之前已经获得的锁。 - * 可重入锁可以用户避免死锁。 - * Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock - -* [《ReenTrantLock可重入锁(和synchronized的区别)总结》](https://www.cnblogs.com/baizhanshi/p/7211802.html) - * synchronized 使用方便,编译器来加锁,是非公平锁。 - * ReenTrantLock 使用灵活,锁的公平性可以定制。 - * 相同加锁场景下,推荐使用 synchronized。 - -### 互斥锁 & 共享锁 - -互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 -共享锁:可以有多个线程同时或的锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。 - -* [《ReadWriteLock场景应用》](https://www.cnblogs.com/liang1101/p/6475555.html) - -### 死锁 -* [《“死锁”四个必要条件的合理解释》](https://blog.csdn.net/yunfenglw/article/details/45950305) - * 互斥、持有、不可剥夺、环形等待。 -* [Java如何查看死锁?](https://blog.csdn.net/u014039577/article/details/52351626) - * JConsole 可以识别死锁。 - -* [java多线程系列:死锁及检测](https://blog.csdn.net/bohu83/article/details/51135061) - * jstack 可以显示死锁。 - -# 操作系统 - -## 计算机原理 - -* [《操作系统基础知识——操作系统的原理,类型和结构》](https://segmentfault.com/a/1190000003692840) - -## CPU - -### 多级缓存 -典型的 CPU 有三级缓存,距离核心越近,速度越快,空间越小。L1 一般 32k,L2 一般 256k,L3 一般12M。内存速度需要200个 CPU 周期,CPU 缓存需要1个CPU周期。 - -* [《从Java视角理解CPU缓存和伪共享》](https://blog.csdn.net/zero__007/article/details/54089730) - -## 进程 - -TODO - -## 线程 - -* [《线程的生命周期及状态转换详解》](https://blog.csdn.net/asdf_1024/article/details/78978437) - -## 协程 - -* [《终结python协程----从yield到actor模型的实现》](https://www.thinksaas.cn/group/topic/839375/) - * 线程的调度是由操作系统负责,协程调度是程序自行负责 - * 与线程相比,协程减少了无谓的操作系统切换. - * 实际上当遇到IO操作时做切换才更有意义,(因为IO操作不用占用CPU),如果没遇到IO操作,按照时间片切换. - -## Linux - -* [《Linux 命令大全》](http://www.runoob.com/linux/linux-command-manual.html) - -# 设计模式 - -## 设计模式的六大原则 -* [《设计模式的六大原则》](https://blog.csdn.net/q291611265/article/details/48465113) - * 开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。 - * 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。 - * 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。 - * 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。 - * 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用,通过中间类建立联系。 - * 合成复用原则:尽量使用合成/聚合,而不是使用继承。 - -## 23种常见设计模式 -* [《设计模式》](http://www.runoob.com/design-pattern/design-pattern-tutorial.html) -* [《23种设计模式全解析》](https://www.cnblogs.com/susanws/p/5510229.html) -* [《设计模式类图与示例》](https://github.com/ToryZhou/design-pattern) - -## 应用场景 -* [《细数JDK里的设计模式》](https://www.cnblogs.com/winkey4986/p/5148953.html) - * 结构型模式: - * 适配器:用来把一个接口转化成另一个接口,如 java.util.Arrays#asList()。 - * 桥接模式:这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变化,如JDBC; - * 组合模式:使得客户端看来单个对象和对象的组合是同等的。换句话说,某个类型的方法同时也接受自身类型作为参数,如 Map.putAll,List.addAll、Set.addAll。 - * 装饰者模式:动态的给一个对象附加额外的功能,这也是子类的一种替代方式,如 java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap。 - * 享元模式:使用缓存来加速大量小对象的访问时间,如 valueOf(int)。 - * 代理模式:代理模式是用一个简单的对象来代替一个复杂的或者创建耗时的对象,如 java.lang.reflect.Proxy - - * 创建模式: - * 抽象工厂模式:抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型,如 java.util.Calendar#getInstance()。 - * 建造模式(Builder):定义了一个新的类来构建另一个类的实例,以简化复杂对象的创建,如:java.lang.StringBuilder#append()。 - * 工厂方法:就是 **一个返回**具体对象的方法,而不是多个,如 java.lang.Object#toString()、java.lang.Class#newInstance()。 - * 原型模式:使得类的实例能够生成自身的拷贝、如:java.lang.Object#clone()。 - * 单例模式:全局只有一个实例,如 java.lang.Runtime#getRuntime()。 - * 行为模式: - * 责任链模式:通过把请求从一个对象传递到链条中下一个对象的方式,直到请求被处理完毕,以实现对象间的解耦。如 javax.servlet.Filter#doFilter()。 - * 命令模式:将操作封装到对象内,以便存储,传递和返回,如:java.lang.Runnable。 - * 解释器模式:定义了一个语言的语法,然后解析相应语法的语句,如,java.text.Format,java.text.Normalizer。 - * 迭代器模式:提供一个一致的方法来顺序访问集合中的对象,如 java.util.Iterator。 - * 中介者模式:通过使用一个中间对象来进行消息分发以及减少类之间的直接依赖,java.lang.reflect.Method#invoke()。 - * 空对象模式:如 java.util.Collections#emptyList()。 - * 观察者模式:它使得一个对象可以灵活的将消息发送给感兴趣的对象,如 java.util.EventListener。 - * 模板方法模式:让子类可以重写方法的一部分,而不是整个重写,如 java.util.Collections#sort()。 - -* [《Spring-涉及到的设计模式汇总》](https://www.cnblogs.com/hwaggLee/p/4510687.html) -* [《Mybatis使用的设计模式》](https://blog.csdn.net/u012387062/article/details/54719114) - -## 单例模式 -* [《单例模式的三种实现 以及各自的优缺点》](https://blog.csdn.net/YECrazy/article/details/79481964) -* [《单例模式--反射--防止序列化破坏单例模式》](https://www.cnblogs.com/ttylinux/p/6498822.html) - * 使用枚举类型。 - -## 责任链模式 -TODO - -## MVC -* [《MVC 模式》](http://www.runoob.com/design-pattern/mvc-pattern.html) - * 模型(model)-视图(view)-控制器(controller) - -## IOC -* [《理解 IOC》](https://www.zhihu.com/question/23277575) -* [《IOC 的理解与解释》](https://www.cnblogs.com/NancyStartOnce/p/6813162.html) - * 正向控制:传统通过new的方式。反向控制,通过容器注入对象。 - * 作用:用于模块解耦。 - * DI:Dependency Injection,即依赖注入,只关心资源使用,不关心资源来源。 - -## AOP - -* [《轻松理解AOP(面向切面编程)》](https://blog.csdn.net/yanquan345/article/details/19760027) -* [《Spring AOP详解》](https://www.cnblogs.com/hongwz/p/5764917.html) -* [《Spring AOP的实现原理》](http://www.importnew.com/24305.html) - * Spring AOP使用的动态代理,主要有两种方式:JDK动态代理和CGLIB动态代理。 -* [《Spring AOP 实现原理与 CGLIB 应用》](https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/) - * Spring AOP 框架对 AOP 代理类的处理原则是:如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类 - - -## UML - -* [《UML教程》](https://www.w3cschool.cn/uml_tutorial/) - -## 微服务思想 -* [《微服务架构设计》](https://www.cnblogs.com/wintersun/p/6219259.html) -* [《微服务架构技术栈选型手册》](http://www.infoq.com/cn/articles/micro-service-technology-stack) - -### 康威定律 -* [《微服务架构的理论基础 - 康威定律》](https://yq.aliyun.com/articles/8611) - * 定律一:组织沟通方式会通过系统设计表达出来,就是说架构的布局和组织结构会有相似。 - * 定律二:时间再多一件事情也不可能做的完美,但总有时间做完一件事情。一口气吃不成胖子,先搞定能搞定的。 - * 定律三:线型系统和线型组织架构间有潜在的异质同态特性。种瓜得瓜,做独立自治的子系统减少沟通成本。 - * 定律四:大的系统组织总是比小系统更倾向于分解。合久必分,分而治之。 - -* [《微服务架构核⼼20讲》](https://static.geekbang.org/PDF-%E4%BF%AE%E6%94%B9%E7%89%88-%E6%9E%81%E5%AE%A2%E6%97%B6%E9%97%B4-%E5%9B%BE%E7%89%87-%E6%9D%A8%E6%B3%A2-%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84.pdf) - -# 运维 & 统计 & 技术支持 - -## 常规监控 - -* [《腾讯业务系统监控的修炼之路》](https://blog.csdn.net/enweitech/article/details/77849205) - * 监控的方式:主动、被动、旁路(比如舆情监控) - * 监控类型: 基础监控、服务端监控、客户端监控、 - 监控、用户端监控 - * 监控的目标:全、块、准 - * 核心指标:请求量、成功率、耗时 - -* [《开源还是商用?十大云运维监控工具横评》](https://www.oschina.net/news/67525/monitoring-tools) - * Zabbix、Nagios、Ganglia、Zenoss、Open-falcon、监控宝、 360网站服务监控、阿里云监控、百度云观测、小蜜蜂网站监测等。 - -* [《监控报警系统搭建及二次开发经验》](http://developer.51cto.com/art/201612/525373.htm) - -**命令行监控工具** - -* [《常用命令行监控工具》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/44-an-quan-yu-yun-wei/445-fu-wu-qi-zhuang-tai-jian-ce/4451-ming-ling-xing-gong-ju.html) - * top、sar、tsar、nload - -* [《20个命令行工具监控 Linux 系统性能》](http://blog.jobbole.com/96846/) - -* [《JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解》](https://my.oschina.net/feichexia/blog/196575) - -## APM - -APM — Application Performance Management - -* [《Dapper,大规模分布式系统的跟踪系统》](http://bigbully.github.io/Dapper-translation/) - -* [CNCF OpenTracing](http://opentracing.io),[中文版](https://github.com/opentracing-contrib/opentracing-specification-zh) - -* 主要开源软件,按字母排序 - * [Apache SkyWalking](https://github.com/apache/incubator-skywalking) - * [CAT](https://github.com/dianping/cat) - * [CNCF jaeger](https://github.com/jaegertracing/jaeger) - * [Pinpoint](https://github.com/naver/pinpoint) - * [Zipkin](https://github.com/openzipkin/zipkin) - -* [《开源APM技术选型与实战》](http://www.infoq.com/cn/articles/apm-Pinpoint-practice) - * 主要基于 Google的Dapper(大规模分布式系统的跟踪系统) 思想。 - - - -## 统计分析 - -* [《流量统计的基础:埋点》](https://zhuanlan.zhihu.com/p/25195217) - * 常用指标:访问与访客、停留时长、跳出率、退出率、转化率、参与度 - -* [《APP埋点常用的统计工具、埋点目标和埋点内容》](http://www.25xt.com/company/17066.html) - * 第三方统计:友盟、百度移动、魔方、App Annie、talking data、神策数据等。 - -* [《美团点评前端无痕埋点实践》](https://tech.meituan.com/mt_mobile_analytics_practice.html) - * 所谓无痕、即通过可视化工具配置采集节点,在前端自动解析配置并上报埋点数据,而非硬编码。 - - -## 持续集成(CI/CD) - -* [《持续集成是什么?》](http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html) -* [《8个流行的持续集成工具》](http://www.51testing.com/html/74/n-3723774.html) - -### Jenkins - -* [《使用Jenkins进行持续集成》](https://www.liaoxuefeng.com/article/001463233913442cdb2d1bd1b1b42e3b0b29eb1ba736c5e000) - -### 环境分离 - -开发、测试、生成环境分离。 - -* [《开发环境、生产环境、测试环境的基本理解和区》](https://my.oschina.net/sancuo/blog/214904) - -## 自动化运维 - -### Ansible -* [《Ansible中文权威指南》](http://www.ansible.com.cn/) -* [《Ansible基础配置和企业级项目实用案例》](https://www.cnblogs.com/heiye123/articles/7855890.html) - -### puppet -* [《自动化运维工具——puppet详解》](https://www.cnblogs.com/keerya/p/8040071.html) - -### chef -* [《Chef 的安装与使用》](https://www.ibm.com/developerworks/cn/cloud/library/1407_caomd_chef/) - -## 测试 - -### TDD 理论 - -* [《深度解读 - TDD(测试驱动开发)》](https://www.jianshu.com/p/62f16cd4fef3) - * 基于测试用例编码功能代码,XP(Extreme Programming)的核心实践. - * 好处:一次关注一个点,降低思维负担;迎接需求变化或改善代码的设计;提前澄清需求;快速反馈; - -### 单元测试 - -* [《Java单元测试之JUnit篇》](https://www.cnblogs.com/happyzm/p/6482886.html) -* [《JUnit 4 与 TestNG 对比》](https://blog.csdn.net/hotdust/article/details/53406086) - * TestNG 覆盖 JUnit 功能,适用于更复杂的场景。 -* [《单元测试主要的测试功能点》](https://blog.csdn.net/wqetfg/article/details/50900512) - * 模块接口测试、局部数据结构测试、路径测试 、错误处理测试、边界条件测试 。 - -### 压力测试 - -* [《Apache ab 测试使用指南》](https://blog.csdn.net/blueheart20/article/details/52170790) -* [《大型网站压力测试及优化方案》](https://www.cnblogs.com/binyue/p/6141088.html) -* [《10大主流压力/负载/性能测试工具推荐》](http://news.chinabyte.com/466/14126966.shtml) -* [《真实流量压测工具 tcpcopy应用浅析》](http://quentinxxz.iteye.com/blog/2249799) -* [《nGrinder 简易使用教程》](https://www.cnblogs.com/jwentest/p/7136727.html) - - -### 全链路压测 -* [《京东618:升级全链路压测方案,打造军演机器人ForceBot》](http://www.infoq.com/cn/articles/jd-618-upgrade-full-link-voltage-test-program-forcebot) -* [《饿了么全链路压测的探索与实践》](https://zhuanlan.zhihu.com/p/30306892) -* [《四大语言,八大框架|滴滴全链路压测解决之道》](https://zhuanlan.zhihu.com/p/28355759) -* [《全链路压测经验》](https://www.jianshu.com/p/27060fd61f72) - - -### A/B 、灰度、蓝绿测试 - -* [《技术干货 | AB 测试和灰度发布探索及实践》](https://testerhome.com/topics/11165) -* [《nginx 根据IP 进行灰度发布》](http://blog.51cto.com/purplegrape/1403123) - -* [《蓝绿部署、A/B 测试以及灰度发布》](https://www.v2ex.com/t/344341) - -## 虚拟化 - -* [《VPS的三种虚拟技术OpenVZ、Xen、KVM优缺点比较》](https://blog.csdn.net/enweitech/article/details/52910082) - -### KVM -* [《KVM详解,太详细太深入了,经典》](http://blog.chinaunix.net/uid-20201831-id-5775661.html) -* [《【图文】KVM 虚拟机安装详解》](https://www.coderxing.com/kvm-install.html) - -### Xen -* [《Xen虚拟化基本原理详解》](https://www.cnblogs.com/sddai/p/5931201.html) - -### OpenVZ -* [《开源Linux容器 OpenVZ 快速上手指南》](https://blog.csdn.net/longerzone/article/details/44829255) - -## 容器技术 - -### Docker -* [《几张图帮你理解 docker 基本原理及快速入门》](https://www.cnblogs.com/SzeCheng/p/6822905.html) -* [《Docker 核心技术与实现原理》](https://draveness.me/docker) -* [《Docker 教程》](http://www.runoob.com/docker/docker-tutorial.html) - -## 云技术 - -### OpenStack -* [《OpenStack构架知识梳理》](https://www.cnblogs.com/klb561/p/8660264.html) - -## DevOps -* [《一分钟告诉你究竟DevOps是什么鬼?》](https://www.cnblogs.com/jetzhang/p/6068773.html) -* [《DevOps详解》](http://www.infoq.com/cn/articles/detail-analysis-of-devops) - -## 文档管理 - -* [Confluence-收费文档管理系统](http://www.confluence.cn/) -* GitLab? -* Wiki - -# 中间件 - -## Web Server - -### Nginx -* [《Ngnix的基本学习-多进程和Apache的比较》](https://blog.csdn.net/qq_25797077/article/details/52200722) - * Nginx 通过异步非阻塞的事件处理机制实现高并发。Apache 每个请求独占一个线程,非常消耗系统资源。 - * 事件驱动适合于IO密集型服务(Nginx),多进程或线程适合于CPU密集型服务(Apache),所以Nginx适合做反向代理,而非web服务器使用。 - -* [《nginx与Apache的对比以及优缺点》](https://www.cnblogs.com/cunkouzh/p/5410154.html) - * nginx只适合静态和反向代理,不适合处理动态请求。 - -### OpenResty -* [官方网站](http://openresty.org/cn/) -* [《浅谈 OpenResty》](http://www.linkedkeeper.com/detail/blog.action?bid=1034) - * 通过 Lua 模块可以在Nginx上进行开发。 -* [agentzh 的 Nginx 教程](https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html) - -### Tengine -* [官方网站](http://tengine.taobao.org/) - -### Apache Httpd -* [官方网站](http://httpd.apache.org/) - -### Tomcat - -#### 架构原理 -* [《TOMCAT原理详解及请求过程》](https://www.cnblogs.com/hggen/p/6264475.html) -* [《Tomcat服务器原理详解》](https://www.cnblogs.com/crazylqy/p/4706223.html) -* [《Tomcat 系统架构与设计模式,第 1 部分: 工作原理》](https://www.ibm.com/developerworks/cn/java/j-lo-tomcat1/) - -* [《四张图带你了解Tomcat系统架构》](https://blog.csdn.net/xlgen157387/article/details/79006434) - -* [《JBoss vs. Tomcat: Choosing A Java Application Server》](https://www.futurehosting.com/blog/jboss-vs-tomcat-choosing-a-java-application-server/) - * Tomcat 是轻量级的 Serverlet 容器,没有实现全部 JEE 特性(比如持久化和事务处理),但可以通过其他组件代替,比如Spring。 - * Jboss 实现全部了JEE特性,软件开源免费、文档收费。 - -#### 调优方案 - -* [《Tomcat 调优方案》](https://www.cnblogs.com/sunfenqing/p/7339058.html) - * 启动NIO模式(或者APR);调整线程池;禁用AJP连接器(Nginx+tomcat的架构,不需要AJP); - -* [《tomcat http协议与ajp协议》](http://blog.chinaunix.net/uid-20662363-id-3012760.html) -* [《AJP与HTTP比较和分析》](http://dmouse.iteye.com/blog/1354527) - * AJP 协议(8009端口)用于降低和前端Server(如Apache,而且需要支持AJP协议)的连接数(前端),通过长连接提高性能。 - * 并发高时,AJP协议优于HTTP协议。 - -### Jetty -* [《Jetty 的工作原理以及与 Tomcat 的比较》](https://www.ibm.com/developerworks/cn/java/j-lo-jetty/) -* [《jetty和tomcat优势比较》](https://blog.csdn.net/doutao6677/article/details/51957288) - * 架构比较:Jetty的架构比Tomcat的更为简单。 - * 性能比较:Jetty和Tomcat性能方面差异不大,Jetty默认采用NIO结束在处理I/O请求上更占优势,Tomcat默认采用BIO处理I/O请求,Tomcat适合处理少数非常繁忙的链接,处理静态资源时性能较差。 - * 其他方面:Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好;Tomcat 对JEE和Servlet 支持更加全面。 - - - -## 缓存 - -* [《缓存失效策略(FIFO 、LRU、LFU三种算法的区别)》](https://blog.csdn.net/clementad/article/details/48229243) - -### 本地缓存 - -* [《HashMap本地缓存》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/42-xing-neng-zhi-ben-di-huan-cun/421-ying-yong-ceng-ben-di-huan-cun/4211.html) - -* [《EhCache本地缓存》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/42-xing-neng-zhi-ben-di-huan-cun/421-ying-yong-ceng-ben-di-huan-cun/4212-ehcache.html) - * 堆内、堆外、磁盘三级缓存。 - * 可按照缓存空间容量进行设置。 - * 按照时间、次数等过期策略。 - -* [《Guava Cache》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/42-xing-neng-zhi-ben-di-huan-cun/421-ying-yong-ceng-ben-di-huan-cun/4213-guava-cache.html) - * 简单轻量、无堆外、磁盘缓存。 - - -* [《Nginx本地缓存》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/42-xing-neng-zhi-ben-di-huan-cun/422-fu-wu-duan-ben-di-huan-cun/nginx-ben-di-huan-cun.html) - -* [《Pagespeed—懒人工具,服务器端加速》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/42-xing-neng-zhi-ben-di-huan-cun/422-fu-wu-duan-ben-di-huan-cun/4222-pagespeed.html) - -## 客户端缓存 - -* [《浏览器端缓存》](https://coderxing.gitbooks.io/architecture-evolution/di-er-pian-ff1a-feng-kuang-yuan-shi-ren/42-xing-neng-zhi-ben-di-huan-cun/423-ke-hu-duan-huan-cun.html) - * 主要是利用 Cache-Control 参数。 - -* [《H5 和移动端 WebView 缓存机制解析与实战》](https://mp.weixin.qq.com/s/qHm_dJBhVbv0pJs8Crp77w) - -## 服务端缓存 - -### Web缓存 - -* [nuster](https://github.com/jiangwenyuan/nuster) - nuster cache -* [varnish](https://github.com/varnishcache/varnish-cache) - varnish cache -* [squid](https://github.com/squid-cache/squid) - squid cache - -### Memcached -* [《Memcached 教程》](http://www.runoob.com/Memcached/Memcached-tutorial.html) -* [《深入理解Memcached原理》](https://blog.csdn.net/chenleixing/article/details/47035453) - * 采用多路复用技术提高并发性。 - * slab分配算法: memcached给Slab分配内存空间,默认是1MB。分配给Slab之后 把slab的切分成大小相同的chunk,Chunk是用于缓存记录的内存空间,Chunk 的大小默认按照1.25倍的速度递增。好处是不会频繁申请内存,提高IO效率,坏处是会有一定的内存浪费。 -* [《Memcached软件工作原理》](https://www.jianshu.com/p/36e5cd400580) -* [《Memcache技术分享:介绍、使用、存储、算法、优化、命中率》](http://zhihuzeye.com/archives/2361) - -* [《memcache 中 add 、 set 、replace 的区别》](https://blog.csdn.net/liu251890347/article/details/37690045) - * 区别在于当key存在还是不存在时,返回值是true和false的。 - -* [**《memcached全面剖析》**](https://pan.baidu.com/s/1qX00Lti?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=) - -### Redis - -* [《Redis 教程》](http://www.runoob.com/redis/redis-tutorial.html) -* [《redis底层原理》](https://blog.csdn.net/wcf373722432/article/details/78678504) - * 使用 ziplist 存储链表,ziplist是一种压缩链表,它的好处是更能节省内存空间,因为它所存储的内容都是在连续的内存区域当中的。 - * 使用 skiplist(跳跃表)来存储有序集合对象、查找上先从高Level查起、时间复杂度和红黑树相当,实现容易,无锁、并发性好。 -* [《Redis持久化方式》](http://doc.redisfans.com/topic/persistence.html) - * RDB方式:定期备份快照,常用于灾难恢复。优点:通过fork出的进程进行备份,不影响主进程、RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。缺点:会丢数据。 - * AOF方式:保存操作日志方式。优点:恢复时数据丢失少,缺点:文件大,回复慢。 - * 也可以两者结合使用。 - -* [《分布式缓存--序列3--原子操作与CAS乐观锁》](https://blog.csdn.net/chunlongyu/article/details/53346436) - -#### 架构 -* [《Redis单线程架构》](https://blog.csdn.net/sunhuiliang85/article/details/73656830) - -#### 回收策略 -* [《redis的回收策略》](https://blog.csdn.net/qq_29108585/article/details/63251491) - -### Tair - -* [官方网站](https://github.com/alibaba/tair) -* [《Tair和Redis的对比》](http://blog.csdn.net/farphone/article/details/53522383) -* 特点:可以配置备份节点数目,通过异步同步到备份节点 -* 一致性Hash算法。 -* 架构:和Hadoop 的设计思想类似,有Configserver,DataServer,Configserver 通过心跳来检测,Configserver也有主备关系。 - - -几种存储引擎: -* MDB,完全内存性,可以用来存储Session等数据。 -* Rdb(类似于Redis),轻量化,去除了aof之类的操作,支持Restfull操作 -* LDB(LevelDB存储引擎),持久化存储,LDB 作为rdb的持久化,google实现,比较高效,理论基础是LSM(Log-Structured-Merge Tree)算法,现在内存中修改数据,达到一定量时(和内存汇总的旧数据一同写入磁盘)再写入磁盘,存储更加高效,县比喻Hash算法。 -* Tair采用共享内存来存储数据,如果服务挂掉(非服务器),重启服务之后,数据亦然还在。 - -## 消息队列 - -* [《消息队列-推/拉模式学习 & ActiveMQ及JMS学习》](https://www.cnblogs.com/charlesblc/p/6045238.html) - * RabbitMQ 消费者默认是推模式(也支持拉模式)。 - * Kafka 默认是拉模式。 - * Push方式:优点是可以尽可能快地将消息发送给消费者,缺点是如果消费者处理能力跟不上,消费者的缓冲区可能会溢出。 - * Pull方式:优点是消费端可以按处理能力进行拉去,缺点是会增加消息延迟。 - -* [《Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别》](https://blog.csdn.net/yunfeng482/article/details/72856762) - -### 消息总线 - -消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。 - -* [《消息总线VS消息队列》](https://blog.csdn.net/yanghua_kobe/article/details/43877281) - -### 消息的顺序 -* [《如何保证消费者接收消息的顺序》](https://www.cnblogs.com/cjsblog/p/8267892.html) - -### RabbitMQ - -支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。 - -* [《RabbitMQ的应用场景以及基本原理介绍》](https://blog.csdn.net/whoamiyang/article/details/54954780) -* [《消息队列之 RabbitMQ》](https://www.jianshu.com/p/79ca08116d57) -* [《RabbitMQ之消息确认机制(事务+Confirm)》](https://blog.csdn.net/u013256816/article/details/55515234) - -### RocketMQ -Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。 -* [《RocketMQ 实战之快速入门》](https://www.jianshu.com/p/824066d70da8) -* [《RocketMQ 源码解析》](http://www.iocoder.cn/categories/RocketMQ/?vip&architect-awesome) - -### ActiveMQ -纯Java实现,兼容JMS,可以内嵌于Java应用中。 -* [《ActiveMQ消息队列介绍》](https://www.cnblogs.com/wintersun/p/3962302.html) - -### Kafka -高吞吐量、采用拉模式。适合高IO场景,比如日志同步。 - -* [官方网站](http://kafka.apache.org/) -* [《各消息队列对比,Kafka深度解析,众人推荐,精彩好文!》](https://blog.csdn.net/allthesametome/article/details/47362451) -* [《Kafka分区机制介绍与示例》](http://lxw1234.com/archives/2015/10/538.htm) - -### Redis 消息推送 - -生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。 - -* [《Redis学习笔记之十:Redis用作消息队列》](https://blog.csdn.net/qq_34212276/article/details/78455004) - -### ZeroMQ - TODO - - -## 定时调度 - -### 单机定时调度 - -* [《linux定时任务cron配置》](https://www.cnblogs.com/shuaiqing/p/7742382.html) - -* [《Linux cron运行原理》](https://my.oschina.net/daquan/blog/483305) - * fork 进程 + sleep 轮询 - -* [《Quartz使用总结》](https://www.cnblogs.com/drift-ice/p/3817269.html) -* [《Quartz源码解析 ---- 触发器按时启动原理》](https://blog.csdn.net/wenniuwuren/article/details/42082981/) -* [《quartz原理揭秘和源码解读》](https://www.jianshu.com/p/bab8e4e32952) - * 定时调度在 QuartzSchedulerThread 代码中,while()无限循环,每次循环取出时间将到的trigger,触发对应的job,直到调度器线程被关闭。 - - -### 分布式定时调度 - -* [《这些优秀的国产分布式任务调度系统,你用过几个?》](https://blog.csdn.net/qq_16216221/article/details/70314337) - * opencron、LTS、XXL-JOB、Elastic-Job、Uncode-Schedule、Antares - -* [《Quartz任务调度的基本实现原理》](https://www.cnblogs.com/zhenyuyaodidiao/p/4755649.html) - * Quartz集群中,独立的Quartz节点并不与另一其的节点或是管理节点通信,而是通过相同的数据库表来感知到另一Quartz应用的 -* [《Elastic-Job-Lite 源码解析》](http://www.iocoder.cn/categories/Elastic-Job-Lite/?vip&architect-awesome) -* [《Elastic-Job-Cloud 源码解析》](http://www.iocoder.cn/categories/Elastic-Job-Cloud/?vip&architect-awesome) - - -## RPC - -* [《从零开始实现RPC框架 - RPC原理及实现》](https://blog.csdn.net/top_code/article/details/54615853) - * 核心角色:Server: 暴露服务的服务提供方、Client: 调用远程服务的服务消费方、Registry: 服务注册与发现的注册中心。 - -* [《分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较》](https://blog.csdn.net/testcs_dn/article/details/78050590) - -### Dubbo -* [官方网站](http://dubbo.apache.org/) -* [dubbo实现原理简单介绍](https://www.cnblogs.com/steven520213/p/7606598.html) - -** SPI ** -TODO - -### Thrift -* [官方网站](http://thrift.apache.org/) -* [《Thrift RPC详解》](https://blog.csdn.net/kesonyk/article/details/50924489) - * 支持多语言,通过中间语言定义接口。 - -### gRPC - -服务端可以认证加密,在外网环境下,可以保证数据安全。 - -* [官方网站](https://grpc.io/) -* [《你应该知道的RPC原理》](https://www.cnblogs.com/LBSer/p/4853234.html) - - -## 数据库中间件 - -### Sharding Jdbc - -* [官网](http://shardingjdbc.io/) -* [源码解析](http://www.iocoder.cn/categories/Sharding-JDBC/?vip&architect-awesome) - -## 日志系统 - -### 日志搜集 - -* [《从零开始搭建一个ELKB日志收集系统》](http://cjting.me/misc/build-log-system-with-elkb/) -* [《用ELK搭建简单的日志收集分析系统》](https://blog.csdn.net/lzw_2006/article/details/51280058) -* [《日志收集系统-探究》](https://www.cnblogs.com/beginmind/p/6058194.html) - -## 配置中心 - -* [Apollo - 携程开源的配置中心应用](https://github.com/ctripcorp/apollo) - * Spring Boot 和 Spring Cloud - * 支持推、拉模式更新配置 - * 支持多种语言 - -* [《基于zookeeper实现统一配置管理》](https://blog.csdn.net/u011320740/article/details/78742625) - -* [《 Spring Cloud Config 分布式配置中心使用教程》](https://www.cnblogs.com/shamo89/p/8016908.html) - -servlet 3.0 异步特性可用于配置中心的客户端 -* [《servlet3.0 新特性——异步处理》](https://www.cnblogs.com/dogdogwang/p/7151866.html) - -## API 网关 - -主要职责:请求转发、安全认证、协议转换、容灾。 - -* [《API网关那些儿》](http://yunlzheng.github.io/2017/03/14/the-things-about-api-gateway/) -* [《谈API网关的背景、架构以及落地方案》](http://www.infoq.com/cn/news/2016/07/API-background-architecture-floo) - -* [《使用Zuul构建API Gateway》](https://blog.csdn.net/zhanglh046/article/details/78651993) -* [《Spring Cloud Gateway 源码解析》](http://www.iocoder.cn/categories/Spring-Cloud-Gateway/?vip&architect-awesome) -* [《HTTP API网关选择之一Kong介绍》](https://mp.weixin.qq.com/s/LIq2CiXJQmmjBC0yvYLY5A) - -# 网络 - - -## 协议 - -### OSI 七层协议 - -* [《OSI七层协议模型、TCP/IP四层模型学习笔记》](https://www.cnblogs.com/Robin-YB/p/6668762.html) - -### TCP/IP -* [《深入浅出 TCP/IP 协议》](https://www.cnblogs.com/onepixel/p/7092302.html) -* [《TCP协议中的三次握手和四次挥手》](https://blog.csdn.net/whuslei/article/details/6667471/) - -### HTTP -* [《http协议详解(超详细)》](https://www.cnblogs.com/wangning528/p/6388464.html) - -### HTTP2.0 -* [《HTTP 2.0 原理详细分析》](https://blog.csdn.net/zhuyiquan/article/details/69257126) -* [《HTTP2.0的基本单位为二进制帧》](https://blog.csdn.net/u012657197/article/details/77877840) - * 利用二进制帧负责传输。 - * 多路复用。 - -### HTTPS -* [《https原理通俗了解》](https://www.cnblogs.com/zhangshitong/p/6478721.html) - * 使用非对称加密协商加密算法 - * 使用对称加密方式传输数据 - * 使用第三方机构签发的证书,来加密公钥,用于公钥的安全传输、防止被中间人串改。 - -* [《八大免费SSL证书-给你的网站免费添加Https安全加密》](https://blog.csdn.net/enweitech/article/details/53213862) - -## 网络模型 - -* [《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》](http://blog.51cto.com/litaotao/1289790) - * 五种I/O模型:阻塞I/O,非阻塞I/O,I/O复用、事件(信号)驱动I/O、异步I/O,前四种I/O属于同步操作,I/O的第一阶段不同、第二阶段相同,最后的一种则属于异步操作。 - * 三种 Web Server 工作方式:Prefork(多进程)、Worker方式(线程方式)、Event方式。 - -* [《select、poll、epoll之间的区别总结》](http://www.cnblogs.com/Anker/p/3265058.html) - * select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。 - * select 有打开文件描述符数量限制,默认1024(2048 for x64),100万并发,就要用1000个进程、切换开销大;poll采用链表结构,没有数量限制。 - * select,poll “醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,通过回调机制节省大量CPU时间;select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll只要一次拷贝。 - * poll会随着并发增加,性能逐渐下降,epoll采用红黑树结构,性能稳定,不会随着连接数增加而降低。 - -* [《select,poll,epoll比较 》](http://xingyunbaijunwei.blog.163.com/blog/static/76538067201241685556302/) - * 在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。 - -* [《深入理解Java NIO》](https://www.cnblogs.com/geason/p/5774096.html) - * NIO 是一种同步非阻塞的 IO 模型。同步是指线程不断轮询 IO 事件是否就绪,非阻塞是指线程在等待 IO 的时候,可以同时做其他任务 - -* [《BIO与NIO、AIO的区别》](https://blog.csdn.net/skiof007/article/details/52873421) - -* [《两种高效的服务器设计模型:Reactor和Proactor模型》](https://blog.csdn.net/u013074465/article/details/46276967) - -### Epoll - -* [《epoll使用详解(精髓)》](https://www.cnblogs.com/fnlingnzb-learner/p/5835573.html) - -### Java NIO -* [《深入理解Java NIO》](https://www.cnblogs.com/geason/p/5774096.html) -* [《Java NIO编写Socket服务器的一个例子》](https://blog.csdn.net/xidianliuy/article/details/51612676) - -### kqueue -* [《kqueue用法简介》](http://www.cnblogs.com/luminocean/p/5631336.html) - -## 连接和短连接 - -* [《TCP/IP系列——长连接与短连接的区别》](https://www.cnblogs.com/pangguoping/p/5571422.html) - -## 框架 - -* [《Netty原理剖析》](https://blog.csdn.net/excellentyuxiao/article/details/53390408) - * Reactor 模式介绍。 - * Netty 是 Reactor 模式的一种实现。 - -## 零拷贝(Zero-copy) -* [《对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解》](https://www.cnblogs.com/xys1228/p/6088805.html) - * 多个物理分离的buffer,通过逻辑上合并成为一个,从而避免了数据在内存之间的拷贝。 - -## 序列化(二进制协议) - -### Hessian -* [《Hessian原理分析》](https://www.cnblogs.com/happyday56/p/4268249.html) -Binary-RPC;不仅仅是序列化 - -### Protobuf -* [《Protobuf协议的Java应用例子》](https://blog.csdn.net/antgan/article/details/52103966) -Goolge出品、占用空间和效率完胜其他序列化类库,如Hessian;需要编写 .proto 文件。 -* [《Protocol Buffers序列化协议及应用》](https://worktile.com/tech/share/prototol-buffers) - * 关于协议的解释;缺点:可读性差; - -* [《简单的使用 protobuf 和 protostuff》](https://blog.csdn.net/eric520zenobia/article/details/53766571) - * protostuff 的好处是不用写 .proto 文件,Java 对象直接就可以序列化。 - -# 数据库 -## 基础理论 -### 关系数据库设计的三大范式 -* [《数据库的三大范式以及五大约束》](https://www.cnblogs.com/waj6511988/p/7027127.html) - * 第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性; - * 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情; - * 第三范式:必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键); - -## MySQL - -### 原理 -* [《MySQL的InnoDB索引原理详解》](https://blog.csdn.net/voidccc/article/details/40077329) - -* [《MySQL存储引擎--MyISAM与InnoDB区别》](https://blog.csdn.net/xifeijian/article/details/20316775) - * 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁 - -* [《myisam和innodb索引实现的不同》](https://www.2cto.com/database/201211/172380.html) - -### InnoDB - -* [《一篇文章带你读懂Mysql和InnoDB》](https://my.oschina.net/kailuncen/blog/1504217) - -### 优化 - -* [《MySQL36条军规》](http://vdisk.weibo.com/s/muWOT) - -* [《MYSQL性能优化的最佳20+条经验》](https://www.cnblogs.com/zhouyusheng/p/8038224.html) -* [《SQL优化之道》](https://blog.csdn.net/when_less_is_more/article/details/70187459) -* [《mysql数据库死锁的产生原因及解决办法》](https://www.cnblogs.com/sivkun/p/7518540.html) -* [《导致索引失效的可能情况》](https://blog.csdn.net/monkey_d_feilong/article/details/52291556) -* [《 MYSQL分页limit速度太慢优化方法》](https://www.jianshu.com/p/0a7e3055a01f) - * 原则上就是缩小扫描范围。 - - -### 索引 - -#### 聚集索引, 非聚集索引 - -* [《MySQL 聚集索引/非聚集索引简述》](https://blog.csdn.net/no_endless/article/details/77073549) -* [《MyISAM和InnoDB的索引实现》](https://www.cnblogs.com/zlcxbb/p/5757245.html) - -MyISAM 是非聚集,InnoDB 是聚集 - -#### 复合索引 - -* [《复合索引的优点和注意事项》](https://www.cnblogs.com/summer0space/p/7247778.html) - * 文中有一处错误: - > 对于复合索引,在查询使用时,最好将条件顺序按找索引的顺序,这样效率最高; select * from table1 where col1=A AND col2=B AND col3=D 如果使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引 - * 原文中提到索引是按照“col1,col2,col3”的顺序创建的,而mysql在按照最左前缀的索引匹配原则,且会自动优化 where 条件的顺序,当条件中只有 col2=B AND col1=A 时,会自动转化为 col1=A AND col2=B,所以依然会使用索引。 - -* [《MySQL查询where条件的顺序对查询效率的影响》](https://www.cnblogs.com/acode/p/7489258.html) - -#### 自适应哈希索引(AHI) - -* [《InnoDB存储引擎——自适应哈希索引》](https://blog.csdn.net/Linux_ever/article/details/62043708) - - -### explain -* [《MySQL 性能优化神器 Explain 使用分析》](https://segmentfault.com/a/1190000008131735) - -## NoSQL - -### MongoDB - -* [MongoDB 教程](http://www.runoob.com/mongodb/mongodb-tutorial.html) -* [《Mongodb相对于关系型数据库的优缺点》](http://mxdxm.iteye.com/blog/2093603) - * 优点:弱一致性(最终一致),更能保证用户的访问速度;内置GridFS,支持大容量的存储;Schema-less 数据库,不用预先定义结构;内置Sharding;相比于其他NoSQL,第三方支持丰富;性能优越; - * 缺点:mongodb不支持事务操作;mongodb占用空间过大;MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方; - -### Hbase - -* [《简明 HBase 入门教程(开篇)》](http://www.thebigdata.cn/HBase/35831.html) -* [《深入学习HBase架构原理》](https://www.cnblogs.com/qiaoyihang/p/6246424.html) -* [《传统的行存储和(HBase)列存储的区别》](https://blog.csdn.net/youzhouliu/article/details/67632882) - - -* [《Hbase与传统数据库的区别》](https://blog.csdn.net/lifuxiangcaohui/article/details/39891099) - * 空数据不存储,节省空间,且适用于并发。 - -* [《HBase Rowkey设计》](https://blog.csdn.net/u014091123/article/details/73163088) - * rowkey 按照字典顺序排列,便于批量扫描。 - * 通过散列可以避免热点。 - -# 搜索引擎 - -## 搜索引擎原理 - -* [《倒排索引--搜索引擎入门》](https://www.jianshu.com/p/0193dc44135b) - -## Lucene -* [《Lucene入门简介》](https://www.cnblogs.com/rodge-run/p/6551152.html) - -## Elasticsearch - -* [《Elasticsearch学习,请先看这一篇!》](https://blog.csdn.net/laoyang360/article/details/52244917) -* [《Elasticsearch索引原理》](https://blog.csdn.net/cyony/article/details/65437708) - -## Solr -* [《 Apache Solr入门教程》](https://blog.csdn.net/u011936655/article/details/51960005) -* [《elasticsearch与solr比较》](https://blog.csdn.net/convict_eva/article/details/53537837) - -## sphinx -* [《Sphinx 的介绍和原理探索》](http://blog.jobbole.com/101672/) - -# 性能 - -## 性能优化方法论 - -* [《15天的性能优化工作,5方面的调优经验》](https://blog.csdn.net/huangwenyi1010/article/details/72673447?ref=myread) - * 代码层面、业务层面、数据库层面、服务器层面、前端优化。 - -* [《系统性能优化的几个方面》](https://blog.csdn.net/tenglizhe/article/details/44563135) - -## 容量评估 -* [《联网性能与容量评估的方法论和典型案例》](https://blog.csdn.net/u012528360/article/details/70054156) -* [《互联网架构,如何进行容量设计?》](https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959542&idx=1&sn=2494bbea9a855e0e1c3ccd6d2562a600&scene=21#wechat_redirect) - * 评估总访问量、评估平均访问量QPS、评估高峰QPS、评估系统、单机极限QPS - -## CDN 网络 - -* [《CDN加速原理》](https://www.cnblogs.com/wxiaona/p/5867685.html) -* [《国内有哪些比较好的 CDN?》](https://www.zhihu.com/question/20536932) - -## 连接池 - -* [《主流Java数据库连接池比较与开发配置实战》](https://blog.csdn.net/fysuccess/article/details/66972554) - -## 性能调优 - -* [《九大Java性能调试工具,必备至少一款》](https://blog.csdn.net/yethyeth/article/details/73266455) - - -# 大数据 - -## 流式计算 - -### Storm -* [官方网站](http://storm.apache.org/) -* [《最详细的Storm入门教程》](https://blog.csdn.net/uisoul/article/details/77989927) - -### Flink -* [《Flink之一 Flink基本原理介绍》](https://blog.csdn.net/lisi1129/article/details/54844919) - -### Kafka Stream -* [《Kafka Stream调研:一种轻量级流计算模式》](https://yq.aliyun.com/articles/58382) - -### 应用场景 - -例如: - -* 广告相关实时统计; -* 推荐系统用户画像标签实时更新; -* 线上服务健康状况实时监测; -* 实时榜单; -* 实时数据统计。 - -## Hadoop - -* [《用通俗易懂的话说下hadoop是什么,能做什么》](https://blog.csdn.net/houbin0912/article/details/72967178) -* [《史上最详细的Hadoop环境搭建》](http://gitbook.cn/books/5954c9600326c7705af8a92a/index.html) - -### HDFS -* [《【Hadoop学习】HDFS基本原理》](https://segmentfault.com/a/1190000011575458) - -### MapReduce -* [《用通俗易懂的大白话讲解Map/Reduce原理》](https://blog.csdn.net/oppo62258801/article/details/72884633) -* [《 简单的map-reduce的java例子》](https://blog.csdn.net/foye12/article/details/78358292) - -### Yarn -* [《初步掌握Yarn的架构及原理》](http://www.cnblogs.com/codeOfLife/p/5492740.html) - -## Spark -* [《Spark(一): 基本架构及原理》](http://www.cnblogs.com/tgzhu/p/5818374.html) -* [《子雨大数据之Spark入门教程(Python版)》](http://dblab.xmu.edu.cn/blog/1709-2/) - - -# 安全 - -## web 安全 - -### XSS -* [《xss攻击原理与解决方法》](https://blog.csdn.net/qq_21956483/article/details/54377947) -### CSRF -* [《CSRF原理及防范》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/641-web-an-quan-fang-fan/6412-csrf.html) - -### SQL 注入 - -* [《SQL注入》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/641-web-an-quan-fang-fan/6413-sql-zhu-ru.html) - -### Hash Dos - - -* [《邪恶的JAVA HASH DOS攻击》](http://www.freebuf.com/articles/web/14199.html) - * 利用JsonObject 上传大Json,JsonObject 底层使用HashMap;不同的数据产生相同的hash值,使得构建Hash速度变慢,耗尽CPU。 -* [《一种高级的DoS攻击-Hash碰撞攻击》](http://blog.it2048.cn/article_hash-collision.html ) -* [《关于Hash Collision DoS漏洞:解析与解决方案》](http://www.iteye.com/news/23939/) - -### 脚本注入 - -* [《上传文件漏洞原理及防范》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/641-web-an-quan-fang-fan/6414-shang-chuan-wen-jian-guo-lv.html) - -### 漏洞扫描工具 -* [《DVWA》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/6421-dvwa.html) -* [W3af](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/w3af.html) -* [OpenVAS详解](https://blog.csdn.net/xygg0801/article/details/53610640) - -### 验证码 - -* [《验证码原理分析及实现》](https://blog.csdn.net/niaonao/article/details/51112686) - -* [《详解滑动验证码的实现原理》](https://my.oschina.net/jiangbianwanghai/blog/1031031) - * 滑动验证码是根据人在滑动滑块的响应时间,拖拽速度,时间,位置,轨迹,重试次数等来评估风险。 - -* [《淘宝滑动验证码研究》](https://www.cnblogs.com/xcj26/p/5242758.html) - -## DDoS 防范 -* [《学习手册:DDoS的攻击方式及防御手段》](http://netsecurity.51cto.com/art/201601/503799.htm) -* [《免费DDoS攻击测试工具大合集》](http://netsecurity.51cto.com/art/201406/442756.htm) - -## 用户隐私信息保护 - -1. 用户密码非明文保存,加动态salt。 -2. 身份证号,手机号如果要显示,用 “\*” 替代部分字符。 -3. 联系方式在的显示与否由用户自己控制。 -4. TODO - -* [《个人隐私包括哪些》](https://zhidao.baidu.com/question/1988017976673661587.html) -* [《在互联网上,隐私的范围包括哪些?》](https://www.zhihu.com/question/20137108) - -* [《用户密码保存》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/642-shu-ju-jia-mi/6425-jia-mi-chang-jing-ff1a-yong-hu-mi-ma-bao-cun.html) - -## 序列化漏洞 -* [《Lib之过?Java反序列化漏洞通用利用分析》](https://blog.chaitin.cn/2015-11-11_java_unserialize_rce/) - -## 加密解密 - -### 对称加密 - -* [《常见对称加密算法》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/642-shu-ju-jia-mi/6421-chang-jian-dui-cheng-jia-mi-suan-fa.html) - * DES、3DES、Blowfish、AES - * DES 采用 56位秘钥,Blowfish 采用1到448位变长秘钥,AES 128,192和256位长度的秘钥。 - * DES 秘钥太短(只有56位)算法目前已经被 AES 取代,并且 AES 有硬件加速,性能很好。 - -### 哈希算法 -* [《常用的哈希算法》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/642-shu-ju-jia-mi/6422-chang-jian-ha-xi-suan-fa-and-hmac.html) - * MD5 和 SHA-1 已经不再安全,已被弃用。 - * 目前 SHA-256 是比较安全的。 - -* [《基于Hash摘要签名的公网URL签名验证设计方案》](https://blog.csdn.net/zhangruhong168/article/details/78033202) - -### 非对称加密 -* [《常见非对称加密算法》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/642-shu-ju-jia-mi/6424-chang-yong-fei-dui-cheng-jia-mi-suan-fa.html) - * RSA、DSA、ECDSA(螺旋曲线加密算法) - * 和 RSA 不同的是 DSA 仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。 - * 256位的ECC秘钥的安全性等同于3072位的RSA秘钥。 - - [《区块链的加密技术》](http://baijiahao.baidu.com/s?id=1578348858092033763&wfr=spider&for=pc) - - -## 服务器安全 -* [《Linux强化论:15步打造一个安全的Linux服务器》](http://www.freebuf.com/articles/system/121540.html) - -## 数据安全 - -### 数据备份 - -TODO - -## 网络隔离 - -### 内外网分离 - -TODO - -### 登录跳板机 -在内外环境中通过跳板机登录到线上主机。 -* [《搭建简易堡垒机》](http://blog.51cto.com/zero01/2062618) - -## 授权、认证 - -* [授权认证知识库](https://docs.authing.cn/authing/) - -### RBAC -* [《基于组织角色的权限设计》](https://www.cnblogs.com/zq8024/p/5003050.html) -* [《权限系统与RBAC模型概述》](https://www.cnblogs.com/shijiaqi1066/p/3793894.html) -* [《Spring整合Shiro做权限控制模块详细案例分析》](https://blog.csdn.net/he90227/article/details/38663553) - -### OAuth2.0 -* [《理解OAuth 2.0》](http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html) -* [《一张图搞定OAuth2.0》](https://www.cnblogs.com/flashsun/p/7424071.html) - -### OIDC -* [理解 OIDC](https://docs.authing.cn/authing/advanced/oidc/li-jie-oidc-liu-cheng) - -### SAML -* [理解 SAML](https://docs.authing.cn/authing/advanced/use-saml/li-jie-saml-liu-cheng) - -### 双因素认证(2FA) - -2FA - Two-factor authentication,用于加强登录验证 - -常用做法是 登录密码 + 手机验证码(或者令牌Key,类似于与网银的 USB key) - -* 【《双因素认证(2FA)教程》】(http://www.ruanyifeng.com/blog/2017/11/2fa-tutorial.html) - -### 单点登录(SSO) - -* [《单点登录原理与简单实现》](https://www.cnblogs.com/ywlaker/p/6113927.html) -* [CAS单点登录框架](https://github.com/apereo/cas) -* [使用 Authing 实现单点登录](https://docs.authing.cn/authing/quickstart/implement-sso-with-authing) - -# 常用开源框架 - -## 开源协议 - -* [《开源协议的选择》](https://coderxing.gitbooks.io/architecture-evolution/chapter1/di-yi-zhang-ff1a-zhun-bei-qi-cheng/12-guan-yu-kai-yuan/123-kai-yuan-xie-yi-de-xuan-ze.html) - -* [如何选择一个开源软件协议](http://choosealicense.online/) - -## 日志框架 - -### Log4j、Log4j2 -* [《log4j 详细讲解》](https://blog.csdn.net/u012422446/article/details/51199724) -* [《log4j2 实际使用详解》](https://blog.csdn.net/vbirdbest/article/details/71751835) -* [《Log4j1,Logback以及Log4j2性能测试对比》](https://my.oschina.net/OutOfMemory/blog/789267) - * Log4J 异步日志性能优异。 - -### Logback -* [《最全LogBack 详解、含java案例和配置说明》](https://blog.csdn.net/rulon147/article/details/52620541) - -## ORM - -* [《ORM框架使用优缺点》](https://blog.csdn.net/sinat_34093604/article/details/53082000) - * 主要目的是为了提高开发效率。 - -**MyBatis:** - -* [《mybatis缓存机制详解》](https://www.cnblogs.com/winclpt/articles/7511672.html) - * 一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效 - * 二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的;使用 LRU 机制清理缓存,通过 cacheEnabled 参数开启。 - -* [《MyBatis学习之代码生成器Generator》](https://blog.csdn.net/baidu_32877851/article/details/53959268) - -## 网络框架 - -TODO - -## Web 框架 - -### Spring 家族 -**Spring** -* [Spring 简明教程](https://www.w3cschool.cn/wkspring/) - -**Spring Boot** -* [官方网站](http://projects.spring.io/spring-boot/) -* [《Spring Boot基础教程》](http://blog.didispace.com/Spring-Boot%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/) - -**Spring Cloud** - -* [Spring Boot 中文索引站](http://springboot.fun/) -* [Spring Cloud 中文文档](https://springcloud.cc/) -* [《Spring Cloud基础教程》](http://blog.didispace.com/Spring-Cloud%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/) - -## 工具框架 - -* [《Apache Commons 工具类介绍及简单使用》](https://www.cnblogs.com/crazylqy/p/4872236.html) -* [《Google guava 中文教程》](http://ifeve.com/google-guava/) - - -# 分布式设计 - -## 扩展性设计 - -* [《架构师不可不知的十大可扩展架构》](https://blog.csdn.net/hemin1003/article/details/53633926) - * 总结下来,通用的套路就是分布、缓存及异步处理。 - -* [《可扩展性设计之数据切分》](https://yq.aliyun.com/articles/38119) - * 水平切分+垂直切分 - * 利用中间件进行分片如,MySQL Proxy。 - * 利用分片策略进行切分,如按照ID取模。 -* [《说说如何实现可扩展性的大型网站架构》](https://blog.csdn.net/deniro_li/article/details/78458306) - * 分布式服务+消息队列。 - -* [《大型网站技术架构(七)--网站的可扩展性架构》](https://blog.csdn.net/chaofanwei/article/details/29191073) - -## 稳定性 & 高可用 - -* [《系统设计:关于高可用系统的一些技术方案》](https://blog.csdn.net/hustspy1990/article/details/78008324) - * 可扩展:水平扩展、垂直扩展。 通过冗余部署,避免单点故障。 - * 隔离:避免单一业务占用全部资源。避免业务之间的相互影响 2. 机房隔离避免单点故障。 - * 解耦:降低维护成本,降低耦合风险。减少依赖,减少相互间的影响。 - * 限流:滑动窗口计数法、漏桶算法、令牌桶算法等算法。遇到突发流量时,保证系统稳定。 - * 降级:紧急情况下释放非核心功能的资源。牺牲非核心业务,保证核心业务的高可用。 - * 熔断:异常情况超出阈值进入熔断状态,快速失败。减少不稳定的外部依赖对核心服务的影响。 - * 自动化测试:通过完善的测试,减少发布引起的故障。 - * 灰度发布:灰度发布是速度与安全性作为妥协,能够有效减少发布故障。 - - -* [《关于高可用的系统》](https://coolshell.cn/articles/17459.html) - * 设计原则:数据不丢(持久化);服务高可用(服务副本);绝对的100%高可用很难,目标是做到尽可能多的9,如99.999%(全年累计只有5分钟)。 - -### 硬件负载均衡 - -* [《转!!负载均衡器技术Nginx和F5的优缺点对比》](https://www.cnblogs.com/wuyun-blog/p/6186198.html) - * 主要是和F5对比。 - -* [《软/硬件负载均衡产品 你知多少?》](https://www.cnblogs.com/lcword/p/5773296.html) - -### 软件负载均衡 - -* [《几种负载均衡算法》](https://www.cnblogs.com/tianzhiliang/articles/2317808.html) - 轮寻、权重、负载、最少连接、QoS -* [《DNS负载均衡》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/611-dns-fang-shi.html) - * 配置简单,更新速度慢。 -* [《Nginx负载均衡》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/613-nginx-fu-zai-jun-heng.html) - * 简单轻量、学习成本低;主要适用于web应用。 - -* [《借助LVS+Keepalived实现负载均衡 》](https://www.cnblogs.com/edisonchou/p/4281978.html) - * 配置比较负载、只支持到4层,性能较高。 - -* [《HAProxy用法详解 全网最详细中文文档》](http://www.ttlsa.com/linux/haproxy-study-tutorial/) - * 支持到七层(比如HTTP)、功能比较全面,性能也不错。 - -* [《Haproxy+Keepalived+MySQL实现读均衡负载》](http://blog.itpub.net/25704976/viewspace-1319781/) - * 主要是用户读请求的负载均衡。 - -* [《rabbitmq+haproxy+keepalived实现高可用集群搭建》](https://www.cnblogs.com/lylife/p/5584019.html) - -### 限流 - -* [《谈谈高并发系统的限流》](https://www.cnblogs.com/haoxinyue/p/6792309.html) - * 计数器:通过滑动窗口计数器,控制单位时间内的请求次数,简单粗暴。 - * 漏桶算法:固定容量的漏桶,漏桶满了就丢弃请求,比较常用。 - * 令牌桶算法:固定容量的令牌桶,按照一定速率添加令牌,处理请求前需要拿到令牌,拿不到令牌则丢弃请求,或进入丢队列,可以通过控制添加令牌的速率,来控制整体速度。Guava 中的 RateLimiter 是令牌桶的实现。 - * Nginx 限流:通过 `limit_req` 等模块限制并发连接数。 - -### 应用层容灾 - -* [《防雪崩利器:熔断器 Hystrix 的原理与使用》](https://segmentfault.com/a/1190000005988895) - * 雪崩效应原因:硬件故障、硬件故障、程序Bug、重试加大流量、用户大量请求。 - * 雪崩的对策:限流、改进缓存模式(缓存预加载、同步调用改异步)、自动扩容、降级。 - * Hystrix设计原则: - * 资源隔离:Hystrix通过将每个依赖服务分配独立的线程池进行资源隔离, 从而避免服务雪崩。 - * 熔断开关:服务的健康状况 = 请求失败数 / 请求总数,通过阈值设定和滑动窗口控制开关。 - * 命令模式:通过继承 HystrixCommand 来包装服务调用逻辑。 - -* [《缓存穿透,缓存击穿,缓存雪崩解决方案分析》](https://blog.csdn.net/zeb_perfect/article/details/54135506) -* [《缓存击穿、失效以及热点key问题》](https://blog.csdn.net/zeb_perfect/article/details/54135506) - * 主要策略:失效瞬间:单机使用锁;使用分布式锁;不过期; - * 热点数据:热点数据单独存储;使用本地缓存;分成多个子key; - -### 跨机房容灾 - -* [《“异地多活”多机房部署经验谈》](http://dc.idcquan.com/ywgl/71559.shtml) - * 通过自研中间件进行数据同步。 - -* [《异地多活(异地双活)实践经验》](https://blog.csdn.net/jeffreynicole/article/details/48135093) - * 注意延迟问题,多次跨机房调用会将延时放大数倍。 - * 建房间专线很大概率会出现问题,做好运维和程序层面的容错。 - * 不能依赖于程序端数据双写,要有自动同步方案。 - * 数据永不在高延迟和较差网络质量下,考虑同步质量问题。 - * 核心业务和次要业务分而治之,甚至只考虑核心业务。 - * 异地多活监控部署、测试也要跟上。 - * 业务允许的情况下考虑用户分区,尤其是游戏、邮箱业务。 - * 控制跨机房消息体大小,越小越好。 - * 考虑使用docker容器虚拟化技术,提高动态调度能力。 - -* [容灾技术及建设经验介绍](https://blog.csdn.net/yoara/article/details/38013751) - - -### 容灾演练流程 - -* [《依赖治理、灰度发布、故障演练,阿里电商故障演练系统的设计与实战经验》](https://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=2650996320&idx=1&sn=0ed3be190bbee4a9277886ef88cbb2e5) - * 常见故障画像 - * 案例:预案有效性、预案有效性、故障复现、架构容灾测试、参数调优、参数调优、故障突袭、联合演练。 - -### 平滑启动 - -* 平滑重启应用思路 -1.端流量(如vip层)、2. flush 数据(如果有)、3, 重启应用 - -* [《JVM安全退出(如何优雅的关闭java服务)》](https://blog.csdn.net/u011001084/article/details/73480432) -推荐推出方式:System.exit,Kill SIGTERM;不推荐 kill-9;用 Runtime.addShutdownHook 注册钩子。 -* [《常见Java应用如何优雅关闭》](http://ju.outofmemory.cn/entry/337235) -Java、Spring、Dubbo 优雅关闭方式。 - -## 数据库扩展 - -### 读写分离模式 - -* [《Mysql主从方案的实现》](https://www.cnblogs.com/houdj/p/6563771.html) -* [《搭建MySQL主从复制经典架构》](https://www.cnblogs.com/edisonchou/p/4133148.html) -* [《Haproxy+多台MySQL从服务器(Slave) 实现负载均衡》](https://blog.csdn.net/nimasike/article/details/48048341) - -* [《DRBD+Heartbeat+Mysql高可用读写分离架构》](https://www.cnblogs.com/zhangsubai/p/6801764.html) - * DRDB 进行磁盘复制,避免单点问题。 - -* [《MySQL Cluster 方式》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/62-ke-kuo-zhan-de-shu-ju-ku-jia-gou/621-gao-ke-yong-mysql-de-ji-zhong-fang-an/6214-mysql-cluster-fang-an.html) - -### 分片模式 -* [《分库分表需要考虑的问题及方案》](https://www.jianshu.com/p/32b3e91aa22c) - * 中间件: 轻量级:sharding-jdbc、TSharding;重量级:Atlas、MyCAT、Vitess等。 - * 问题:事务、Join、迁移、扩容、ID、分页等。 - * 事务补偿:对数据进行对帐检查;基于日志进行比对;定期同标准数据来源进行同步等。 - * 分库策略:数值范围;取模;日期等。 - * 分库数量:通常 MySQL 单库 5千万条、Oracle 单库一亿条需要分库。 - -* [《MySql分表和表分区详解》](https://www.2cto.com/database/201503/380348.html) - * 分区:是MySQL内部机制,对客户端透明,数据存储在不同文件中,表面上看是同一个表。 - * 分表:物理上创建不同的表、客户端需要管理分表路由。 - -## 服务治理 -### 服务注册与发现 - -* [《永不失联!如何实现微服务架构中的服务发现?》](https://blog.csdn.net/jiaolongdy/article/details/51188798) - * 客户端服务发现模式:客户端直接查询注册表,同时自己负责负载均衡。Eureka 采用这种方式。 - * 服务器端服务发现模式:客户端通过负载均衡查询服务实例。 -* [《SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka》](https://blog.csdn.net/u010963948/article/details/71730165) - * CAP支持:Consul(CA)、zookeeper(cp)、etcd(cp) 、euerka(ap) - * 作者认为目前 Consul 对 Spring cloud 的支持比较好。 - -* [《基于Zookeeper的服务注册与发现》](http://mobile.51cto.com/news-502394.htm) - * 优点:API简单、Pinterest,Airbnb 在用、多语言、通过watcher机制来实现配置PUSH,能快速响应配置变化。 - -### 服务路由控制 -* [《分布式服务框架学习笔记4 服务路由》](https://blog.csdn.net/xundh/article/details/59492750) - * 原则:透明化路由 - * 负载均衡策略:随机、轮询、服务调用延迟、一致性哈希、粘滞连接 - * 本地路由优先策略:injvm(优先调用jvm内部的服务),innative(优先使用相同物理机的服务),原则上找距离最近的服务。 - * 配置方式:统一注册表;本地配置;动态下发。 - -## 分布式一致 - -### CAP 与 BASE 理论 - -* [《从分布式一致性谈到CAP理论、BASE理论》](http://www.cnblogs.com/szlbm/p/5588543.html) - * 一致性分类:强一致(立即一致);弱一致(可在单位时间内实现一致,比如秒级);最终一致(弱一致的一种,一定时间内最终一致) - * CAP:一致性、可用性、分区容错性(网络故障引起) - * BASE:Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性) - * BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。 - -### 分布式锁 - -* [《分布式锁的几种实现方式》](http://www.hollischuang.com/archives/1716) - * 基于数据库的分布式锁:优点:操作简单、容易理解。缺点:存在单点问题、数据库性能够开销较大、不可重入; - * 基于缓存的分布式锁:优点:非阻塞、性能好。缺点:操作不好容易造成锁无法释放的情况。 - * Zookeeper 分布式锁:通过有序临时节点实现锁机制,自己对应的节点需要最小,则被认为是获得了锁。优点:集群可以透明解决单点问题,避免锁不被释放问题,同时锁可以重入。缺点:性能不如缓存方式,吞吐量会随着zk集群规模变大而下降。 -* [《基于Zookeeper的分布式锁》](https://www.tuicool.com/articles/VZJr6fY) - * 清楚的原理描述 + Java 代码示例。 - -* [《jedisLock—redis分布式锁实现》](https://www.cnblogs.com/0201zcr/p/5942748.html) - * 基于 setnx(set if ont exists),有则返回false,否则返回true。并支持过期时间。 - -* [《Memcached 和 Redis 分布式锁方案》](https://blog.csdn.net/albertfly/article/details/77412333) - * 利用 memcached 的 add(有别于set)操作,当key存在时,返回false。 - -### 分布式一致性算法 - -#### PAXOS -* [《分布式系列文章——Paxos算法原理与推导》](https://www.cnblogs.com/linbingdong/p/6253479.html) -* [《Paxos-->Fast Paxos-->Zookeeper分析》](https://blog.csdn.net/u010039929/article/details/70171672) -* [《【分布式】Zookeeper与Paxos》](https://www.cnblogs.com/leesf456/p/6012777.html) - -#### Zab -* [《Zab:Zookeeper 中的分布式一致性协议介绍》](https://www.jianshu.com/p/fb527a64deee) - -#### Raft -* [《Raft 为什么是更易理解的分布式一致性算法》](http://www.cnblogs.com/mindwind/p/5231986.html) - * 三种角色:Leader(领袖)、Follower(群众)、Candidate(候选人) - * 通过随机等待的方式发出投票,得票多的获胜。 - -#### Gossip -* [《Gossip算法》](http://blog.51cto.com/tianya23/530743) - -#### 两阶段提交、多阶段提交 - -* [《关于分布式事务、两阶段提交协议、三阶提交协议》](http://blog.jobbole.com/95632/) - -### 幂等 - -* [《分布式系统---幂等性设计》](https://www.cnblogs.com/wxgblogs/p/6639272.html) - * 幂等特性的作用:该资源具备幂等性,请求方无需担心重复调用会产生错误。 - * 常见保证幂等的手段:MVCC(类似于乐观锁)、去重表(唯一索引)、悲观锁、一次性token、序列号方式。 - -### 分布式一致方案 -* [《分布式系统事务一致性解决方案》](http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency) -* [《保证分布式系统数据一致性的6种方案》](https://weibo.com/ttarticle/p/show?id=2309403965965003062676) - -### 分布式 Leader 节点选举 -* [《利用zookeeper实现分布式leader节点选举》](https://blog.csdn.net/johnson_moon/article/details/78809995) - -### TCC(Try/Confirm/Cancel) 柔性事务 -* [《传统事务与柔性事务》](https://www.jianshu.com/p/ab1a1c6b08a1) - * 基于BASE理论:基本可用、柔性状态、最终一致。 - * 解决方案:记录日志+补偿(正向补充或者回滚)、消息重试(要求程序要幂等);“无锁设计”、采用乐观锁机制。 - -## 分布式文件系统 - -* [说说分布式文件存储系统-基本架构](https://zhuanlan.zhihu.com/p/27666295) ? -* [《各种分布式文件系统的比较》](https://blog.csdn.net/gatieme/article/details/44982961) ? - * HDFS:大批量数据读写,用于高吞吐量的场景,不适合小文件。 - * FastDFS:轻量级、适合小文件。 - -## 唯一ID 生成 - -### 全局唯一ID -* [《高并发分布式系统中生成全局唯一Id汇总》](https://www.cnblogs.com/baiwa/p/5318432.html) - * Twitter 方案(Snowflake 算法):41位时间戳+10位机器标识(比如IP,服务器名称等)+12位序列号(本地计数器) - * Flicker 方案:MySQL自增ID + "REPLACE INTO XXX:SELECT LAST_INSERT_ID();" - * UUID:缺点,无序,字符串过长,占用空间,影响检索性能。 - * MongoDB 方案:利用 ObjectId。缺点:不能自增。 - -* [《TDDL 在分布式下的SEQUENCE原理》](https://blog.csdn.net/hdu09075340/article/details/79103851) - * 在数据库中创建 sequence 表,用于记录,当前已被占用的id最大值。 - * 每台客户端主机取一个id区间(比如 1000~2000)缓存在本地,并更新 sequence 表中的id最大值记录。 - * 客户端主机之间取不同的id区间,用完再取,使用乐观锁机制控制并发。 - -## 一致性Hash算法 - -* [《一致性哈希算法》](https://coderxing.gitbooks.io/architecture-evolution/di-san-pian-ff1a-bu-luo/631-yi-zhi-xing-ha-xi.html) - -# 设计思想 & 开发模式 - -## DDD(Domain-driven Design - 领域驱动设计) - -* [《浅谈我对DDD领域驱动设计的理解》](https://www.cnblogs.com/netfocus/p/5548025.html) - * 概念:DDD 主要对传统软件开发流程(分析-设计-编码)中各阶段的割裂问题而提出,避免由于一开始分析不明或在软件开发过程中的信息流转不一致而造成软件无法交付(和需求方设想不一致)的问题。DDD 强调一切以领域(Domain)为中心,强调领域专家(Domain Expert)的作用,强调先定义好领域模型之后在进行开发,并且领域模型可以指导开发(所谓的驱动)。 - * 过程:理解领域、拆分领域、细化领域,模型的准确性取决于模型的理解深度。 - * 设计:DDD 中提出了建模工具,比如聚合、实体、值对象、工厂、仓储、领域服务、领域事件来帮助领域建模。 - -* [《领域驱动设计的基础知识总结》](https://www.cnblogs.com/butterfly100/p/7827870.html) - * 领域(Doamin)本质上就是问题域,比如一个电商系统,一个论坛系统等。 - * 界限上下文(Bounded Context):阐述子域之间的关系,可以简单理解成一个子系统或组件模块。 - * 领域模型(Domain Model):DDD的核心是建立(用通用描述语言、工具—领域通用语言)正确的领域模型;反应业务需求的本质,包括实体和过程;其贯穿软件分析、设计、开发 的整个过程;常用表达领域模型的方式:图、代码或文字; - * 领域通用语言:领域专家、开发设计人员都能理解的语言或工具。 - * 经典分层架构:用户界面/展示层、应用层、领域层、基础设施层,是四层架构模式。 - * 使用的模式: - * 关联尽量少,尽量单项,尽量降低整体复杂度。 - * 实体(Entity):领域中的唯一标示,一个实体的属性尽量少,少则清晰。 - * 值对象(Value Object):没有唯一标识,且属性值不可变,小而简单的对象,比如Date。 - * 领域服务(Domain Service): 协调多个领域对象,只有方法没有状态(不存数据);可以分为应用层服务,领域层服务、基础层服务。 - * 聚合及聚合根(Aggregate,Aggregate Root):聚合定义了一组具有内聚关系的相关对象的集合;聚合根是对聚合引用的唯一元素;当修改一个聚合时,必须在事务级别;大部分领域模型中,有70%的聚合通常只有一个实体,30%只有2~3个实体;如果一个聚合只有一个实体,那么这个实体就是聚合根;如果有多个实体,那么我们可以思考聚合内哪个对象有独立存在的意义并且可以和外部直接进行交互; - * 工厂(Factory):类似于设计模式中的工厂模式。 - * 仓储(Repository):持久化到DB,管理对象,且只对聚合设计仓储。 - -* [《领域驱动设计(DDD)实现之路》](http://www.cnblogs.com/Leo_wl/p/3866629.html) - * 聚合:比如一辆汽车(Car)包含了引擎(Engine)、车轮(Wheel)和油箱(Tank)等组件,缺一不可。 - -* [《领域驱动设计系列(2)浅析VO、DTO、DO、PO的概念、区别和用处》](http://www.hollischuang.com/archives/553) - - -### 命令查询职责分离(CQRS) - -CQRS — Command Query Responsibility Seperation - -* [《领域驱动设计系列 (六):CQRS》](https://www.cnblogs.com/cnblogsfans/p/4551990.html) - * 核心思想:读写分离(查询和更新在不同的方法中),不同的流程只是不同的设计方式,CQ代码分离,分布式环境中会有明显体现(有冗余数据的情况下),目的是为了高性能。 - -* [《DDD CQRS架构和传统架构的优缺点比较》](http://www.techweb.com.cn/network/system/2017-07-07/2553563.shtml) - * 最终一致的设计理念;依赖于高可用消息中间件。 - -* [《CQRS架构简介》](http://www.cnblogs.com/netfocus/p/4055346.html) - * 一个实现 CQRS 的抽象案例。 - -* [《深度长文:我对CQRS/EventSourcing架构的思考》](http://www.uml.org.cn/zjjs/201609221.asp) - * CQRS 模式分析 + 12306 抢票案例 - -### 贫血,充血模型 - -* [《贫血,充血模型的解释以及一些经验》](https://kb.cnblogs.com/page/520743/) - * 失血模型:老子和儿子分别定义,相互不知道,二者实体定义中完全没有业务逻辑,通过外部Service进行关联。 - * 贫血模型:老子知道儿子,儿子也知道老子;部分业务逻辑放到实体中;优点:各层单项依赖,结构清楚,易于维护;缺点:不符合OO思想,相比于充血模式,Service层较为厚重; - * 充血模型:和贫血模型类似,区别在于如何划分业务逻辑。优点:Service层比较薄,只充当Facade的角色,不和DAO打交道、复合OO思想;缺点:非单项依赖,DO和DAO之间双向依赖、和Service层的逻辑划分容易造成混乱。 - * 肿胀模式:是一种极端情况,取消Service层、全部业务逻辑放在DO中;优点:符合OO思想、简化了分层;缺点:暴露信息过多、很多非DO逻辑也会强行并入DO。这种模式应该避免。 - * 作者主张使用贫血模式。 - -## Actor 模式 - -TODO - -## 响应式编程 - -### Reactor -TODO -### RxJava -TODO -### Vert.x -TODO - -## DODAF2.0 - -* [《DODAF2.0方法论》](http://www.360doc.com/content/16/0627/19/33945750_571201779.shtml) -* [《DODAF2.0之能力视角如何落地》](http://blog.51cto.com/xiaoyong/1553164) - -## Serverless - -无需过多关系服务器的服务架构理念。 - -* [《什么是Serverless无服务器架构?》](http://www.jdon.com/soa/serverless.html) - * Serverless 不代表出去服务器,而是去除对服务器运行状态的关心。 - * Serverless 代表一思维方式的转变,从“构建一套服务在一台服务器上,对对个事件进行响应转变为构建一个为服务器,来响应一个事件”。 - * Serverless 不代表某个具体的框架。 - -* [《如何理解Serverless?》](http://www.infoq.com/cn/news/2017/10/how-to-understand-serverless) - * 依赖于 Baas ((Mobile) Backend as a Service) 和 Faas (Functions as a service) - - - -## Service Mesh - -* [《什么是Service Mesh?》](https://time.geekbang.org/article/2355) -* [《初识 Service Mesh》](https://www.jianshu.com/p/e23e3e74538e) - - -# 项目管理 - -## 架构评审 -* [《架构设计之如何评审架构设计说明书》](http://developer.51cto.com/art/201506/478486.htm) -* [《人人都是架构师:非功能性需求》](https://blog.csdn.net/wireless_com/article/details/45935591) - -## 重构 - -* [《架构之重构的12条军规》](http://www.infoq.com/cn/articles/architect-12-rules-complete/) - -## 代码规范 - -* [《阿里巴巴Java开发手册》](https://github.com/alibaba/p3c) - -## 代码 Review - - -制度还是制度! -另外,每个公司需要根据自己的需求和目标制定自己的 check list - -* [《为什么你做不好 Code Review?》](http://www.sohu.com/a/229745352_181657) - * 代码 review 做的好,在于制度建设。 - -* [《从零开始Code Review》](https://blog.csdn.net/uxyheaven/article/details/49773619) - -* [《Code Review Checklist》](https://www.cnblogs.com/zuoping/p/5477047.html) -* [《Java Code Review Checklist》](https://dzone.com/articles/java-code-review-checklist) - -* [《如何用 gitlab 做 code review》](https://blog.csdn.net/legend0011/article/details/45585575) - -## RUP -* [《运用RUP 4+1视图方法进行软件架构设计》](https://blog.csdn.net/apanious/article/details/51011946) - -## 看板管理 -* [《说说看板在项目中的应用》](https://blog.csdn.net/tkchen/article/details/51637643) - -## SCRUM - -SCRUM - 争球 - -* 3个角色:Product Owner(PO) 产品负责人;Scrum Master(SM),推动Scrum执行;Team 开发团队。 -* 3个工件:Product Backlog 产品TODOLIST,含优先级;Sprint Backlog 功能开发 TODO LIST;燃尽图; -* 五个价值观:专注、勇气、公开、承诺、尊重。 - - -* [《敏捷项目管理流程-Scrum框架最全总结!》](https://blog.csdn.net/inny100_100/article/details/54633757) - -* [《敏捷其实很简单3---敏捷方法之scrum》](https://blog.csdn.net/superkunkun/article/details/52951142) - -## 敏捷开发 - -TODO - -## 极限编程(XP) - -XP - eXtreme Programming - -* [《主流敏捷开发方法:极限编程XP》](http://www.woshipm.com/pmd/406917.html) - * 是一种指导开发人员的方法论。 - * 4大价值: - * 沟通:鼓励口头沟通,提高效率。 - * 简单:够用就好。 - * 反馈:及时反馈、通知相关人。 - * 勇气:提倡拥抱变化,敢于重构。 - - * 5个原则:快速反馈、简单性假设、逐步修改、提倡更改(小步快跑)、优质工作(保证质量的前提下保证小步快跑)。 - * 5个工作:阶段性冲刺;冲刺计划会议;每日站立会议;冲刺后review;回顾会议。 - -## 结对编程 - -边写码,边review。能够增强代码质量、减少bug。 - -* [《结对编程》](http://www.baike.com/wiki/%E7%BB%93%E5%AF%B9%E7%BC%96%E7%A8%8B) - -## PDCA 循环质量管理 - -P——PLAN 策划,D——DO 实施,C——CHECK 检查,A——ACT 改进 - -* [《PDCA》](http://www.baike.com/wiki/PDCA) - -## FMEA管理模式 - -TODO - -# 通用业务术语 - -TODO - -# 技术趋势 - -TODO - -# 政策、法规 - -## 法律 - -* [《中华人民共和国网络安全法》](https://baike.baidu.com/item/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E6%B3%95/16843044) - * 2016年11月7日发布,自2017年6月1日起施行 - -* [《个人信息保护法》](https://baike.baidu.com/item/个人信息保护法/8343360) - * 个人信息保护法是一部保护个人信息的法律条款,现尚在制订中,2019全国两会信息安全相关提案中,有政协委员呼吁关注大数据时代隐私保护,加速立法。 - -* [《最高人民法院、最高人民检察院关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释》](https://baike.baidu.com/item/最高人民法院、最高人民检察院关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释/20497481) - * 《解释》共十三条,自2017年6月1日起施行 - > * 1、对于行踪轨迹信息、通信内容、征信信息、财产信息,非法获取、出售或者提供50条以上即算“情节严重”; - > * 2、对于住宿信息、通信记录、健康生理信息、交易信息等其他可能影响人身、财产安全的公民个人信息,标准则是 500条以上; - > * 3、对于其他公民个人信息,标准为 5000条以上。 - -* [《中华人民共和国电子商务法》](https://baike.baidu.com/item/中华人民共和国电子商务法/16467544) - * 2018年8月31日,十三届全国人大常委会第五次会议表决通过《电子商务法》,自2019年1月1日起施行 - * [解读电子商务法(一)什么是电商](https://v.youku.com/v_show/id_XNDAzNjAyNDM0MA==.html) - * [解读电子商务法(二)电商经营者](https://v.youku.com/v_show/id_XNDA1OTc0OTQ5Mg==.html) - * [解读电子商务法(三)电商行为规范](https://v.youku.com/v_show/id_XNDA4NzIyNjI4MA==.html) - * [解读电子商务法(四)电商的法律关系](https://v.qq.com/x/page/e08443fc1cr.html) - * [解读电子商务法(外传)电商挣钱的秘密](https://v.youku.com/v_show/id_XNDA4MTQ2Nzk4NA==.html) - * [解读电子商务法(外传)电商模式](https://v.qq.com/x/page/j0844twjwr5.html) - -* [程序员需要知道的法律常识](https://blog.csdn.net/a331685690/article/details/79917772) -* [白话法律42讲-为程序员打造的专属法律武器](https://time.geekbang.org/column/132) - -### 严格遵守刑法253法条 - -我国刑法第253条之一规定: - -> * 国家机关或者金融、电信、交通、教育、医疗等单位的工作人员,违反国家规定,将本单位在履行职责或者提供服务过程中获得的公民个人信息,出售或者非法提供给他人,情节严重的,处3年以下有期徒刑或者拘役,并处或者单处罚金。 -> * 窃取或者以其他方法非法获取上述信息,情节严重的,依照前款的规定处罚。 -> * 单位犯前两款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚。 - -最高人民法院、最高人民检察院关于执行《中华人民共和国刑法》确定罪名的补充规定(四)规定:触犯刑法第253条之一第1款之规定,构成“出售、非法提供公民个人信息罪”;触犯刑法第253条之一第2款之规定,构成“非法获取公民个人信息罪” - -* [《非法获取公民个人信息罪》](https://baike.baidu.com/item/%E9%9D%9E%E6%B3%95%E8%8E%B7%E5%8F%96%E5%85%AC%E6%B0%91%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF%E7%BD%AA) - -### 避风港原则 -“避风港”原则是指在发生著作权侵权案件时,当ISP(网络服务提供商)只提供空间服务,并不制作网页内容,如果ISP被告知侵权,则有删除的义务,否则就被视为侵权。如果侵权内容既不在ISP的服务器上存储,又没有被告知哪些内容应该删除,则ISP不承担侵权责任。 后来避风港原则也被应用在搜索引擎、网络存储、在线图书馆等方面。 -* [《避风港原则》](https://baike.baidu.com/item/%E9%81%BF%E9%A3%8E%E6%B8%AF%E5%8E%9F%E5%88%99/588459?fr=aladdin) - -# 架构师素质 - -* [《架构师画像》](http://hellojava.info/?p=430) - * 业务理解和抽象能力 - * NB的代码能力 - * 全面:1. 在面对业务问题上,架构师脑海里是否会浮现出多种技术方案;2. 在做系统设计时是否考虑到了足够多的方方面面;3. 在做系统设计时是否考虑到了足够多的方方面面; - * 全局:是否考虑到了对上下游的系统的影响。 - * 权衡:权衡投入产出比;优先级和节奏控制; - -* [《关于架构优化和设计,架构师必须知道的事情》](http://www.infoq.com/cn/articles/architecture-optimization-and-design-the-architect-must-know) - * 要去考虑的细节:模块化、轻耦合、无共享架构;减少各个组件之前的依赖、注意服务之间依赖所有造成的链式失败及影响等。 - * 基础设施、配置、测试、开发、运维综合考虑。 - * 考虑人、团队、和组织的影响。 - -* [《如何才能真正的提高自己,成为一名出色的架构师?》](https://www.zhihu.com/question/19841397) - -* [《架构师的必备素质和成长途径》](https://blog.csdn.net/sanbingyutuoniao123/article/details/54144129) - * 素质:业务理解、技术广度、技术深度、丰富经验、沟通能力、动手能力、美学素养。 - * 成长路径:2年积累知识、4年积累技能和组内影响力、7年积累部门内影响力、7年以上积累跨部门影响力。 - -* [《架构设计师—你在哪层楼?》](http://blog.51cto.com/frankfan/1248401) - * 第一层的架构师看到的只是产品本身 - * 第二层的架构师不仅看到自己的产品,还看到了整体的方案 - * 第三层的架构师看到的是商业价值 - -# 团队管理 - -TODO - -## 招聘 - -# 资讯 - -## 行业资讯 - -* [36kr](http://36kr.com/) -* [Techweb](http://www.techweb.com.cn/) - -## 公众号列表 - -TODO - -## 博客 - -### 团队博客 -* [阿里中间件博客](http://jm.taobao.org/) -* [美团点评技术团队博客](https://tech.meituan.com) - -### 个人博客 - -* [阮一峰的网络日志](http://www.ruanyifeng.com/) -* [酷壳 - COOLSHELL-陈皓](https://coolshell.cn/) -* [hellojava-阿里毕玄](http://hellojava.info/) -* [Cm's Blog](http://cmsblogs.com/) -* [程序猿DD-翟永超-《Spring Cloud微服务实战》作者](http://blog.didispace.com/) - -## 综合门户、社区 - -**国内:** - -* [CSDN](http://csdn.net) - 老牌技术社区、不必解释。 -* [51cto.com](http://www.51cto.com/) -* [ITeye](http://www.iteye.com/) - * 偏 Java 方向 -* [博客园](https://www.cnblogs.com) -* [ChinaUnix](http://www.chinaunix.net/) - * 偏 Linux 方向 -* [开源中国社区](https://www.oschina.net/) -* [InfoQ](https://www.infoq.cn/) -* [深度开源](http://www.open-open.com/) -* [伯乐在线](http://www.jobbole.com/) - * 涵盖 IT职场、Web前端、后端、移动端、数据库等方面内容,偏技术端。 - -* [ITPUB](http://www.itpub.net/) -* [腾讯云— 云+社区](https://cloud.tencent.com/developer/column) -* [阿里云— 云栖社区](https://yq.aliyun.com/) -* [IBM DeveloperWorks](https://www.ibm.com/developerworks/cn/) -* [开发者头条](https://toutiao.io/) -* [LinkedKeeper](http://www.linkedkeeper.com) - -**国外:** - -* [DZone](https://dzone.com) -* [Reddit](https://www.reddit.com) - -## 问答、讨论类社区 - -* [segmentfault](https://segmentfault.com) - * 问答+专栏 -* [知乎](https://www.zhihu.com/) -* [stackoverflow](https://stackoverflow.com/) - -## 行业数据分析 - -* [艾瑞网](http://report.iresearch.cn/) -* [QUEST MOBILE](https://www.questmobile.com.cn) - -* [国家数据](http://data.stats.gov.cn/) - -* [TalkingData](http://www.talkingdata.com/) - -## 专项网站 - -* 测试: - * [领测国际](http://www.ltesting.net/) - * [测试窝](https://www.testwo.com/) - * [TesterHome](https://testerhome.com) - -* 运维: - * [运维派](http://www.yunweipai.com/) - * [Abcdocker](https://www.abcdocker.com/) - -* Java: - * [ImportNew](http://www.importnew.com/) - * 专注于 Java 技术分享 - * [HowToDoInJava](https://howtodoinjava.com/) - * 英文博客 - -* 安全 - * [红黑联盟](https://www.2cto.com/) - * [FreeBuf](http://www.freebuf.com/) - -* 大数据 - * [中国大数据](http://www.thebigdata.cn/) - -* 其他专题网站: - * [InfoQ](http://www.infoq.com/cn/) - * 偏重于基础架构、运维方向 - * [DockerInfo](http://www.dockerinfo.net/) - * 专注于 Docker 应用及咨询、教程的网站 - * [Linux公社](https://www.linuxidc.com/) - * Linux 主题社区 - -## 其他类 - -* [程序员技能图谱](https://github.com/TeamStuQ/skill-map) - -## 推荐参考书 - - -### 在线电子书 - -* [《深入理解Spring Cloud与微服务构建》](https://github.com/forezp/SpringCloudLearning) - - -* [《阿里技术参考图册-研发篇》](http://techforum-img.cn-hangzhou.oss-pub.aliyun-inc.com/1523849261680/AliTech101_RD.pdf) -* [《阿里技术参考图册-算法篇》](http://techforum-img.cn-hangzhou.oss-pub.aliyun-inc.com/1523848064814/AliTech101_Algorithms.pdf) - -* [《2018美团点评技术年货(合辑)》70M](http://dpurl.cn/n/1lqcX) - -* [InfoQ《架构师》月刊](http://www.infoq.com/cn/architect/) - -* [《架构师之路》](https://www.w3cschool.cn/architectroad/) - -### 纸质书 - -更多架构方面书籍参考: [awesome-java-books](https://github.com/sorenduan/awesome-java-books/blob/master/README.md#%E6%9E%B6%E6%9E%84) - -#### 开发方面 - -* 《阿里巴巴Java开发手册》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=BfL5CR) - -#### 架构方面 -* 《软件架构师的12项修炼:技术技能篇》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=rTlo0m) -* 《架构之美》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=1KECBZ) -* 《分布式服务架构》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=hkzqtK) -* 《聊聊架构》 [详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=A8Nd6Z) -* 《云原生应用架构实践》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=D4WCpd) -* 《亿级流量网站架构核心技术》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=Rdmd21) -* 《淘宝技术这十年》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=CoUdGG) -* 《企业IT架构转型之道-中台战略思想与架构实战》 [详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=BxS6eI) - -* 《高可用架构(第1卷)》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=BcjUwS) - -#### 技术管理方面 -* 《CTO说》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=Gl3QAo) -* 《技术管理之巅》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=MeloLt) -* 《网易一千零一夜:互联网产品项目管理实战》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=qPuqMg) - -#### 基础理论 -* 《数学之美》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=0seUpO) -* 《编程珠玑》[详情](https://www.coderxing.com/r.php?r=https://union-click.jd.com/jdc?d=I7jj9r) - -#### 工具方面 -TODO - -#### 大数据方面 - -# 技术资源 - -## 开源资源 -* [github](https://github.com) - -* [Apache 软件基金会](https://www.apache.org/index.html) - -## 手册、文档、教程 - -**国内:** -* [W3Cschool](http://w3cschool.cn) -* [Runoob.com](http://www.runoob.com/) - * HTML 、 CSS、XML、Java、Python、PHP、设计模式等入门手册。 - -* [Love2.io](https://love2.io/) - * 很多很多中文在线电子书,是一个全新的开源技术文档分享平台。 -* [gitbook.cn](http://gitbook.cn/) - * 付费电子书。 -* [ApacheCN](http://www.apachecn.org/) - * AI、大数据方面系列中文文档。 - -**国外:** - -* [Quick Code](http://www.quickcode.co/) - * 免费在线技术教程。 -* [gitbook.com](http://gitbook.com) - * 有部分中文电子书。 -* [Cheatography](https://www.cheatography.com/) - * Cheat Sheets 大全,单页文档网站。 -* [Tutorialspoint](https://www.tutorialspoint.com/index.htm) - * 知名教程网站,提供Java、Python、JS、SQL、大数据等高质量入门教程。 -* [LeetCode](https://leetcode.com/problemset/all/) - * 知名题库网站,提供Java、Python、C#、C++、算法、SQL、等高质量各程度题库和解决办法。 - -## 在线课堂 - -* [学徒无忧](http://www.xuetuwuyou.com/) -* [极客时间](https://time.geekbang.org/) -* [segmentfault](https://segmentfault.com/lives) -* [斯达克学院](https://new.stuq.org/course/explore) -* [牛客网](http://nowcoder.com) -* [极客学院](https://www.jikexueyuan.com/) -* [51CTO学院](http://edu.51cto.com/) - -## 会议、活动 - -* [QCon](http://www.infoq.com/cn/qcon/) -* [ArchSummit](https://archsummit.com) -* [GITC全球互联网技术大会](http://www.thegitc.com/) - -**活动发布平台:** -* [活动行](http://www.huodongxing.com/) - -## 常用APP - -* [极客时间](https://time.geekbang.org) -* [得到](https://www.igetget.com) - -## 找工作 -* [Boss直聘](https://www.zhipin.com) -* [拉勾网](https://www.lagou.com) -* [猎聘](https://www.liepin.com) -* [100Offer](https://cn.100offer.com/) - -## 工具 - -* [极客搜索](https://s.geekbang.org/) - * 技术文章搜索引擎。 - -## 代码托管 - -* [Coding](https://coding.net) -* [码云](https://gitee.com/) - -## 文件服务 -* 七牛 -* 又拍云 - -## 综合云服务商 -* 阿里云 -* [腾讯云](https://cloud.tencent.com/redirect.php?redirect=1012&cps_key=c2665015d90871c0cb20fef91b7afc3c) -* 百度云 -* 新浪云 -* 金山云 -* [亚马逊云(AWS)](https://amazonaws-china.com/cn/) -* [谷歌云](https://cloud.google.com/?hl=zh-cn) -* [微软云](https://azure.microsoft.com/zh-cn/) - -### VPS -* [Linode](http://linode.com) -* [DigitalOcean](https://www.digitalocean.com) -* [Vultr](https://www.vultr.com/) diff --git a/_posts/2023-06-10-Front-End-RoadMap.md b/_posts/2023-06-10-Front-End-RoadMap.md deleted file mode 100644 index 16402e8..0000000 --- a/_posts/2023-06-10-Front-End-RoadMap.md +++ /dev/null @@ -1,127 +0,0 @@ -### 第一阶段-前端基本功 - -html: - -html元素和属性,html表单和图形处理,html媒体和最佳实践 - -css: - -+ css基本语法和选择器, -+ css背景,文本,边框,轮廓与颜色 -+ css列表,表单与表格样式 -+ css样式层叠与继承 -+ css盒模型,定位,浮动和显示属性 -+ css渐变,阴影与滤镜 -+ css变换,过渡与动画 -+ web字体与多列布局 - -页面制作工具 - -+ vscode photoshop markman pxcook 蓝湖 sketch axure - -### 第二阶段-布局技术、布局规范与方案 - -+ 布局技术: -包含了BFC、IFC、GFC、FFC、Flex弹性布局、网格布局、媒体查询、viewport、remvw、 dpr与ppi、 - -+ 布局规范与方案: -PC端网站布局规范,响应式布局、移动端设备适配最佳实践、流式布局 (100%布局)等小点 - -### 第三阶段-JavaScript - -+ 原生JavaScript交互功能开发 - -基本语法,流程控制语句,函数与数组,String与Date,BOM与DOM,拖拽效果,客户端存储(Cookie存储与WebStorage),正则表达式,Ajax,面向对象基础,运动与游戏开发,数据结构与算法 - -+ 原生JS经典特效开发 - -时间轴特效,tab页面切换效果,网页定位导航特效,滑动门特效,焦点图轮播特效,导航条菜单效果,瀑布流特效,弹出层特效,倒计时特效,抽奖特效 - -+ 面向对象进阶与ES应用 - -Promise async/await语法 try/catch语法 原型链 构造函数 执行上下文栈与上下文 作用域链 闭包 this ES5-ES12 设计模式 - -+ JS工具库自主研发 - -DOM库 事件库 AJAX库 原型和继承库 MVVM核心库 基于SPA的路由库 - - - -### 第四阶段-全栈项目 - -+ PC端网站开发 - -+ Nodejs 服务端开发 - -Node基础 EXpress框架基础 中间件开发 MVC开发模式 基于Express的后端路由 MongoDB数据库基本使用 基于Token登陆状态保持 NodeJS的EventLoop 文件上传(单文件/多文件) 模板引擎 静态资源加载 服务端渲染页面 - -+ 前端工程化与模块化 - -Linux Less/Sass NPM Git AMD/CMD/UMD ES6模块化 - -+ 前端工具库 - -Animate CSS VanillaJS Lodash Swiper axios Moment.js Eslint/prettier ECharts JQuery - -### 第五阶段-大前端 - -+ Angular - -+ React - -+ Vue - -+ Web3 :web3生态概念 Solidity智能合约 Web3.js for DAPP上以太坊... - - -### 第六阶段-进阶 - -+ PWA技术:PWA项目实战 - -+ Electron技术: - -Electron入门 Electron调试技巧 Electron主进程与渲染进程API Electron与React,Vue集成 构建Windows,Mac Linux跨平台应用 - -+ 微信公众号 - -微信内置公众号定制 JSSDK接入 公众号常见功能开发 - -+ 微信小程序 - -微信小程序基础 小程序高级应用 原生多端小程序开发 Uni-app多端小程序框架 Taro多端小程序框架 - -### 第七阶段-原生应用开发技术 - -+ React-Native - -RN 环境搭建;RN基础组件 ;RN动画与手势 ;Expo基础 ;RN+Expo调用硬件设备 - -+ Flutter - -Flutter环境搭建 界面构建与基础部件 布局与表单 Dart语法 Widgets容器 网络请求与路由 - -+ HarmonyOS鸿蒙开发 - -认识鸿蒙,框架基础 内置组件 自定义组件 接口 - -### 第八阶段-大前端架构 - -+ 开发工具及服务器技术 - -Webpack5 Vite2 EsLint与单元测试 TypeScript Nginx Docker Serverless WebAssembly技术 - -+ 前端性能 - -SSR技术 Nuxt.js服务端渲染 Next,js服务端渲染 SEO优化 - -+ 微前端 - -Webpack+Vue+React微前端实践 - -+ 低代码组件库 - -低代码平台搭建 Vue/React/小程序的UI组件库开发 - -+ 安全 - -前端攻击 前端异常监控 \ No newline at end of file diff --git "a/_posts/2023-06-12-t_io\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234\351\200\232\350\256\257\346\241\206\346\236\266.md" "b/_posts/2023-06-12-t_io\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234\351\200\232\350\256\257\346\241\206\346\236\266.md" deleted file mode 100644 index 4914510..0000000 --- "a/_posts/2023-06-12-t_io\351\253\230\346\200\247\350\203\275\347\275\221\347\273\234\351\200\232\350\256\257\346\241\206\346\236\266.md" +++ /dev/null @@ -1,26 +0,0 @@ -### 网络通讯框架 - -[项目地址:](https://gitee.com/manong92/t-io/) - - -### todolist -t-io - - - - - - - -#### 开源项目的商业模式: - -[**t-io从开源到商业之路**](https://baijiahao.baidu.com/s?id=1750074624925325179&wfr=spider&for=pc) - -除了 SaaS、open-core 等典型的开源商业模式之外,企业还有什么其它方式能够依赖开源项目生存下来,并且活得很好?多年前,t-io 在早期阶段开创了国内开源项目代码开源、文档收费的先河。虽然为人所不理解,但这种获取收入的方式在《大教堂与集市》一书中被称为 “附属物策略”,如其所言:“在这种模型下,人们出售开源软件的附属物,如低端市场上的杯子或 T 恤,高端市场上的专业书籍或者文章。” - -+ 首次化缘之文档付费 -- “文档不行,demo 来凑,一凑倾城,二凑倾国,三凑倾天下众生” -[经典战役](https://www.oschina.net/question/2617937_2243270) - -谭耀武,杭州钛特云科技有限公司创始人,网络编程框架 t-io 执笔人,曾任牛吧云播 CTO。四流程序员、三流创业者、二流传销佬、一流装逼师。以前的梦想让公司活下去,现在的梦想是成就投资人的梦想。 - - diff --git "a/_posts/2023-06-13-JIM\345\215\263\346\227\266\351\200\232\350\256\257.md" "b/_posts/2023-06-13-JIM\345\215\263\346\227\266\351\200\232\350\256\257.md" deleted file mode 100644 index 4a2d278..0000000 --- "a/_posts/2023-06-13-JIM\345\215\263\346\227\266\351\200\232\350\256\257.md" +++ /dev/null @@ -1,2 +0,0 @@ -### JIM即时通讯 - diff --git a/_posts/2023-11-07-notes.md b/_posts/2023-11-07-notes.md deleted file mode 100644 index 9b505aa..0000000 --- a/_posts/2023-11-07-notes.md +++ /dev/null @@ -1,235 +0,0 @@ -# 索引文件vec/vem/vex lucene9.8.0 -lucene向量搜索相关的索引文件,主要索引文件类型为.vec/.vem/.vex结尾的文件,文件中包含的内容主要包括图的分层信息、每一层中的节点编号、向量值,相连的邻居节点等信息 -业界流行的向量搜索基于论文 -Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs - -## 数据结构 -.vec文件中存放的数据为所有的向量值vectorData,文档号信息DocIdData,以及节点编号与文档号之间的映射信息OrdToDocData -索引文件.vec - - - -## 去重编码 -去重编码是对int类型数据的一种压缩方式,在FacetsConfig类中应用此方法来处理int类型数据,其优点在于,存储一个原本需要4字节空间大小的int类型数据,最好的情况下只需要一个字节,最坏情况下需要5个字节 -去重编码的过程: -+ 排序 -+ 去重 -+ 差值存储 - -去重编码最重要的一点是差值存储。在存储一组有序的数值时,除第一个数值外,其他的数值如果只存储跟它前面数值的差值,那么可以使得达到最大的压缩比。这种方式在存储大数值时的有点更明显。例如我们有一组数据:{17832,17842,17844},如果我们直接对3个数值进行存储(不存储差值),那么最终需要9个字节才能存储这三个数值,而如果我们进行差值存储,那么我们需要存储的数据就变为: {17832,10,2},其中10是17842跟17832的差值,2是17844跟17842的差值,那么最终只需要5个字节存储即可。 - -1个字节 数值范围 0~2^7-1 0~127 -2个字节 数值范围 2^7~2^14-1 128~16383 -3个字节 数值范围2^14~2^21-1 16384~2097151 -4个字节 数值范围2^21~2^28-1 2097152~268435455 -5个字节 数值范围2^28~* 268435456~* - -``` -package lucene.compress.dedupAndEncodeTest; - -import org.apache.lucene.util.BytesRef; - -import java.util.Arrays; - -public class ConvertIntToByteRef { - - public static BytesRef dedupAndEncode(int[] ordinals) { - // 对 ordinal排序,为了下面存储差值 - Arrays.sort(ordinals, 0, ordinals.length); - // 先给每一个int类型分配5个字节大小的空间, 每个字节中只有7位是有效字节(描述数值),最高位是个定界符, 所以一个int类型最多要5个字节 - byte[] bytes = new byte[5*ordinals.length]; - int lastOrd = -1; - int upto = 0; - // 遍历处理每一个int类型 - for(int i=0;i lastOrd) { - int delta; - if (lastOrd == -1) { - // 处理第一个值, 只能储存原始的数值 - delta = ord; - } else { - // 处理非第一个值,就可以储存这个值与前一个值的差值 - delta = ord - lastOrd; - } - // 当前数值在0~127范围内 - if ((delta & ~0x7F) == 0) { - // 注意的是第8位是0(位数从1开始), 是个定界符, 表示下一个byte字节是另一个int的一部分 - bytes[upto] = (byte) delta; - upto++; - } else if ((delta & ~0x3FFF) == 0) { - // 这个字节的最高位是1, 表示下一个byte字节和当前字节属于同一个int类型的一部分 - bytes[upto] = (byte) (0x80 | ((delta & 0x3F80) >> 7)); - // 每次存储7位 - bytes[upto + 1] = (byte) (delta & 0x7F); - upto += 2; - } else if ((delta & ~0x1FFFFF) == 0) { - bytes[upto] = (byte) (0x80 | ((delta & 0x1FC000) >> 14)); - bytes[upto + 1] = (byte) (0x80 | ((delta & 0x3F80) >> 7)); - bytes[upto + 2] = (byte) (delta & 0x7F); - upto += 3; - } else if ((delta & ~0xFFFFFFF) == 0) { - bytes[upto] = (byte) (0x80 | ((delta & 0xFE00000) >> 21)); - bytes[upto + 1] = (byte) (0x80 | ((delta & 0x1FC000) >> 14)); - bytes[upto + 2] = (byte) (0x80 | ((delta & 0x3F80) >> 7)); - bytes[upto + 3] = (byte) (delta & 0x7F); - upto += 4; - } else { - bytes[upto] = (byte) (0x80 | ((delta & 0xF0000000) >> 28)); - bytes[upto + 1] = (byte) (0x80 | ((delta & 0xFE00000) >> 21)); - bytes[upto + 2] = (byte) (0x80 | ((delta & 0x1FC000) >> 14)); - bytes[upto + 3] = (byte) (0x80 | ((delta & 0x3F80) >> 7)); - bytes[upto + 4] = (byte) (delta & 0x7F); - upto += 5; - } - // 这里将ord保存下来是为了去重 - lastOrd = ord; - } - } - return new BytesRef(bytes, 0, upto); - } - - public static void main(String[] args) { - int[] array = {3, 2, 2, 8, 12}; - BytesRef ref = ConvertIntToByteRef.dedupAndEncode(array); - System.out.println(ref.toString()); - } -} - -``` -解压 - -``` -package lucene.compress.dedupAndEncodeTest; - -import org.apache.lucene.util.BytesRef; -public class ConvertByteRefToInt { - - public static void decode(BytesRef bytesRef){ - byte[] bytes = bytesRef.bytes; - int end = bytesRef.offset + bytesRef.length; - int ord = 0; - int offset = bytesRef.offset; - int prev = 0; - while (offset < end) { - byte b = bytes[offset++]; - // if语句为真:decode结束,用ord表示 - if (b >= 0) { - // ord的值为差值,所以(真实值 = 差值 + 前面一个值) - prev = ord = ((ord << 7) | b) + prev; - System.out.println(ord); - ord = 0; - // decode没有结束,需要继续拼接 - } else { - ord = (ord << 7) | (b & 0x7F); - } - } - } - - public static void main(String[] args) { - int[] array = {3, 2, 2, 8, 12}; - BytesRef ref = ConvertIntToByteRef.dedupAndEncode(array); - ConvertByteRefToInt.decode(ref); - } -} - -``` - -### SortedDocValues -SortedDocValues同NumericDocValues、SortedNumericDocValues一样,在实际应用中最多的场景用于提供给搜索结果一个排序规则,在使用SortedDocValues之后,在.dvd .dvm文件中的索引结构, facet join group等功能,==>根据.dvd dvm中的索引数据进行查询的过程 - -#### 前置 -##### TermID -在创建索引阶段,会根据IndexWriter中添加document的顺序,有序地处理每一个document中的SortedDocValuesField,并且对每一个SortedDocValuesField的域值赋予一个从0开始递增的itemID,相同的域值具有相同的itemID -``` - String groupField = "superStart"; - // 0 - Document doc = new Document(); - doc.add(new SortedDocValuesField(groupField, new BytesRef("mop"))); - indexWriter.addDocument(doc); - - // 1 - doc = new Document(); - doc.add(new SortedDocValuesField(groupField, new BytesRef("moth"))); - indexWriter.addDocument(doc); - - // 2 - doc = new Document(); - doc.add(new SortedDocValuesField(groupField, new BytesRef("of"))); - indexWriter.addDocument(doc); - - // 3 - doc = new Document(); - doc.add(new SortedDocValuesField(groupField, new BytesRef("star"))); - indexWriter.addDocument(doc); - indexWriter.commit(); -``` -会生成如下的new BytesRef与itemID之间的对应关系 -|域值|aa|cc|bb|ff| -|----|----|----|----|----| -|itemID|0|3|2|1| - -##### currentValues[]数组 -currentValues[]数组中,下标值为文档号docId,数组元素为ItemId,在索引阶段,由于处理的数据是按照IndexWriter中添加document的顺序进行的,即第一篇文档的document,文档号docId为0,文档号递增的顺序,所以在这个过程中,就可以通过数组方式记录,文档号docId跟ItemId之间的映射关系 - -currentvalues[] -|ItemId|0|1|2|3|3| -|--|--|--|--|--|--| -|docId|0|1|2|3|4| - -#### sortedValues[]数组 ord -sortedValues[]数组中的数组元素是ItemID,数组下标是ord值,数组元素是有序的,但是排序规则不是根据ItemId的值,而是根据termId对应的域值的字典序 - -#### ordMap[]数组 - -sortedValues[]数组中实现了 数组下标ord 到 数组元素termId的映射,而ordMap[]数组则是实现了 数组下标termId 到 数组元素 ord的映射。 - - -### 数据结构 - -DocValues -在搜索引擎中,通常都是对域名field构建倒排索引inverted index 实现域值values到文档的映射,而DocValues则是构建一个正向索引,实现文档到域值的映射, -DocValues目前主要有五种类型: -Sorted_set -Sorted_Numeric -Numeric -Sorted -Binary - - - -.dvd - - - - - -### BytesRefHash -BytesRefHash类是专门为BytesRef对象做优化的一种类似hashMap数据结构,该类的主要作用就是将所有的BytesRef存储到一个连续的存储空间,并且使得能在查询阶段达到O(1)的时间复杂度 -BytesRefHash属性 -byte[][]buffers: 二维数组buffers[][]用来存储bytesRef对象,所有的bytesRef都连续存储在byte[][] buffers中 - -int itemID:是从0开始的递增的值,每个bytesRef根据他存储到buffers的位置获得一个唯一的itemId - -int[] ids: ids数组下标 是bytesRef按照murmurhash计算出的hash值,ids[]数组元素则是itemId值 - -int[] bytesStart:bytesStart数组下标是itemID,数组元素是itemID对应的BytesRef值在buffers[][]中的起始位置 - -** 代码块{} 优先 main 局部变量初始化** - - -BytesRef数组 - - - - -### 压缩BulkOperationPacked - -BulkOperation类的子类BulkOperationPacked 提供了很多对整数integers的压缩存储方法,其压缩过程就是对数据进行编码,将每一个整数long或者int编码为固定大小进行存储,大小取决于最大的那个值所需要的bit位数,优点是减少存储空间,并且对编码之后的数据能够提供随机访问的功能 - -十进制{1,1,1,0,2,2,0,0} 二进制表示为{01,01,01,00,10,10,0,0}存储需要4*8=32byte,数据中最大值为2,需要2bit即可表示,所以其他数据统一2bit表示,编码后需要的空间 2x8/8=2byte - - - diff --git a/_posts/2023-11-10-Lucene-Contents.md b/_posts/2023-11-10-Lucene-Contents.md deleted file mode 100644 index 5cc5c87..0000000 --- a/_posts/2023-11-10-Lucene-Contents.md +++ /dev/null @@ -1,184 +0,0 @@ -# Lucene核心技术 - -Lucene7.5.0 vs Lucene 8.7.0 - -## codecs -SIMD(Single Instruction Multiple Data) - -## 索引文件 -### DocValues -+ BinaryDocValues -+ SortedSetDocValues -+ SortedDocValues -+ SortedNumericDocValues -+ NumericDocValues -+ BinaryDocValues-8.7.0 - -### 索引文件之cfs&cfe -### 索引文件之segment_N -### 索引文件之fnm -### 索引文件之si -### 索引文件之fdx&fdt -### 索引文件之tvx&tvd -### 索引文件之liv -### 索引文件之dim&dii -### 索引文件之tim&tip -### 索引文件之doc -### 索引文件之pos&pay -### 索引文件之nvd&nvm -### 索引文件之fdx&fdt&fdm-8.6.0 -### 索引文件之 kdd&kdi&kdm-8.6.0 -### 索引文件之tvd&tvx&tvm-8.7.0 - -# Index -## (1) 构造IndexWriter对象 - -## (2)执行段的合并 - -## (3)段的合并策略 -+ LogMergePolicy -+ TieredMergerPolicy - -## (4)段的合并调度MergeScheduler - -## (5) 索引文件的合并 -+ 索引文件合并之 fdx&fdt&fdm - -+ 索引文件合并之 fdx&fdt& - -## (6) 文档的增删改 - -## (7)近实时搜索NRT - -## (8) 文档提交之commit - -## (9) 文档提交之flush - -## (10) SegmentReader - -## (11) 索引文件的生成 - -## (12) 软删除softDeletes - -## (13) ReaderPool - -## (14) 索引文件的载入 - -## (15) 内存索引 - -## (16) 强制合并 ForceMerge - -## (17) 段内排序IndexSort - -# Search - -## 查询原理 - -## Collector - -## 查询缓存LRU QueryCache - -## FieldComparator - -## 文档号合并(SHOLD) - -## 文档号合并(MUST) - -## BooleanQuery - -## Store -+ 索引文件锁LockFactory - -## Directory - -## 索引文件的读取 - -## 范围域 rangeField - -## block-max-WAND - -## 查询topN的优化 之 NumericDocValues - -## IndexOrDocValuesQuery - -## DisjunctionMaxQuery - -## GeoQuery - -## PointRangeQuery - -## IndexSortSortedNumericDocValuesRangeQuery - -## 段的多线程查询 - -## BulkScorer - -# Util - -## RoaringDocIdSet - -## Bkd-tree - -## Automaton - -## FixedBitSet - -## ByteRefHash - -## IntBlockPool - -## RamUsageEstimator - -## IndexedDISI - -## 文档号搜集器DocIdSet - -# 压缩存储 - -## LZ4 algorithm - -## FST - -## BulkOperationPacked - -## 去重编码 dedupAndEncode - -## PackedInts - -## DirectWriter & DirectReader - -## DirectMonotonicWriter & Reader - -## Run Length游标编码 - -# Other - -## 倒排表的数据结构 -+ TermVector倒排表 -+ 倒排表 - -## SortedDocValues VS BinaryDocValues - -## 两阶段遍历(TwoPhaseIterator) - -## 查找表(lookup table) - -## off-heap/on-heap - -## TermRangeQuery - -## TermsEnum -+ TermsEnum(一) -+ PostingsEnum(一) - -## 删除队列DeleteQueue - -## GeoHash编码 - -## DocIdSetIterator - -## ImpactsDISI - -## Scorer - -## diff --git a/_posts/2023-11-11-compress.md b/_posts/2023-11-11-compress.md deleted file mode 100644 index fcd9bd2..0000000 --- a/_posts/2023-11-11-compress.md +++ /dev/null @@ -1,4 +0,0 @@ -# IntBlockPool - -在索引阶段,使用IntBlockPool来存储term(域值)的信息,在MemoryIndex,使用此类对term在文档中的位置,payload数据进行存储,它即Memory中的倒排表,它的数据就是用这个类的对象存储的 - diff --git a/_posts/2023-11-12-SIMD.md b/_posts/2023-11-12-SIMD.md deleted file mode 100644 index 9e6a1c4..0000000 --- a/_posts/2023-11-12-SIMD.md +++ /dev/null @@ -1,6 +0,0 @@ -# Single construction multi Data - -``` -SIMD SISD MISD MIMD -``` - diff --git a/_posts/2023-11-13-toolbox.md b/_posts/2023-11-13-toolbox.md deleted file mode 100644 index 84bd98b..0000000 --- a/_posts/2023-11-13-toolbox.md +++ /dev/null @@ -1,14 +0,0 @@ - - -https://bugstack.cn/md/road-map/maven.html - - -nexus: -http://nexus.bsdn.org/#nexus-search;quick~disruptor - - -infoQ: -https://www.infoq.com/presentations/LMAX/#downloadPdf/ - -Google论坛组: -https://www.infoq.com/presentations/LMAX/#downloadPdf/ \ No newline at end of file diff --git a/_posts/2023-11-29-disruptor.md b/_posts/2023-11-29-disruptor.md deleted file mode 100644 index ec55d63..0000000 --- a/_posts/2023-11-29-disruptor.md +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - -https://it.cha138.com/ios/show-52405.html - - - diff --git a/_posts/2023-12-13-website.md b/_posts/2023-12-13-website.md deleted file mode 100644 index e953bc1..0000000 --- a/_posts/2023-12-13-website.md +++ /dev/null @@ -1,556 +0,0 @@ -在线手绘网站 https://excalidraw.com/#room=4cf56986ba1220962799,gZ9KtekuipNBODIchGSn1Q - - -https://www.toptal.com/blog - - -https://martinfowler.com/architecture/ - -https://docs.phalcon.io/5.0/en/api/phalcon_cache#cache-abstractcache - -工具元素周期表 -https://devops.phodal.com/ - ------------------------------------------------------------------------------ - - -https://www.zhihu.com/question/629894384/answer/3323541406 - - ----------------------------------------------------------------------------- - -技术社区和论坛: -stack Overflow: 一个广泛使用的问题解答网站,可以找到各种编程问题的解决方案. -GitHub: 不仅是代码托管平台,也有许多项目和开源代码,是学习和交流的好地方。。 -Reddit: 特别是其技术相关的子版块,如 r/programming、r/learnprogramming 等。 -Hacker News: 分享和讨论计算机科学和创业话题的社区 - -在线教育平台: -Coursera、Udemy、edX: 提供各种编程语言和技术相关的课程 -。LeetCode: 用于练习编程和算法题,适合提升编程能力和面试准备 -技术博客和新闻网站: -。Medium: 许多技术专家和公司在此发布文章 -。TechCrunch、Wired: 提供最新的科技新闻和趋势。 -。Ars Technica: 涵盖广泛的科技话题,包括软件、硬件、网络等 - -当你觉得你学不下去了 (找安慰的地方,去看看不止咱很菜) -Codementor: 国际版在行,更侧重于开发者之间的帮助,可以从专家获取帮助 -devRant: 吐槽和释放压力的地方 -Learn Anvthing: 找学习任何知识时的最佳路径 -Stack Overflow: 订阅他们的每周新闻和任何你感兴趣的主题 - -新闻篇 -。ACM TechNews:科技新闻 -Stratechery:类似于个人博客 -AlternativeTo: 众包软件推荐 -Ars Technica:精品文章 -Better Dev Links:每周一次的链接推送帮助你成为更好的开发者 -DevOpsLinks:一个对DevOps感兴趣的众多开发者和it专家的在线社区 -GSMArena.com: 与最新手机和android相关的新闻 -Hacker News Digest : Hacker News文摘 -Hacker News: 针对程序员的新闻聚合,通过新闻稿获取头条新闻 -Hacker Newsletter: 手工编辑,周周更新 -Hacker Noon:一些技术科技类文章的网站 -High Scalability:不同公司在他们的apps上的成功的故事 -Lobsters:Lobsters是一个聚焦于技术的社区,主要是链接聚合和对话题进行讨论 -product hunt: 寻找你最喜欢的东西 -Recode:聚焦硅谷商业的科技新闻 -Reddit.com/r/programming :科技新闻和文章的聚合 -Slashdot:新闻,社会新闻 -Stack share :各公司技术栈共享站点 -TechCrunch:一个科技新闻的站点 -The DEV Community:程序员分享想法和互相帮助的地方 -Ars Technica:发表的独特的精品文章 -The Verge: 更多面向产品的科技新闻 -XDA :Android开发者新闻 - -杂志篇 -Mit技术评论 :麻省理工学院技术评论杂志 -Nautilus:纽约人看技术 -LWN :开源技术,编程等的新闻周刊等 (原linux每周新闻) - -针对初学者的代码练习 -Cave of programming :学习编程,提升技巧 -Codeacademy:交互式编码学习,免费 -CodeAbbey - 一个任何人都能精通编程的地方:从菜鸟到专家进阶之地Exercism.io:用超过30种不同的语言解决实践问题,与其他人分享你的解决方案freeCodeCamp:学习编码并且为非营利性组织构建项目。打造你的全栈开发技能 -karan/Projects-Solutions 用不同语言实现的项目 -Lod - Cloud :开放数据云图 -Programming by Doing: 编程进阶站点 -Reddit.com/r/dailyprogrammer: 有趣的编程挑战,在这里你能学习其他人的编码,对于你解决不了的编码你能看看其他人是怎么解决的 -People Can Program :互联网上最友好的编程学习应用 -Programming Tasks:小程序汇总,不是微信的小程序 -Vim adventures :边玩边学vim -Pramp: 尝试面试官角色,结束后,可以点击左边的按钮交换角色 -Paqmind :学习编程的指南和挑战 -treehouse :快速容易和经济实惠的方法来提升技I巧 - -加密货币 -加密货币爱好者必知内容 :加密货币爱好者必须要知道的8项内容 -区块链基础 :区块链介绍 - - -针对那些想开始一个小的项目但是无从下手的人 -freeCodeCamp|React project ideas :学习react的27个有趣的想法martyr2s-mega-project-ideas-list:包含125个项目,从初级到中级karan/Projects:针对新手的小项目的汇总 -Wrong"big projects"for beginners:怎样选择,从哪里开始vicky002/1000-Projects: 一个能够用任何编程语言解决的巨型项目清单 - - -通用编码建议 -成为一名优秀开发者的10种方法 -代码审查最佳实践: Kevin London的博客 -Dieter Rams:好的产品设计的10个原则 -设计模式:用例子详细说明设计模式 -如何成为一个程序员或谷歌搜索的艺术 -s项目指南:javascript项目最佳实践集合 -Learn to Code With Me:一个资源非常全的网站,冒在为科技界的开发人员提供资源 -一个程序员一生应遵循的原则 -编程规范 :程序设计原理与模式分类综述 -软件设计模式:设计模式的汇总 -良好的编程原则 -我希望在我一开始学习编码的时候就能得到的一些建议 一 Free Code Camp:从教别人处学到的东西 -在计算机科学专业应该知道什么 :良好的编程规范 -软件开发者的工作:Henrik Warne的博客 - -编码风格 -。Airbnb JS 风格指南:写JavaScript最好的方式 -Airbnb Ruby 风格指南: Airbnb的ruby风格指南Ruby 编码风格指南:社区驱动的Ruby编码风格指南Angular 1 风格指南:官方认可的风格指南,作者John Pappa -S106B 编码风格指南:代码臃肿者必看 -调试问题 :检查如何调试程序 -CS课程目录(许多在线讲座): 另一个在线CS课程 -在线CS课程目录:免费的在线CS课程 -优秀的 C 编码习惯·/r/C Programming -google C++ 编码风格 -怎样高效的报告Bug -建议初学者避免使用的坏的编码习惯? -PEP8 - Pvthon编码风格指南 -标准JS 风格指南:JavaScript风格指南 -Google Python 风格指南 -Aurelia 风格指南 - -通用工具 -。CodePad :远程面试工具 -CodePen:基于浏览器共享前端代码的地方 -Devicons:免费图标汇总 -。regex101:在线正则表达式测试和调试,国内也有不少 -regexr: 另一个在线学习、测试正则表达式的工具 -Wit Al :帮助开发者灵活的控制应用,适合没有移动端开发经验的用户 -bash和shell脚本 -。Advanced Bash-Scripting Guide :对shell脚本艺术的深入挖掘Bash Guide for Beginners :对新手的bash使用指南 -Bash编程 -Bash参考手册 -Bash指南 -Conquering the Command Line:针对开发者的Unix和Linux命令 - -面试准备 -/r/cscareerquestions:这是一个非常大的面试问题列表是我在为4大面试时用到的,我认为对大家也是有用的 -10个最频繁的SQL查询面试问题 -逻辑题答案汇总 -算法设计流程 -资质问题与答案:Quant and aptitude preparation -个技术面试题,逻辑题等的站点:各种让你思考的东西 -BeehYve :各种学生需要的资源 -面试准备时的链接的汇总·/r/cscareerquestions -算法复杂度笔记 -大家的误解 -位操作技巧 -ChiperSoft/InterviewThis: 在面试期间问到对公司的了解的问题 -Code Project:面向开发人员 -Java核心面试问题 - 每个主题的面试题 -一些有趣的C问题 -CS9: CS技术面试中的问题解决 -优秀的逻辑题 -确定不同循环的时间复杂度?:在stackoverflow上的一些好问题包括计算时间复杂度5个基本的电话面试问题 - steveyegge2 -新人面试 -GeeksforGeeks|针对qeek的计算机科学入门:订阅他们获取新文章 -准备学习SQL篇: 用语言描述一下数据库规范化 - Essential SQL -github.com/odino/interv...:面试重要问题列表 -让你的简历改头换面 -技术面试指南 - -如何为技术面试做准备·/r/cscareerquestions -怎样进行算法面试 -怎样进行自我介绍|The Art of Manliness -如何回答最棘手的40个面试问题 ICS Job Portal -如何进入科技企业-求职和面试指南 -怎样面试 -怎样准备一个面试 - 1 -IIT Delhi 实习经验: -samwincott/lnternship-Guide:与实习相关的链接汇总 -华尔街面试 -面试架构 - Java Honk -工作面试: 如何做好求职面试|展示个人魅力 -求职面试新闻、视频、评论和八卦 - Lifehacker -求职面试问题和最佳答案 -kimberli/interviews: 面试学习表格 -Mission-peace/interview problems:一个大的编码面试的问题的汇总 -软件工程师面试实践平台 :与真正的同行进行编程交流 -Problems]LeetCode OJ:针对面试的编码训练 -程序员和软件面试问答 -Reddit.com/user/ashish2199/m/puzzles: Reddit逻辑题 -SQL面试问题:好的SQL测试 -使用韦恩图进行SQL连接 -svozniuk/java-interviews:Java面试题 -25个最难的HR问题 -面试10大算法 -Unix / Linux笔记 -为求职者和雇主提供的建议 -通过动画可视化数据结构和算法 -We Help Coders Get Hired :提供系统设计,面试策略,软件技能等的web站点 -你的问题是什么? -为何你会赚钱少·/r/cscareerquestions -wu :: riddles(hard): 逻辑题 -夏季实习: 最终篇 -求职面试问题和最好的答案 -Java面试问题与答案 -编程语言概念 课堂笔记:面向对象概念和编程语言概念 -系统设计面试 -一个站点提供技术面试题,逻辑题或者你想的其他内容 -前端常见面试题汇总 - - -纪录片 -什么都能问 Gayle Laakmann McDowell (程序员面试宝典的作者) -Breaking the Code: Alan Turing传 -攻破代码面试 -攻破代码面试-全栈开发演讲者系列 -书呆子的胜利: Play-list -哈佛大学 CS50 - 渐进学习 (视频 -cpu如何执行程序(视频 -机器代码指令(视频) -机器改变世界 - 关于计算机历史的纪录片 -Part 1: 巨大的大脑 -Part 2: 发现未来 -Part 3: 台式计算机 -Part 4: 机器的思考 -Part 5: 指尖上的世界 - -机械计算机(AIl Parts): 20世纪50年代的一个视频,说明了在没有现代电子的情况下机械计算机 -是如何工作的 -Project Code Rush - netscape/mozilla起源的纪录片 -自学计算机科学 -Linux的故事 -Download: 互联网的真实故事:发现频道关于浏览器战争和互联网泡沫的记录 -Linux操作系统的故事 -学习新知识-mooc -课程中心: 超过10万名学生评价的目录 -="docs.google.com/spreads...">计算机科学资源:针对自学者的mooc列表Coursera.org :在网上学习全世界最好的课程 -Cs50 -edX: 免费在线课程,帮助你进步,改善你的生活 -Kadenze] Creative Programming: 注重艺术和创造力的编程课 -麻省理工学院电气工程和计算机科学 -MooC.fi: 赫尔辛基大学在线课程 -NPTEL Vidoes COMP SCI ENGG -prakhar1989/awesome-CS-courses:CS课程大汇总 -Udacity -UCBerkeley -网上CS课程的收集 -极客教程 - -与你偏爱的编程语言相关的网站(对我来说是Java) -学习java的最好的书: Java基础 -Bjarne Stroustrup's C++风格和技术问答: C++问答 -Bjarne Stroustrup's FAQ : The C++ FAQ -C++11-新的ISO C++ 标准:C++11问答 -编译器(视频) -深入Java: 垃圾回收! -免费在线的章节用来学习iava虚拟机 -垃圾搜集如何工作 -算法、数据结构、面试问题和答案的实现 -IntelliJ键盘快捷键 :使用IntelliJ的键盘快捷键用来提高生产力 -ava Corner at Artima.com -Java课程笔记 -Java堆 -Java-source:Java开源软件 -Java Visualizer:帮助将引用,值,变量可视化 -JournalDev - Java, Java EE, Android, Web Development Tutorials -Learning Java:一个免费的在线学习Java语言的教材 -Netbeans的键盘快捷键:键盘快捷键能够使你在工作时提高生产力 -搜索开源的Java APl: 浏览Java库的源代码,并且学习如何实现 -C++编程语言:C++编程语言 -Java内存模型 -The Javam Tutorials: 最好的Java手册 -理解JVM -垃圾回收是什么: 动态垃圾搜集 -Welcome to JavaWorld.com -XyzWs Java FAQs :Java面试题汇总 - -AI学习 -fast.ai:针对没有研究生水准的数学的开发者的免费实用的深度学习课程qrakn.ai: 数据库AI -Robots that learn:机器人学 -无监督神经元 -Al、机器学习、深度学习的不同 -TensorFlow:一个针对机器智能的软件开源库 -Scikit-learn:一个针对机器学习的Python模块 -DeepLearning.ai: 深度学习课程,作者coursera的创建者,吴恩达 -深度学习的历史 -Serpent Al:游戏代理框架 -研讨会、研究性写作、会谈等 -关于研究和写作的建议 -博士论文 -在会议上讨论的实用技巧 -研讨会和报告 -Latex参考 -Begin Latex in minutes:针对初学者的Latex的简单介绍帮助你轻松掌握Latex -。Lshort:对Latex2的详细介绍 -知识汇总 -·reddit.com/user/ashish2199/m/cs student subs:在reddits中计算机科学和编程相关的主题个程序员应该访问的web站点 :发表在Quora上,作者ashish2199 -Moocha:从edx、coursera、udacity等搜索在线课程 -Rico's cheatsheets: 常用知识备忘集合 -API Documentation:一个众所周知的带有搜索接口的API文档,类似于dash - -youtube频道 -C++Now(BoostCon) :当前的C++会议 -code::dive conference: 有诺基亚技术中心组织的会议 -Coding Blocks:指南,技巧 -Computerphile:每个CS学生都应该看 -ComputerHistory:针对那些想知道如何达成目标的人 -f="youtube.com/user/CppCon...">CppCon:C++会议 -Facebook Developers -Fun Fun Function:每周一次的对编程主题的分类,也包括一些与编码不直接相关的内容 -Google Developers -GoogleTechTalks: 关于热门话题的视频和在技术界的一些趣事 -Gynvael Coldwin :逆向工程和黑客 (CTF) 博客,每周三都有新的直播 -HowToBecomeTV:与技术界相关的开发人员的好的面试 -ref="youtube.com/user/java/v...">Java:有关Java的会谈 -"youtube.com/channel/UCd...">JavaOne :Java会议 -Meeting C++ YT Kanalseite : C++会议 -Netflix UI Engineering :web开发者,移动开发者和对Netflix技术栈感兴趣的视频 -O'Reilly: 世界最佳技术作家访谈录 -Placement Grid:面试及校园实习经验 -scott Meyers: Past Talks -Sirai Raval:Al和深度学习指南视频 -ThinMatrix:开发者在java中使用OpenGL制作的一个3D游戏的博客和指南 -thoughtbot: 谈论各种话题 -yegor256 - -好文章 -白话40个关键的计算机科学概念 -关于图论的一个介绍 -个对程序员友好的语言 -软件开发者的阅读列表: 这是一些好书和链接 -关于TCP/IP协议栈的代码: 编写一个TCP/IP的协议栈,5:TCP重传 -代码的转换:语言的选择 -数据结构与算法:一些算法和数据结构的解决方案 -深入字节码 -初级开发者的想法 -Linux内核 -算法清单 -提升编码技巧的关键 -Unicode编码 -我们正在通过创新重塑零售业 -每个程序员都需要知道的关于在文本中设置编码和字符的内容每个程序员都应该了解的关于内存的内容-pdf -为什么网页的快速加载是很重要的:为什么一个APP的速度决定了其收入qotoqot-提升技巧:我是如何一个月工作200个小时的 -Pixel Beat - Unix:使用unix工具并行处理 -学习Vim:我希望我应该知道什么 - -播客 -Coding Blocks:一个播客,涵盖最佳编程实践,设计模式,性能编码,面向对象编码,数据库设计和实现、提示、技巧和许多其他主题的内容 -水深火热的开发者:一个播客,分享开发人员的人性,并讲述了由Dave Rael主持的一些令人惊叹的软件人物的故事 -开发者茶话会: 开发者在喝茶小想时浏览的播客前端的欢乐时光:来自Netflix,Evernote,Atlassian&LinkedIn的软件工程师小组,讨论关于前端开发的所有事情的一个博客。无线电的所有流程:包括从产品设计和用户体验到单元测试和系统管理Groovy播客:专用于Groovy编程语言及其生态系统的播客。IPhreaks:每周讨论一次关于ios开发和开发中的最新技术,具体讨论苹果,工具,做法 和代码JavaScript 论坛:每周一次关于JavaScript,前端开发,社区,职业和框架的讨论 -用我的播客学习代码:以一个季为一集的科技播客,是由劳伦斯·布拉德福德 (LaurenceBradford) 主持,从科技职业到科技业务的课程MS示例展示:Jason Young和Carl Schweitzer谈到有关Azure云,Windows,Windowsphone,Visual studio以及使用Microsoft平台的跨平台开发等最新的开发者新闻React Native Radio:每周讨论使用JavaScript和React构建移动应用程序的工具,技术和技术软件工程日报:关于软件主题的日常技术面试软件工程无线电:针对专业软件开发人员的播客,目标是成为一个持久的教育资源而不是新闻语法:对Wes Bos&Scott Tolinski和Web开发人员来说是一个比较有趣的博客The Bike Shed :参与者讨论他们的开发经验和Ruby,Rails,JavaScript等的挑战The Change log:每周一次的谈话,参与者都是开源技术的核心人员和创建者愤世嫉俗的开发者 :一个播客,旨在通过解释最新和最伟大的开发技术,为您提供开发知识和职业生涯,并提供您作为开发人员取得成功的需要。覆盖桌面,网络和移动开发,主要围绕.Net堆栈,也经常研究其他软件和框架 - - -构建一个简单的编译器/解释器 -snowman: 可能是有史以来最小的编译器:这是一个超简化的例子,它描述了一个使用JavaScript编写的易于阅读的 现代编译器的所有主要部分 -精彩的编译器: 编译器,翻译和运行的精彩资源列表 -提升一个编译器:了解如何提升一个编译器 -一起开发一个简单的解释器-第一章:尝试通过构建一个编译器,揭开它的神秘面纱 -业余编译器开发者的资源: 业余编译器开发者的资源 -计算机程序的构造与解释:计算机程序的结构和解释 -我开发的第一个编译器:写出你的第一个编译器 -编译器简介:如何与计算机说话,例如siri先生 -编写自己的编译器:如何编写自己的编译器 - -教程 -A Hacker's Guide to Git:为那些想学习git的人打下坚实的基础 -Best Of - Gustavo Duarte :包含各种主题的文章 -CMSI 281: Data Structures:针对数据结构的轻量级的说明 -Collecting all the cheat sheets:大量编程语言的接口表 -C Programming -C编程语言常见问题 -Data Structures and Algorithms by John Morris:代码和其分析的另一个好的来源深入学习C语言: 关于C语言的一个很好的演示 -设计模式: 可重用面向对象的软件的基础:aka the"Gang Of Four"book,or GOFDynamic programming - PrismoSkills :学习如何解决动态规划问题 -Git从入门到精通 -Head First Design Patterns -How to Program in C++: 怎样学习C++编程,关于学习C++和STL的好资源 -mysqltutorial.org/ -indradhanush tutotials : 写一个Unix核 -Introduction to C Programming -10分钟搞定UNIX -Learning the shell. -Linux Journey:学习Linux的好站点 -Linux Tutorial:学习Linux的好资源 -More about Github-flavored markdown -MySQL Essentials -Open Data Structures:用来学习数据结构和算法的优秀的资源提供了C++Java等各种语言的 -伪代码 -Os Course Notes : Galvin's书的章节笔记 -从新手到专家-编程、web开发、DevOps新闻,教程和工具 -SQL(Structured Query Language) in one page:SQL.SU:结构化查询语言,一个非常好的 -SQL记录表 -Subtle| Poor Man's Cl:了解连续集成平台如何工作,通过使用Nodejs构建您自己的git之 -TCP/IP图解 -The Bash Guide:学习Bash shell的优秀教程 -The Descent to C:针对那些从高级编程语言像java或者python迁移到C的人 -The Linux 命令行: yige完整介绍 -The Unix环境编程 -TopCoder Tutorials -Tutorialspoint:UPSC,IAS,PCS,公务员,银行,能力,问题,答案,解释,面试,入学考试,解决方案的文本和视频教程 -UNIX和和Linux系统管理员手册 第四版 -VimTutor+: 从浏览器上学习VIM -W3Schools在线Web教程 -Unix Shell : ksh / bash的Unix shell脚本 -Snap SVG:现代Web的JavaScript SVG库 -vim.rtorr : Vim Cheat sheet -Open Vim: 交互式Vim教程 -Algorithm Using Dynamic Programming and A:使用动态编程和A*设计树差分算法 -。Learn Python:免费的交互式Pvthon教程 -C++17 :C ++指南17 - -欣赏他人的代码 -LiveEdu.tv: 构建应用,网站游戏等人的视频 -Twitch.tv : Twitch的编程社区 -一个程序员应该知道的东西 -GitHub.com Build software better together: 向其他人展示你的项目和与人协作的地方 (为了更高效的使用它必须知道Git) -Gitlab提供无限制的私有库,和无限制的组织 -程序员能力矩阵:一篇用来了解我们作为程序员的水平的文章 - - -编程比赛 -Archived Problems - Project Euler:问题归档 -Art of Problem Solving: 数学课对你来说太容易了吗? 你来到正确的地方! -CodeChef:唯一的编程比赛Web 2.0平台 -Codefights:测试你的编码技巧 -Codeforces: 编程竟赛,在线计算机编程 -Codewars:根据完成代码排名 -Codility: 验证和提高编码技能 -Codingame: 通过游戏和挑战学习编码! -Google Code Jam Practice and:过去比赛的练习题 -HackerEarth - Programming challenges and Developer jobs -HackerRank:实践编码、竞争、找工作 -PKU ACM ICPC Practice problems:ACMACPC 在线审核 -Sphere Online Judge(SPOJ):成为一名真正的编程硕士学习如何编写和构建高效的算法 -Topcoder: 通过更多的包为代码提供更快的速度 -UVa Online Judge:支持多种语言的数百种问题 -WakaTime:通过编辑器插件收集编码度量的排行榜 - -计算机书籍 -Become a Programmer Motherfucker (list of books):来自Zed A. Shaw的书籍详尽清单 -最佳图书奖 -cses.fi/book.html -github.com/vhf/free-programming-books:超过500本免费电子书几乎包括你能想到的所有 -语言 -GitBook: GitBook 可以帮助您的团队在线编写,协作和发布内容 -Data Science course:Python数据科学手册 - - -视频指南 -codedamn:前端Web开发教程 -代码学院: PluralSight公司和一个有抱负和有经验的开发人员的互动学习的地方 -CodingMadeEasy:C ++教程 -CS1: Higher Computing - Richard Buckland UNSW:一个很好的介绍性的CS课程 -Derek Banas:优质的教程 -算法的设计与分析 -DevTips: web开发教程 -Kathryn Hodge:为初学者提供好视频 -mycodeschool: 数据结构和算法教程 -Pluralsight :通过多个短期课程学习软件开发,DevOps和数据科学 -thenewboston:课程很好但是与实际内容相比有点呀嗦 -Tushar Roy:印度Youtuber的算法和数据结构教程Vim Tutorial Videos - Flarfnoogins: 用于学习Vim好的视频教程XDA-University - Helping You Learn Android Development:帮助您学习Android开发 -Khan Academy: 免费学习计算机科学 -Functional programming :John Carmack功能编程(2013)Video about vims: - -在线编译和共享代码片段 -CodePad:支持代码编写,测试和运行,支持超过25种语言 -Codesandboxio:CodeSandbox可以更轻松地创建,与他人共享和重用React项目 -Godbolt.org:一款非常优秀的工具用来探索在不同编译器没有优化时的输出 -ldeone.com:用于60多种编程语言的在线编译和调试工具 -JSFiddle:在线测试你的iavascript,CSS,HTML或者CoffeeScript -Pastebin.com -C9.io:在云端的开发环境 -Github Gist: 即时分享代码,笔记和片段 - - -开发者博客 -Algo-Geeks: 编程拼图,数学技巧,算法等 -Antirez - Redis Creator's blog : Antirez的博客 -Antonio081014's Algorithms Codes : RULE下的世界 -Archives - Ask a Manager:人力资源相关的东西 -Armin Ronachers Thoughts and Writings:关于Python和开源的博睿 -blog.might.net : might dot net的博客 -Brendon Gregg - Linux Kernel Dev : Brendon D. Gregg博客 -Clean Coder Blog:《代码整洁之道》一书作者的博客 -CodeAhoy: 软件和人为因素的博客,100%测试人类 -CoderGears Blog Insights from : the CoderGears Team -Coding Geek - A blog about lT, programming and Java:关于IT,编和Java的博客 -Coding Horror:一个最好的编码博客 -CSE Blog: 量子,数学,计算机科学难题 -Daedtech.com:有关软件的故事 -Dan Dreams of Coding -Daniel Lemire's Blog :Daniel Lemire的博客 -Eli Bendersky:从Python到LLVM的一切 -Geek Land:我珍贵的收藏品 -HackerEarth Blog:黑客博客 -IT Enthusiast:IT热衷者 -Joel on Software: StackOverflow首席执行官的博客 -Late Developer:一个老C ++人的随机想法 -1ucasvb's laporiqinal math and physics visualization:Lucas Vieira Barbosa的实验室原始数学和物理可视化 -Math n Programming : Math n Programming -My Tech Interviews : 准备技术访谈 -Paul Graham Essays : Paul Grahan Essays -Programming Blog : Yegor Bugayenko的编程博客 -Programming in the 21st Century : 二十一世纪的编程 -rudhakar Rayavaram : Sudhakar Rayavaram博客 -Runhe Tian Coding Practice: 苹果,谷歌,Facebook,亚马逊和微软的技术面试问题 -Small Programming Challenges and Puzzles : Nayuki项目 -Stephen Haunts{ Coding in the Trenches}: 软件开发,架构和技术领导力 -stevehanov.ca: 我知道如何在线制作和销售软件,我可以和你分享我的提示 -Takipi Blog:主要关注Java和JVM语言 -WildMl:机器学习博客 -XDA - Android Developer Forum : Android开源开发者论坛 - -用来提高你的英语 -Englishclub.com/learn-english -语法和写作指南:对于那些想提高英语语言能力的人 -标点符号和字母大小写规则 -PPurdue大学在线写作实验室 -Quia - English - - -当你厌倦了CS相关的东西 -Barcroft TV: 构成世界的各种各样的人的短小的纪录片 -Big Think: 专家驱动,可操作的教育内容,包括比尔·克林顿到比尔·奈 -ColdFusion: 过去的当前的以及未来的技术 -CrashCourse:各种科目的小班课程 -Every Frame a Painting:高质量的电影分析 -National Geographic 来自世界各地的高品质内容 -r/ProgrammerHumor: Subreddit 用于听什么像什么 -Reddit the front page of the internet:适合有大把空闲时间的人 -Ridddle: 关于科学的YouTube频道,主要是但不仅仅是宇亩和空间 -Scishow:有关您一直想知道的有趣问题的答案 -SmarterEveryDay: 关于我们周围世界的许多惊人的科学信息,通常用高速摄像机TED :谈论技术,娱乐和设计 -TestTube News:有关世界各地新闻的有趣信息 -Reddit the front page of the internet: 适合有大把空闲时间的人 -How to live for long time ? :长寿的秘警 -Vsauce: 最好的YouTube频道 -Ox A cuk:如何过幸福的生活 -lonelyspeck: 关于轻污染天文摄影的权利的曝光 - Palos Verdes,洛杉矶,加利福尼亚州 - - -开源网站 -Open Hatch:OpenHatch是一个非营利组织,致力于将潜在的免费软件贡献者与社区,工具和教育相匹配 -Source Forge:SourceForge主持着近28万个项目 (最后一次) 。它每天提供超过200万次下载,并包含各种类别的应用程序和工具 -Google Code: Google使用Subversion或Mercurial版本控制系统为开源项目提供免费托管服务。它提供2GB的存储,集成的代码审查工具,维基和问题跟踪, Google Code网站还提供了Google许多公开API和其他开发人员工具的链接。 -Launch Pad :由Canonical、LaunchPad维护,特别针对在Ubuntu上运行的项目。它为超过21,000个使用Bazaar版本控制系统的项目提供托管 -Google Open Source : Google开源 -Red Hat Developer:全球领先的开源解决方案提供商 -Open Source:开源 -Google Summer of Code: Google Summer of Code是一项全球性计划,致力于将更多的学生开发人员引入开源软件开发。学生在休学期间,用户3个月与一个开源组织合作完成的编程项目Open Source Web Design:开源网页设计是一个共享符合标准的免费网页设计模板的平台。我们通过良好的设计给网络发布商一个通知 -Mozilla Winter of Security: 安全冬季(MWOS) 是由Mozilla安全小组组织的一个计划: 让学生参与安全项目,学生必须执行一个学期项目作为大学课程的一部分,可以选择其中一个MWOS项目 -Eclipse Lab:Eclipse Labs是一个基于Eclipse平台构建技术的开源项目社区。它提供开源项目通常需要的基础架构服务,如代码存储库,错误跟踪,项目网站/ wiki。 Ecipse Labs由GoogleCode Project Hosting托管,所以对于已经使用Google Code Project Hosting的开发人员来说,这将非常熟悉 -Bit Bucket:像GitHub一样,BitBucket也承载了公共和私人项目,在这个网站上,少于五个用户的开源项目和私人项目是免费的。它拥有超过48,000个存储库,其中许多存储库可在现场进行搜索site. -Media Wiki: MediaWiki是一款用PHP编写的免费软件开源维基软件包,最初用于维基百科。现在也被非营利维基媒体基金会和许多其他维基的其他项目使用,包括这个网站,MediaWiki的主 -Code Curiosity: CodeCuriosity是一个鼓励开放源代码的平台,无论项目是大还是小,每个人都为自己的努力而获得回报 - -Code Triage: 帮助完成您最喜欢的开源项目,并在开发过程中成为更好的开发人员lssue Hub:贡献于开源。搜索问题标签为您找到正确的项目 -Up for Grabs:这是一个专门为新贡献者策划的项目的列表。这些是开始使用项目的好方法,或是帮助分享开源项目的负担。 -First Timers Only: 首次对开放源码做出贡献可能是可怕的,有点压倒性。也许你是一个代码新手,或者你已经编码了一段时间,但还没有找到一个你觉得自己很有帮助的项目Your First PR:您的第一个公关帮助在GitHub和其他地方展示最佳启动器问题为开源做贡献 \ No newline at end of file diff --git "a/_posts/2024-03-15-\350\247\206\351\242\221\347\275\221\347\253\231.md" "b/_posts/2024-03-15-\350\247\206\351\242\221\347\275\221\347\253\231.md" deleted file mode 100644 index 516a0ad..0000000 --- "a/_posts/2024-03-15-\350\247\206\351\242\221\347\275\221\347\253\231.md" +++ /dev/null @@ -1,11 +0,0 @@ -MYSQL建表时需要注意的点: -+ 选择存储引擎,如果要支持事务需要选择InnoDB -+ 字段类型选择,对于日期类型如果记录时分秒使用datetime,记录年月日使用date类型,对于字符类型的选择,固定长度字段选择char,不固定长度的字段选择varchar,varchar比char节省空间,但速度没有char快,对于内容介绍类的长广文本字段,使用text或longtext类型,如果存储图片等二进制数据使用blob或longblob类型,对金额字段建议使用DECIMAL,对于数值类型的字段在确保取值范围足够的前提下尽量使用占用空间较小的类型 -+ 主键字段建议使用自然主键,不要有业务含义,建议使用int unsigned类型,特殊场景使用bigint类型 -+ 如果要存储text,blob字段建议单独建一张表,使用外键关联 -+ 尽量不要定义外键,保证表的独立性,可以存在外键意义的字段 -+ 设置字段默认值,比如:状态,创建时间等 -+ 每个字段写清楚注释 -+ 注意字段的约束,比如:非空、唯一、逐渐等 - - diff --git a/_posts/2024-04-07-Lucene.md b/_posts/2024-04-07-Lucene.md deleted file mode 100644 index 489f2e4..0000000 --- a/_posts/2024-04-07-Lucene.md +++ /dev/null @@ -1,5 +0,0 @@ -https://blog.51cto.com/sbp810050504/category6.html - -https://www.cnblogs.com/forfuture1978/archive/2010/06/13/1757479.html - -https://www.cnblogs.com/forfuture1978/p/3945755.html \ No newline at end of file diff --git "a/_posts/2024-05-29-\343\200\220TODO\343\200\221\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.md" "b/_posts/2024-05-29-\343\200\220TODO\343\200\221\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.md" new file mode 100644 index 0000000..61c6a82 --- /dev/null +++ "b/_posts/2024-05-29-\343\200\220TODO\343\200\221\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\347\256\227\346\263\225.md" @@ -0,0 +1 @@ +- [ ] 数据结构与算法 \ No newline at end of file diff --git "a/_posts/2024-05-29-\345\273\272\347\253\231\345\243\260\346\230\216\345\217\212\347\256\200\344\273\213.md" "b/_posts/2024-05-29-\345\273\272\347\253\231\345\243\260\346\230\216\345\217\212\347\256\200\344\273\213.md" new file mode 100644 index 0000000..3fc9048 --- /dev/null +++ "b/_posts/2024-05-29-\345\273\272\347\253\231\345\243\260\346\230\216\345\217\212\347\256\200\344\273\213.md" @@ -0,0 +1,10 @@ +# 建站声明及简介 +## 免责声明 +1. 本站提供的内容仅供学习参考,不得用于商业用途。 +2. 本站使用的前端由 [glodstine](https://github.com/goldstine/goldstine.github.io) 提供,在此致以最诚挚的感谢! +3. 如有侵权行为,相关问题请发送至邮箱:[485039784@qq.com](mailto:485039784@qq.com)。 +## 网站简介 + 建站初期目的有三: +- `学习资源转化`:本人从2018年入行,至今已数年之久,之前一直使用本地工具来记录学习笔记,由于笔记内容较多且没有他人关注,我很少会反复阅读、校验、改进笔记内容,实非学习的好方式。因此,出于**整理、校验既有笔记**和**将资源开放给大家共同学习**的目的,本人决定将笔记内容以博客形式发布,以方便大家学习、检错。 +- `保持持续学习的激情`:在二十多年的求学经历中,我深刻体会到兴趣和激情在推动持续学习过程中起到的重要作用。将既有资源公布于众,接受大家的检验和批评,能极大程度地激励本人的学习兴趣和激情,使我保持持续学习的激情。共勉! +- `锻炼写作能力`:本人语文一直较差,希望在编写博客的过程中能够锻炼语言组织能力和写作能力。 diff --git a/about.md b/about.md index 5aa4aba..b759950 100644 --- a/about.md +++ b/about.md @@ -5,45 +5,6 @@ permalink: /about/ --- ## 关于我 -你好,我是goldstine。 +你好,我是`dxl125890`,邮箱`485039784@qq.com` -初出茅庐的programmer、[知乎](https://www.zhihu.com/people/goldstine)潜水。 -[个人技术公众号](https://mp.weixin.qq.com/s?__biz=MzkwODI4ODQ0OA==&mid=2247484023&idx=1&sn=ac0cddc56b4cc939777e99a9e1dcc3dc&chksm=c0cd0ad8f7ba83cea1d6187a72b9bececb81be3349011cf621510ab7c5414549d1df2f853b61&token=2017477247&lang=zh_CN#rd)分享编程学习路线、编程学习资源,记录技术成长,欢迎扫码添加: - -![公众号二维码](https://cdn.jsdelivr.net/gh/goldstine/goldstine.github.io/images/weixin.jpg) - -``` -梦后楼台高锁,酒醒帘幕低垂 -去年春恨却来时 -落花人独立,微雨燕双飞 -记得小蘋初见,两重心字罗衣 -琵琶弦上说相思 -当时明月在,曾照彩云归 -``` -``` -沧桑之後 也许会有这样的回顾 -当你独自行走在人生的中途 -一切波涛都已被引进呆滞的河道 -山林易变 星光逐渐熄灭 -只留下完全黑暗的天空 -而我也被变造成 -与起始向你飞奔而来的那一个生命 -全然不同 -你流泪恍然於时日的递减 恍然於 -无论怎样天真狂野的心 -也终於会在韁绳之间裂成碎片 -沧桑之後 也许会有这样的回顾 -请别再去追溯是谁先开始命运屈服 -我只求你 在那一刻里静静站立 -在黑暗中把我重新想起 -想我曾经怎样狂喜地飞奔而来 -带著我所有的盼望所有的依赖 还有那 -生命中最早最早饱满如小白马般的快乐 -还有那失落了的山峦与草原 那一夜 -桐花初放 繁星满天 -``` - -## 版权声明 - -博客文章是我原创文章,存档于_posts 文件夹下,版权归我所有,转载请与我联系获得授权许可。 diff --git a/images/2019-11-22-create_blog_with_github_pages/PicGo.png b/images/2019-11-22-create_blog_with_github_pages/PicGo.png deleted file mode 100644 index dbe0cf9..0000000 Binary files a/images/2019-11-22-create_blog_with_github_pages/PicGo.png and /dev/null differ diff --git a/images/2019-11-22-create_blog_with_github_pages/blogPage.png b/images/2019-11-22-create_blog_with_github_pages/blogPage.png deleted file mode 100644 index 8048f83..0000000 Binary files a/images/2019-11-22-create_blog_with_github_pages/blogPage.png and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/config\346\226\207\344\273\266.png" "b/images/2019-11-22-create_blog_with_github_pages/config\346\226\207\344\273\266.png" deleted file mode 100644 index c97a517..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/config\346\226\207\344\273\266.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/fork\345\215\232\345\256\242.png" "b/images/2019-11-22-create_blog_with_github_pages/fork\345\215\232\345\256\242.png" deleted file mode 100644 index 9a76406..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/fork\345\215\232\345\256\242.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/google\345\210\206\346\236\220\351\241\265\351\235\242.png" "b/images/2019-11-22-create_blog_with_github_pages/google\345\210\206\346\236\220\351\241\265\351\235\242.png" deleted file mode 100644 index 5198692..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/google\345\210\206\346\236\220\351\241\265\351\235\242.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/google\347\253\231\351\225\277\347\273\237\350\256\241.png" "b/images/2019-11-22-create_blog_with_github_pages/google\347\253\231\351\225\277\347\273\237\350\256\241.png" deleted file mode 100644 index e32d7be..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/google\347\253\231\351\225\277\347\273\237\350\256\241.png" and /dev/null differ diff --git a/images/2019-11-22-create_blog_with_github_pages/jekyll_error.PNG b/images/2019-11-22-create_blog_with_github_pages/jekyll_error.PNG deleted file mode 100644 index c7c9f28..0000000 Binary files a/images/2019-11-22-create_blog_with_github_pages/jekyll_error.PNG and /dev/null differ diff --git a/images/2019-11-22-create_blog_with_github_pages/jekyll_error_EASSE.png b/images/2019-11-22-create_blog_with_github_pages/jekyll_error_EASSE.png deleted file mode 100644 index 1cacb5e..0000000 Binary files a/images/2019-11-22-create_blog_with_github_pages/jekyll_error_EASSE.png and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/jekyll_server_erro\351\224\231\350\257\2572.PNG" "b/images/2019-11-22-create_blog_with_github_pages/jekyll_server_erro\351\224\231\350\257\2572.PNG" deleted file mode 100644 index b156fc9..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/jekyll_server_erro\351\224\231\350\257\2572.PNG" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/jekyll_server\346\210\220\345\212\237.PNG" "b/images/2019-11-22-create_blog_with_github_pages/jekyll_server\346\210\220\345\212\237.PNG" deleted file mode 100644 index 9975754..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/jekyll_server\346\210\220\345\212\237.PNG" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/jekyll\345\256\211\350\243\205.PNG" "b/images/2019-11-22-create_blog_with_github_pages/jekyll\345\256\211\350\243\205.PNG" deleted file mode 100644 index 4a67331..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/jekyll\345\256\211\350\243\205.PNG" and /dev/null differ diff --git a/images/2019-11-22-create_blog_with_github_pages/search_block.png b/images/2019-11-22-create_blog_with_github_pages/search_block.png deleted file mode 100644 index 73e3d9c..0000000 Binary files a/images/2019-11-22-create_blog_with_github_pages/search_block.png and /dev/null differ diff --git a/images/2019-11-22-create_blog_with_github_pages/zhihuSvg.png b/images/2019-11-22-create_blog_with_github_pages/zhihuSvg.png deleted file mode 100644 index df51503..0000000 Binary files a/images/2019-11-22-create_blog_with_github_pages/zhihuSvg.png and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\344\273\273\345\212\241\347\256\241\347\220\206\345\231\250.png" "b/images/2019-11-22-create_blog_with_github_pages/\344\273\273\345\212\241\347\256\241\347\220\206\345\231\250.png" deleted file mode 100644 index 19bf0c7..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\344\273\273\345\212\241\347\256\241\347\220\206\345\231\250.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\344\277\256\346\224\271\344\273\223\345\272\223\345\220\215\347\247\260.png" "b/images/2019-11-22-create_blog_with_github_pages/\344\277\256\346\224\271\344\273\223\345\272\223\345\220\215\347\247\260.png" deleted file mode 100644 index 9a496e1..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\344\277\256\346\224\271\344\273\223\345\272\223\345\220\215\347\247\260.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\345\210\233\345\273\272gitalk\351\211\264\346\235\203app.png" "b/images/2019-11-22-create_blog_with_github_pages/\345\210\233\345\273\272gitalk\351\211\264\346\235\203app.png" deleted file mode 100644 index e7d953a..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\345\210\233\345\273\272gitalk\351\211\264\346\235\203app.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\345\256\211\350\243\205ruby.PNG" "b/images/2019-11-22-create_blog_with_github_pages/\345\256\211\350\243\205ruby.PNG" deleted file mode 100644 index cf4d6ec..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\345\256\211\350\243\205ruby.PNG" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\346\233\264\346\224\271\345\220\215\347\247\260.png" "b/images/2019-11-22-create_blog_with_github_pages/\346\233\264\346\224\271\345\220\215\347\247\260.png" deleted file mode 100644 index 0243773..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\346\233\264\346\224\271\345\220\215\347\247\260.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\346\233\264\346\224\271\347\244\276\344\272\244\351\223\276\346\216\245.png" "b/images/2019-11-22-create_blog_with_github_pages/\346\233\264\346\224\271\347\244\276\344\272\244\351\223\276\346\216\245.png" deleted file mode 100644 index af82ddb..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\346\233\264\346\224\271\347\244\276\344\272\244\351\223\276\346\216\245.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\346\237\245\347\234\213netstat.png" "b/images/2019-11-22-create_blog_with_github_pages/\346\237\245\347\234\213netstat.png" deleted file mode 100644 index b448df0..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\346\237\245\347\234\213netstat.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\351\205\215\347\275\256gittalk.png" "b/images/2019-11-22-create_blog_with_github_pages/\351\205\215\347\275\256gittalk.png" deleted file mode 100644 index 65c993a..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\351\205\215\347\275\256gittalk.png" and /dev/null differ diff --git "a/images/2019-11-22-create_blog_with_github_pages/\351\205\215\347\275\256\346\217\220\344\272\244.png" "b/images/2019-11-22-create_blog_with_github_pages/\351\205\215\347\275\256\346\217\220\344\272\244.png" deleted file mode 100644 index b03b6cd..0000000 Binary files "a/images/2019-11-22-create_blog_with_github_pages/\351\205\215\347\275\256\346\217\220\344\272\244.png" and /dev/null differ diff --git a/images/favicon.ico b/images/favicon.ico index 3bd0bda..a0ae378 100644 Binary files a/images/favicon.ico and b/images/favicon.ico differ diff --git a/images/weixin.jpg b/images/weixin.jpg deleted file mode 100644 index 10438b1..0000000 Binary files a/images/weixin.jpg and /dev/null differ diff --git "a/images/\344\270\213\346\254\241\344\270\200\345\256\232\350\241\250\346\203\205\345\256\235.gif" "b/images/\344\270\213\346\254\241\344\270\200\345\256\232\350\241\250\346\203\205\345\256\235.gif" deleted file mode 100644 index de87718..0000000 Binary files "a/images/\344\270\213\346\254\241\344\270\200\345\256\232\350\241\250\346\203\205\345\256\235.gif" and /dev/null differ diff --git "a/images/\345\205\254\344\274\227\345\217\267.png" "b/images/\345\205\254\344\274\227\345\217\267.png" deleted file mode 100644 index e14a6fc..0000000 Binary files "a/images/\345\205\254\344\274\227\345\217\267.png" and /dev/null differ diff --git "a/images/\346\211\253\347\240\201\345\205\263\346\263\250.png" "b/images/\346\211\253\347\240\201\345\205\263\346\263\250.png" deleted file mode 100644 index 4ab916d..0000000 Binary files "a/images/\346\211\253\347\240\201\345\205\263\346\263\250.png" and /dev/null differ