diff --git a/README.md b/README.md index d0bba24f..139597f9 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,2 @@ -这是一个可 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 b5d0e953..7087d0c0 100644 --- a/_config.yml +++ b/_config.yml @@ -3,39 +3,33 @@ # # Name of your site (displayed in the header) -name: "goldstine's blog" +name: "Andres Blog" # Short bio or description (displayed in the header) -description: "个人技术公众号:Goldstine 分享编程资源 | 学习路线" +description: "Sharing My Points" # # 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/LionelJiang/LionelJiang.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/LionelJiang/LionelJiang.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 # it from the list(Delete '- name: ' and 'url: ', too!) navigation: - - name: 首页 + - name: FrontPage url: / - - name: 关于 + - name: My Resume url: /about - - name: 归档 + - name: Archive url: /archive - - name: 标签 - url: /tags - - name: Img - url: /photos - - name: Music - url: /music - - name: Video - url: /video - - name: 导航 - url: /navigation + #- name: Tags + # url: /tags + #- name: Photos + # url: /photos # Pagination paginate: 8 @@ -45,25 +39,25 @@ excerpt_separator: # Includes an icon in the footer for each username you enter footer-links: #weibo: frommidworld #请输入你的微博个性域名 https://www.weibo.com/ - behance: # https://www.behance.net/ - dribbble: - zhihu: goldstine - email: 15797899690@163.com - facebook: - flickr: - github: goldstine - googleplus: # anything in your profile username that comes after plus.google.com/ - instagram: - linkedin: - pinterest: - rss: # just type anything here for a working RSS icon - stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers" - tumblr: # https://.tumblr.com + #behance: # https://www.behance.net/ + #dribbble: + #zhihu: LionelJiang + email: jiangjinhan0708@gmail.com + #facebook: + #flickr: + github: LionelJiang + #googleplus: # anything in your profile username that comes after plus.google.com/ + #instagram: + linkedin: https://www.linkedin.com/in/andres-jinhan-jiang-a96578212/ + #pinterest: + #rss: # just type anything here for a working RSS icon + #stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers" + #tumblr: # https://.tumblr.com #twitter: frommidworld - youtube: + #$youtube: # Text under the icons in footer -footer-text: Copyright (c) 2023 goldstine +footer-text: Copyright (c) 2023 AndresJiang # 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 @@ -73,15 +67,15 @@ disqus: # fromendworld gitalk: clientID: 062eeb9a0adf39976274 clientSecret: 3c319e4cf4a90b70809d7fd1b25e4c6c10376a10 - repo: goldstine.github.io - owner: goldstine + repo: LionelJiang.github.io + owner: LionelJiang # 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://LionelJiang.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 0f302ade..00000000 --- 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 3df5d390..00000000 --- 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 14a18964..00000000 --- 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 6716bb25..00000000 --- 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 b459838e..00000000 --- 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 9d982ea9..00000000 --- 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 bd168f60..00000000 --- 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 1ac294b2..00000000 --- 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 e7dcabcc..00000000 --- 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 1ea69332..00000000 --- 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 9e040ccf..00000000 --- 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 16402e80..00000000 --- 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 49145107..00000000 --- "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 4a2d2787..00000000 --- "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 9b505aa5..00000000 --- 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 5cc5c87c..00000000 --- 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 fcd9bd2e..00000000 --- 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 9e6a1c45..00000000 --- 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-12-10-Human Information Processing.md b/_posts/2023-12-10-Human Information Processing.md new file mode 100644 index 00000000..deac2ad7 --- /dev/null +++ b/_posts/2023-12-10-Human Information Processing.md @@ -0,0 +1,167 @@ + +# Problems in the interaction between humans and car-machine systems +### Introduction +With the increasing integration of technology in modern vehicles, it is critical to understand and solve the information processing problems that arise during the interaction between humans and vehicle systems. Successfully integrating autonomous vehicles into transportation systems requires addressing several challenges, including the design of effective human-machine interface (HMI) systems. This literature review will explore the current state of research on HMI design for autonomous vehicles, identify issues and challenges, and propose potential solutions. + + + +--- +### Part 1: Literature Review and Identify Problems + +#### 1.1 Literature review +The development of automated cars has been a topic of interest for researchers and engineers for several decades. The potential benefits of automated cars include increased safety, reduced traffic congestion, and improved fuel efficiency. However, the successful integration of automated cars into the transportation system requires addressing several challenges, including the design of effective Human Machine Interface (HMI) systems. + +Several studies have investigated the design of HMI systems for automated cars. One study by Carsten and Hagenzieker (2019) proposed design principles for in-vehicle HMI systems, including the need for clear and concise information, intuitive interfaces, and effective communication between the driver and the automated system. Another study by Stanton et al. (2018) highlighted the importance of designing HMI systems that are adaptable to different driving scenarios and driver preferences. + +Despite the progress made in HMI design for automated cars, several challenges remain. One challenge is the potential for driver disengagement from the driving task. Automated cars may lead to a false sense of security, causing drivers to become complacent and less attentive to the road. This problem is compounded by the fact that automated cars may require drivers to take over control of the vehicle in certain situations, such as when the automated system encounters an unexpected obstacle. + + +#### 1.2 Problems +Based on the literature review, several problems can be identified in the design of HMI systems for automated cars. These problems include: +1. Driver disengagement from the driving task due to a false sense of security provided by the automated system. +2. Driver confusion and misunderstanding of the automated system due to non-standardized interfaces and symbols. +3. The potential for drivers to become overwhelmed by the amount of information presented by the HMI system. +4. The need for HMI systems to be adaptable to different driving scenarios and driver preferences. +5. The potential for drivers to become complacent and less attentive to the road, leading to safety concerns. +Addressing these problems will require further research and development in the design of HMI systems for automated cars. Standardization of interfaces and symbols, as well as the development of adaptable and intuitive HMI systems, will be crucial in ensuring the safe and effective integration of automated. + + +--- +### Part 2: Design Implications for Resolving the Phenomenon + +#### 2.1 Solving these problems --- Standardized HMI designing. +One design implication to solve the problem of driver confusion and misunderstanding of automated systems due to non-standardized interfaces and symbols is to implement a standardized HMI design framework. The framework will establish guidelines for the design of HMI systems for autonomous vehicles, including the use of standardized symbols and interfaces. The framework will be developed through collaboration between industry stakeholders including automakers, technology companies and regulators. + +Driver confusion and misunderstanding of automated systems due to non-standardized interfaces and symbols is a significant issue in autonomous vehicle development. Self-driving cars may use different symbols and interfaces than traditional cars, causing driver confusion and frustration. Additionally, a lack of standardization in HMI design for autonomous vehicles could lead to a proliferation of different approaches, further complicating drivers’ understanding of the system. A standardized HMI design framework will address this issue by establishing design guidelines for autonomous automotive HMI systems. + +A standardized HMI design framework will establish guidelines for the design of HMI systems for autonomous vehicles. The framework will include guidelines for the use of standardized symbols and interfaces, as well as guidelines for the layout and organization of information displayed by HMIs. The framework will be developed through collaboration between industry stakeholders including automakers, technology companies and regulators. + +A standardized HMI design framework will include guidelines for the use of standardized symbols and interfaces. These guidelines will ensure that the symbols and interfaces used in autonomous vehicle HMI systems are consistent across different models and manufacturers. This will help reduce driver confusion and frustration and improve their understanding of automated systems. + +A standardized HMI design framework will also include guidelines for the layout and organization of HMI display information. These guidelines will ensure that information provided to drivers is clear, concise, and easy to understand. The layout and organization of information is designed to minimize the driver's cognitive load and enhance their cognitive abilities. + + +#### 2.2 Use of Figures and Demonstrations +To demonstrate the importance of standardized HMI design, Figure 1 provides a simplified model of the most important concepts. The figure shows that if the reliability of technical systems increases, it benefits both comfort and trust, both of which increase. However, response times also increase, and automation introduces surprises, all with potential negative security impacts. Note that as system reliability increases, automation surprises will occur less frequently, but the impact will be more severe when they occur. Situational awareness and vigilance (attention) are reduced, as is trust calibration. + +Figure 1 highlights the importance of balancing technical system reliability with human factors issues such as negligence and trust. The figure shows that increasing system reliability can increase comfort and trust, but can also lead to negative security impacts, such as increased response times and automation surprises. This demonstrates the need for a standardized HMI design framework that considers both technical and human factors to ensure safe and effective collaboration between human drivers and autonomous vehicles. + +In summary, using graphics and demonstrations is an effective way to illustrate the importance of standardized HMI design for safe and effective collaboration between human drivers and autonomous vehicles. Figures 1 illustrates the need for a standardized HMI design framework that considers technical and human factors and establishes usage guidelines for symbols and interfaces to ensure driver consistency and clarity. + +#### 2.3 A New Direction – Minimalist Design +According to Julia Kindelsberger, Lex Fridman, Michael Glazer &Bryan Reimer (2018), minimalist design is a design approach that starts from the ground up, adding only the absolute minimum necessary to create a safe and enjoyable driving experience. The authors propose that this approach can create a more spacious and elegant interior while still providing the driver with necessary information. + +To achieve a minimalist design of a vehicle HMI, this article proposes a design decision-making process that begins with asking “why?” rather than “why not?” when selecting what information to add to the vehicle HMI. The authors believe that this approach can help designers avoid adding unnecessary information and instead focus on the absolute minimum required to create a safe and enjoyable driving experience. + +The paper also proposes a fully software-controlled HMI, giving automotive engineers and designers the power and freedom to continuously innovate. The authors believe that continuous data collection can enable personalized vehicle customization based on driver-specific behavioral information collected in the vehicle. + +Overall, the minimalist design of the vehicle HMI results in a safe, beautiful, and satisfying driving experience. By starting from scratch and adding only the absolute minimum necessary to create a safe and enjoyable driving experience, designers can avoid overwhelming the driver with unnecessary information. +#### 2.4 HMI Design Principles +![](https://star.global/_next/image/?url=https%3A%2F%2Fcms.star.global%2Fwp-content%2Fuploads%2F2022%2F05%2FHMI-design-best-practices-EN.jpeg&w=2048&q=75) +>HMI design steps and best practices + +##### 2.4.1.Reduce visual load +The process of users identifying and searching for information on the screen is considered visual load. Drivers often use HMI while driving. User attention management is very necessary to reduce traffic accidents caused by distraction. Therefore, it is particularly important to quickly identify and find the content the user wants. We can reduce the operating load by Follow a few principles. + +**Efficient browsing:** When setting information levels, drivers can set information more quickly. This can be achieved through contrasting design techniques to ensure that drivers can have efficient browsing while driving and reduce driver safety. visual capture cost + +**3-second principle:** User attention management is very necessary to reduce traffic accidents caused by distraction. During driving, necessary operations need to follow the 3-second principle. Users must find the key information and function entrances of the application scenario within the first second. , then perform interactive actions in the 2nd second, and finally get the desired information result in the 3rd second. Accurately grasp the time in each process, eliminate interference from unnecessary elements, and avoid distracting attention. + +**Information visualization principles:** The practice of presenting data in an intuitive way with clear meaning, making it interpretable and easy for users to understand. This includes data visualization and dashboards. For non-experts, information visualization is an effective way to share insights in an easy-to-understand form. + +##### 2.4.2 Reduce operating load +When driving, the driver should try to keep the operation path as short as possible. If the operation is too complicated and there are too many steps, he may give up midway. This is the impact of action load. + +**Quick response:** Drivers often perform interface operations during driving. For the safety of drivers, operations should be easier, such as prominently used functions and short operation paths. + +**Timely feedback:** In actual driving scenarios, we are faced with complex road condition information, which needs to be immediately fed back to our drivers through vision, design, sound, etc. + +**Silent interaction:** Silent interaction is quietly integrated into our daily use, without much thinking or special attention. As a tool, the car and engine should not become the center of attention of the driver and steal his attention. In future designs, allowing users to focus on “tasks” rather than tools is the ultimate destination of in-vehicle HMI interaction. + +**Voice interaction:** Voice interaction can quickly find the content the user wants, avoid driving distractions, and make driving safer. Currently, most car machines are equipped with voice assistants, which have become a standard feature of car machines. + +##### 2.4.3 Reduce psychological load +The psychological pressure that users experience due to certain reasons when processing tasks is called psychological load. Mental load will prevent users from successfully completing tasks, so reducing mental load can improve task completion rates. + +**Reduce user anxiety:** Common methods for relieving anxiety on mobile phones include loading progress feedback, the number of people waiting in line... In driving scenarios, for example, when users have driving problems or major accidents occur, the system should provide encouragement and solutions to alleviate user anxiety. + +#### 2.5 New HMI Solution +1.Design a simple and intuitive interface with a standardized user interaction model to reduce the potential for driver distraction. + +2.Emphasize the development of shared HMI rules to resolve confusion caused by different solutions on the market and promote standardized design. + +3.Adopt dark mode. According to research, dark UI is more suitable in automotive environments. + +4.Integrate brand cultural elements to ensure that HMI design is integrated with the car brand, strengthen the brand image, and make HMI the key to vehicle software solutions. + +5.Emphasizing that HMI is not just an attraction, but one of the key elements of the entire vehicle software solution, builds trust between the system and the driver, and adopts HMI human-computer interaction design to ensure a more effective interactive experience in the automotive environment. + +We can get a solution just like the following picture.In this solution, its overall design complies with all the above HMI design guidelines. First, in terms of design elements, it has been extremely simplified while being as functionally complete as possible. We can see that the column on the left is the function bar of the car, including driving status, navigation, music, car settings and home page. The column below is the air-conditioning settings. Five buttons and two draggable bars can meet the most basic air-conditioning use. Then, we adopted dark mode to complete the HMI design. On the homepage, we have maintained the consistency of the overall style, whether it is the size of each component or the rounded corners and shadow design. + +![](hmi.png) + +--- +### Part 3: Evaluation Plan and Expected Results + +#### 3.1 Evaluation Plan +To solve the problem of driver confusion and misunderstanding of automated systems due to non-standardized interfaces and symbols, our proposed solution is to implement a standardized HMI design framework. This framework will establish guidelines for the design of HMI systems for autonomous vehicles, including the use of standardized symbols and interfaces. + +To evaluate the effectiveness of the solution, we can develop a test and evaluation plan. The program will involve conducting user studies to assess the usability and effectiveness of a standardized HMI design framework and will involve a sample of drivers with experience in both conventional and autonomous vehicles. + +Additionally, the study will be conducted in a controlled environment (such as a driving simulator) to ensure participant safety. Participants will be asked to perform a series of tasks using the HMI system of an autonomous vehicle. These tasks are designed to test the usability and effectiveness of a standardized HMI design framework. + +Several variables will be the focus of this study, including the time required to complete the task, the number of errors made, and participants' subjective ratings of the usability and effectiveness of the automotive HMI system. The data collected after the survey will be analyzed using scientific statistical methods to determine the effectiveness of the standardized HMI design framework. + +#### 3.2 Expected Results +The standardized framework aims to enhance the usability and effectiveness of autonomous automotive HMIs by reducing confusion and frustration through standardized symbols. The organized information layout minimizes cognitive load, improving drivers' ability to monitor automated systems. + +The study's insights into specific aspects of the standardized framework's effectiveness will inform refinements, enhancing overall efficacy. + +In summary, the proposed standardized HMI design framework holds promise in mitigating driver confusion in automated systems. The test and evaluation program anticipates providing valuable insights, fostering safer and more efficient collaboration between human drivers and autonomous vehicles. + +--- +### Related Videos + + + + --- +### References + +[Strayer, D. L., Cooper, J. M., Goethe, R. M., McCarty, M. M., Getty, D. J., & Biondi, F. Assessing the visual and cognitive demands of in-vehicle information systems](https://psycnet.apa.org/record/2019-37965-001). + +[Carsten, O., & Martens, M. H. How can humans understand their automated cars? HMI principles, problems, and solutions](https://link.springer.com/article/10.1007/s10111-018-0484-0). + +[Kindelsberger, J., Fridman, L., Glazer, M., & Reimer, B. (2018). Designing Toward Minimalism in Vehicle HMI](https://arxiv.org/abs/1805.02787). + +[Castro, S., Cooper, J., & Strayer, D. (2016). Validating two assessment strategies for visual and cognitive load in a simulated driving task](https://www.researchgate.net/publication/307946282_Validating_Two_Assessment_Strategies_for_Visual_and_Cognitive_Load_in_a_Simulated_Driving_Task). + +[Engström, J., & Markkula, G. (2007). Effects of visual and cognitive distraction on lane change test performance](https://pubs.lib.uiowa.edu/driving/article/id/28286/). + +[Japan Automobile Manufacturers Association (2004). Guideline for In-Vehicle Display Systems, Version 3.0](https://www.jama.or.jp/operation/safety/display_system/pdf/jama_guidelines_v30_en.pdf). + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_posts/hmi.png b/_posts/hmi.png new file mode 100644 index 00000000..6bd426bf Binary files /dev/null and b/_posts/hmi.png differ diff --git a/about.md b/about.md index 5aa4aba2..3ccc6378 100644 --- a/about.md +++ b/about.md @@ -4,46 +4,7 @@ title: About permalink: /about/ --- -## 关于我 -你好,我是goldstine。 +## My Resume -初出茅庐的programmer、[知乎](https://www.zhihu.com/people/goldstine)潜水。 +![Alt text](image-5.png) -[个人技术公众号](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/archive/index.html b/archive/index.html index cbe467fe..9bc66ffe 100644 --- a/archive/index.html +++ b/archive/index.html @@ -1,6 +1,6 @@ --- layout: page -title: 归档 +title: Archive permalink: /archive/ --- diff --git a/goldstinepages/index.html b/goldstinepages/index.html deleted file mode 100644 index 3c9f9910..00000000 --- a/goldstinepages/index.html +++ /dev/null @@ -1,54 +0,0 @@ ---- -layout: page -title: Photo-Wall -permalink: /photos/ ---- - -
    -

    R

    - -
    -

    markdown开源编辑工具

    - Editor.md -
    - - - -
    -
    front
    -
    back
    -
    left
    -
    right
    -
    top
    -
    bottom
    - -
    front
    -
    back
    -
    left
    -
    right
    -
    top
    -
    bottom
    -
    - - - -
    \ No newline at end of file diff --git a/goldstinepages/music.html b/goldstinepages/music.html deleted file mode 100644 index 14a8a3b5..00000000 --- a/goldstinepages/music.html +++ /dev/null @@ -1,576 +0,0 @@ ---- -layout: page -title: Photo-Wall -permalink: /music/ ---- - -
    -

    网易云推荐

    - -
    - -

    Palyer

    - - - - - - -
    -
    -
    -

    播放器

    -
    -
    -
    -
    -
    - -
    -

    0:00

    -
    -
    - -
    -
    -

    0:00

    -
    -
    - - - - - diff --git a/goldstinepages/navigation.html b/goldstinepages/navigation.html deleted file mode 100644 index 7c740ef5..00000000 --- a/goldstinepages/navigation.html +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: page -title: Photot-Wall -permalink: /navigation/ ---- - -
    -

    markdown开源编辑工具

    - Editor.md -
    \ No newline at end of file diff --git a/goldstinepages/video.html b/goldstinepages/video.html deleted file mode 100644 index 9b4250d8..00000000 --- a/goldstinepages/video.html +++ /dev/null @@ -1,5941 +0,0 @@ ---- -layout: page -title: Photo-Wall -permalink: /video/ ---- - - - - - - - - - - - - - - - - - - - diff --git a/goldstinepages/videoWeb.html b/goldstinepages/videoWeb.html deleted file mode 100644 index 19fd8d89..00000000 --- a/goldstinepages/videoWeb.html +++ /dev/null @@ -1,8457 +0,0 @@ ---- -layout: page -title: Photo-Wall -permalink: /videoWeb/ ---- - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - -
    -
    -

    同步剧场

    - -
    -
    -
    - - -
    - 乡村爱情9(上)[会员看全集] 全30集
    - 爱不释手!王大拿喜获"狗儿子" -
    - -
    -
    -
    - 乡村爱情9(上)
    - 全30集 VIP看全集
    - 喜剧·农村 赵本山/毕畅/贺树峰/唐鉴军
    - 立即播放 - - - 小伟 - 上部看完了 不错 不过建议再拍续集的时候 把李大国 马忠 香秀 三角戏去掉 看... -
    -
    -
    -
    - -
    -
    -
    - - - -
    -
    -

    大唐荣耀专区

    - OPPO专区 -
    -
    - -
    -
    - - - - - - - -
    - -
    -
    - - -
    - 触不到的TA 2017-02-07 期
    - 撒贝宁又接个诈骗电话,天上掉下个“女儿” -
    - -
    -
    -
    - 触不到的TA
    - 每周二 20:00更新
    - 真人秀-明星 撒贝宁
    - 立即播放 - - - .①≯苆縱來 - 那个女孩一眼就看出是张子枫了[偷笑]不管是不是模仿韩国的看着乐呵乐呵就行... -
    -
    -
    -
    - -
    -
    -
    - - - -
    - - - -
    - - - -
    - -
    -
    - -
    -
    -
    - - - - - - - -
    - -
    - -
    -
    - - - - - - - -
    - -
    - -
    -
    - - - -
    - - - - -
    - - - -
    -
    -

    美剧英剧

    - 2016年美剧抢先看 -
    -
    -
    - - -
    - 西部世界·更新 更新至07集
    - 机械姬镭射眼虐恋情深 -
    - -
    -
    -
    - 西部世界 第一季
    - 更新至07集 每周二更新,会员全集
    - 科幻·剧情 埃文·蕾切尔·伍德
    - 立即播放 - -
    -
    -
    -
    - -
    -
    -
    - - - -
    -
    -

    韩剧

    - 泡菜爱上Wasabi -
    -
    -
    - - -
    - 明星伙伴[全集限免]
    - 李光洙徐康俊勇闯娱乐圈 -
    - -
    -
    -
    - 明星伙伴
    - 喜剧·剧情 徐康俊/李光洙/赵震雄/宋智孝
    - 立即播放 - -
    -
    -
    -
    - -
    -
    -
    - - - -
    -
    -

    动漫精选

    - -
    -
    -
    - - -
    - 斗破苍穹 更新至06集
    - 红颜知己雅妃上线,萧炎大展炼药术 -
    - -
    -
    -
    - 斗破苍穹
    - 14-18岁
    - 玄幻·内地
    - 立即播放 - - - 信念这东西,难说难做 - 高中追斗破小说,每天两章。现在出了动漫了,我很感谢出版方和制作方。这部... -
    -
    -
    -
    - -
    -
    -
    - - - -
    - -
    -
    - -
    -
    -
    - - - - - - - -
    -
    -

    网络电影专区

    - “青梦时代”导演扶植计划 -
    -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    -
    -

    NBA专区

    - -
    -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - - - - - -
    - -
    - -
    - - - -
    - -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    -
    -

    汽车资讯

    - -
    -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    -
    -

    品牌专区

    - 情迷蒂芙尼 -
    -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    - -
    - -
    -
    - - - -
    -
    -

    精品课堂

    - -
    -
    - -
    -
    - - - -
    - - -
    - -
    -
    - - - -
    -
    -
    -

    热门频道

    - -
    -
    -

    特色推荐

    - -
    -
    -

    软件下载

    - -
    -
    -

    服务

    - -
    -
    -
    - -
    - Copyright © 1998 - 2017 Tencent. All Rights Reserved. -
    - -
    -
    - - - - - - diff --git a/image-1.png b/image-1.png new file mode 100644 index 00000000..be6db50b Binary files /dev/null and b/image-1.png differ diff --git a/image-2.png b/image-2.png new file mode 100644 index 00000000..0c212e2c Binary files /dev/null and b/image-2.png differ diff --git a/image-3.png b/image-3.png new file mode 100644 index 00000000..9d342440 Binary files /dev/null and b/image-3.png differ diff --git a/image-4.png b/image-4.png new file mode 100644 index 00000000..07e39f37 Binary files /dev/null and b/image-4.png differ diff --git a/image-5.png b/image-5.png new file mode 100644 index 00000000..be6db50b Binary files /dev/null and b/image-5.png differ diff --git a/image.png b/image.png new file mode 100644 index 00000000..be6db50b Binary files /dev/null and b/image.png differ diff --git a/index.html b/index.html index e0e6c1fe..309b4c27 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,6 @@
    - 菜单页布局
    - -
    {% endif %} {% if paginator.next_page %} {% endif %}
    - - - -
    - - View: - - - - User: - -
    \ No newline at end of file +