├── Blog ├── .gitignore ├── docs │ └── theme-reco │ │ ├── api.md │ │ ├── theme.md │ │ ├── plugin.md │ │ └── README.md ├── .vuepress │ └── public │ │ ├── head.ico │ │ ├── head.jpg │ │ ├── hero.png │ │ ├── logo.png │ │ ├── note.jpg │ │ ├── avatar.png │ │ ├── favicon.ico │ │ ├── 3e8826961ed690193a3fb720fee6bac.jpg │ │ ├── 5f1a222c19115dc4b0f411ac0dff72b.jpg │ │ └── 9bc0746b784d049483e300cd771ab87.jpg ├── blogs │ └── 2022 │ │ ├── ElasticSearch │ │ ├── assets │ │ │ ├── image-20201115230147799.png │ │ │ ├── image-20201115230900504.png │ │ │ ├── image-20210109105135812.png │ │ │ ├── image-20210506101053676.png │ │ │ ├── image-20210506102630393.png │ │ │ ├── image-20210506110249144.png │ │ │ ├── image-20210506110704293.png │ │ │ ├── image-20210506112225508.png │ │ │ └── image-20210510165308064.png │ │ ├── Ch02_CRUD.md │ │ └── Ch00_Intro.md │ │ ├── AITools │ │ ├── Ch01_AISong.md │ │ └── Ch00_AIPainting.md │ │ ├── JS │ │ ├── Ch04_BOM.md │ │ ├── Ch03_PreParse.md │ │ ├── Ch09_Date.md │ │ ├── Ch08_Regex.md │ │ ├── Ch06_css.md │ │ ├── Ch10_CommonMethods.md │ │ ├── Ch01_Event.md │ │ ├── Ch02_Class.md │ │ └── Ch05_BasicDataType.md │ │ ├── markdown.md │ │ ├── Model_Driven_Software_Development │ │ ├── Ch04_Concrete_Syntex.md │ │ ├── Task_one.md │ │ ├── Ch03_MetaModel.md │ │ └── Ch01_Introduction.md │ │ ├── LLM │ │ ├── Ch00_FineTuneLLMs.md │ │ └── Ch01_Chainlit.md │ │ ├── Jenkins │ │ ├── Ch02_Basic.md │ │ ├── Ch03_Gitee.md │ │ └── Ch01_Intro.md │ │ ├── JavaWeb │ │ ├── Ch05_listener.md │ │ ├── Ch00_CreateProject.md │ │ ├── Ch06_Servlet.md │ │ ├── Ch02_Response.md │ │ └── Ch07_File.md │ │ ├── SpringSecurity │ │ └── Ch00_intro.md │ │ ├── Go │ │ ├── Ch06_Popular_Components.md │ │ ├── Ch00_Install.md │ │ └── Ch09_GoLinux.md │ │ ├── Java_basic │ │ ├── Ch02_JavaWeb_basic_structure.md │ │ ├── Ch03_DesignPatten.md │ │ ├── Ch05_Enum.md │ │ ├── Ch07_File.md │ │ ├── Ch08_Exception.md │ │ ├── Ch11_Dynamic.md │ │ ├── Ch09_Stream.md │ │ ├── Ch01_JVM_basic.md │ │ ├── Ch04_Generic.md │ │ └── Ch10_Reflection.md │ │ ├── SpringBoot │ │ ├── Ch09_Notes.md │ │ ├── Ch04_ImportResource.md │ │ ├── Ch03_Conditional.md │ │ ├── Ch05_ConfigureProperties.md │ │ ├── Ch07_Yaml.md │ │ ├── Ch06_NewProject.md │ │ └── Ch00_HelloWorld.md │ │ ├── HuggingFace │ │ ├── Ch03_Notes.md │ │ ├── Ch04_Tools.md │ │ ├── Ch01_Env.md │ │ └── Ch00_Basic.md │ │ ├── react_chat │ │ └── Ch00_intro.md │ │ ├── PHP │ │ ├── Ch01_Regex.md │ │ └── Ch02_Form.md │ │ ├── Spring │ │ ├── Ch04_Transaction.md │ │ ├── Ch00_CreateProject.md │ │ └── Ch02_Annotation.md │ │ ├── mybatis │ │ ├── Ch03_Object.md │ │ ├── Ch05_Config.md │ │ ├── Ch02_Transaction.md │ │ └── Ch00_record.md │ │ ├── DataStructure │ │ ├── Ch01_Linear_structure.md │ │ ├── Ch05_Stack.md │ │ ├── Ch04_Time_Complexity.md │ │ ├── Ch09_Summary.md │ │ └── Ch11_JavaBased.md │ │ ├── Flink │ │ ├── Ch07_DataFlow.md │ │ ├── Ch08_DataType.md │ │ ├── Ch03_Deploy.md │ │ ├── Ch02_Introduction.md │ │ ├── Ch15_Consistancy.md │ │ ├── Ch01_Traditional.md │ │ ├── Ch14_FaultTorlance.md │ │ ├── Ch09_Sink.md │ │ ├── Ch12_State.md │ │ ├── Ch10_Streaming.md │ │ ├── Ch17_RunningTime.md │ │ └── Ch19_WaterMark.md │ │ ├── Android │ │ └── Ch02_WebView.md │ │ ├── OS │ │ ├── Ch17_ROS.md │ │ ├── Lab_02.md │ │ ├── Ch16_VM.md │ │ ├── Ch12_GFS.md │ │ ├── Lab_01.md │ │ ├── Ch11_File.md │ │ ├── Ch13_IO.md │ │ ├── Ch14_Protection.md │ │ └── Lab_00.md │ │ ├── XML │ │ ├── Ch01_SAX.md │ │ ├── Ch03_DTD.md │ │ └── Ch02_XPATH.md │ │ ├── Java │ │ ├── Ch07_Callback.md │ │ ├── Ch02_Shortcut.md │ │ ├── Ch03_JavaDS.md │ │ ├── Ch05_C3p0.md │ │ └── Ch04_CommonObject.md │ │ ├── RabbitMQ │ │ ├── Ch00_Intro.md │ │ └── Ch02_MQ.md │ │ ├── Nodejs │ │ └── Ch01_Introduction.md │ │ ├── SuperSet │ │ └── SuperSet_build.md │ │ ├── Redis │ │ ├── Ch01_Conclusion.md │ │ └── Ch02_Application.md │ │ ├── MySQL │ │ ├── Ch03_Advanced.md │ │ ├── Ch01_Basic.md │ │ └── Ch00_Index.md │ │ ├── solr │ │ ├── Ch03_Useage.md │ │ ├── Ch02_start2.md │ │ └── Ch01_start.md │ │ ├── DistributedSystem │ │ ├── Ch07_Time.md │ │ ├── Ch06_Interprocess.md │ │ └── Ch02_Bully.md │ │ ├── Data_warehouse │ │ ├── Ch08_Advanced_topics.md │ │ └── Ch01_Data_warehouse_Architecture.md │ │ ├── MongoDB │ │ └── Ch01_Deployment.md │ │ ├── SpringCloud │ │ ├── Ch01_MicroService_basics.md │ │ ├── Ch02_service_split.md │ │ └── Ch08_Feign_basic.md │ │ ├── Kubernetes │ │ ├── Ch26_Advanced.md │ │ ├── Ch29_Job.md │ │ ├── Ch19_UseDashboard.md │ │ ├── Ch20_Helm.md │ │ └── Ch22_NFS.md │ │ ├── Gin │ │ └── Ch00_Intro.md │ │ ├── DeepLearning │ │ └── Ch01_practice2.md │ │ ├── VuePress │ │ └── VuePress_depoly.md │ │ ├── DSD_VHDL │ │ ├── Ch03.md │ │ ├── Ch04_Component.md │ │ ├── Ch06_Exercise.md │ │ └── Ch01_intro.md │ │ ├── Algorithm │ │ ├── Ch13_DevideAndConque.md │ │ └── Ch01_DutchFlag.md │ │ ├── RealTimeSE │ │ ├── Ch05_Implementation.md │ │ ├── Ch01_Basic.md │ │ └── Ch02_Requirement.md │ │ ├── Service_Computing │ │ ├── Ch03_Portals.md │ │ ├── Ch02_CSS_Form.md │ │ ├── Ch12_Axis_ESB.md │ │ ├── Ch15_MicroServices.md │ │ ├── Ch07_Dynamic_pages.md │ │ ├── Ch13_Service_discovery.md │ │ └── Ch01_Web_as_a_platform.md │ │ ├── Zookeeper │ │ ├── Ch01_Basic.md │ │ └── Ch00_install.md │ │ ├── TF │ │ ├── Ch04_ActivationFunction.md │ │ ├── Ch19_ResNet.md │ │ ├── Ch03_Learningrate.md │ │ └── Ch10_dataEnhance.md │ │ ├── Linux │ │ └── Ch00_Notes.md │ │ ├── Prometheus │ │ └── Ch00_Intro.md │ │ ├── Haskell │ │ └── Ch00_Basic.md │ │ ├── React │ │ └── Ch01_install.md │ │ ├── Leetcode │ │ └── Ch10_More.md │ │ ├── Notes │ │ └── Ch00_pressure.md │ │ ├── Kafka │ │ └── Ch00_intro.md │ │ ├── Cloud_Computing │ │ └── Ch00_intro.md │ │ ├── HuaweiCloud │ │ ├── Ch09_OpenSource.md │ │ └── Ch02_Concept.md │ │ ├── Nginx │ │ └── Ch00_Basic.md │ │ ├── SSM │ │ └── Ch01_Mybatis.md │ │ └── Docker │ │ └── Ch01_Docker.md ├── Dockerfile ├── package.json └── README.md ├── README.md ├── blog-service.yaml └── blog-deployment.yaml /Blog/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | yarn.lock 3 | yarn.error 4 | /public*/ -------------------------------------------------------------------------------- /Blog/docs/theme-reco/api.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: api 3 | date: 2020-05-29 4 | --- 5 | 6 | This is api. -------------------------------------------------------------------------------- /Blog/docs/theme-reco/theme.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: theme 3 | date: 2020-05-27 4 | --- 5 | 6 | This is theme. -------------------------------------------------------------------------------- /Blog/docs/theme-reco/plugin.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: plugin 3 | date: 2020-05-28 4 | --- 5 | 6 | This is plugin. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Personal-Blog 2 | 3 | 4 | 5 | 6 | 7 | This is a personal blog with k8s deployment. 8 | 9 | -------------------------------------------------------------------------------- /Blog/docs/theme-reco/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: theme-reco 3 | date: 2020-05-29 4 | --- 5 | 6 | This is theme-reco. -------------------------------------------------------------------------------- /Blog/.vuepress/public/head.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/head.ico -------------------------------------------------------------------------------- /Blog/.vuepress/public/head.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/head.jpg -------------------------------------------------------------------------------- /Blog/.vuepress/public/hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/hero.png -------------------------------------------------------------------------------- /Blog/.vuepress/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/logo.png -------------------------------------------------------------------------------- /Blog/.vuepress/public/note.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/note.jpg -------------------------------------------------------------------------------- /Blog/.vuepress/public/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/avatar.png -------------------------------------------------------------------------------- /Blog/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /Blog/.vuepress/public/3e8826961ed690193a3fb720fee6bac.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/3e8826961ed690193a3fb720fee6bac.jpg -------------------------------------------------------------------------------- /Blog/.vuepress/public/5f1a222c19115dc4b0f411ac0dff72b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/5f1a222c19115dc4b0f411ac0dff72b.jpg -------------------------------------------------------------------------------- /Blog/.vuepress/public/9bc0746b784d049483e300cd771ab87.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/.vuepress/public/9bc0746b784d049483e300cd771ab87.jpg -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20201115230147799.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20201115230147799.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20201115230900504.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20201115230900504.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210109105135812.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210109105135812.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210506101053676.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210506101053676.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210506102630393.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210506102630393.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210506110249144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210506110249144.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210506110704293.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210506110704293.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210506112225508.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210506112225508.png -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/assets/image-20210510165308064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/0YHR0/Personal-Blog/HEAD/Blog/blogs/2022/ElasticSearch/assets/image-20210510165308064.png -------------------------------------------------------------------------------- /Blog/blogs/2022/AITools/Ch01_AISong.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 AI Song 3 | date: 2024-06-24 4 | tags: 5 | - AISong 6 | categories: 7 | - AIGC 8 | 9 | 10 | --- 11 | 12 | # Online use 13 | 14 | https://suno.com/ -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch04_BOM.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 BOM 3 | date: 2019-09-13 4 | tags: 5 | - JS 6 | categories: 7 | - JS 8 | 9 | --- 10 | 11 | # BOM 12 | 13 | https://blog.csdn.net/lhjuejiang/article/details/79453407 -------------------------------------------------------------------------------- /Blog/blogs/2022/markdown.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Markdown 3 | date: 2018-10-01 4 | tags: 5 | - markdown 6 | categories: 7 | - Markdown 8 | --- 9 | 10 | # markdown 11 | 12 | https://www.runoob.com/markdown/md-paragraph.html -------------------------------------------------------------------------------- /Blog/blogs/2022/Model_Driven_Software_Development/Ch04_Concrete_Syntex.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 concrete syntex 3 | date: 2022-04-21 4 | tags: 5 | - Model 6 | categories: 7 | - MDSD 8 | --- 9 | 10 | # Concrete syntex 11 | 12 | -------------------------------------------------------------------------------- /Blog/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:alpine 2 | WORKDIR /usr/share/nginx/html 3 | ADD ./public/ /usr/share/nginx/html/ 4 | # ADD etc/nginx/nginx.conf /etc/nginx/nginx.conf 5 | # ADD etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf 6 | EXPOSE 80 7 | -------------------------------------------------------------------------------- /Blog/blogs/2022/LLM/Ch00_FineTuneLLMs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Fine Tune LLMs 3 | date: 2024-06-11 4 | tags: 5 | - LLMs 6 | categories: 7 | - LLMs 8 | --- 9 | 10 | 11 | 12 | # Fine Tune LLMs 13 | 14 | 15 | 16 | Details see: https://github.com/0YHR0/FineTuneLLMs -------------------------------------------------------------------------------- /Blog/blogs/2022/Jenkins/Ch02_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Basic 3 | date: 2023-01-21 4 | tags: 5 | - Jenkins 6 | categories: 7 | - Jenkins 8 | --- 9 | 10 | # Basic 11 | 12 | ![image-20230429132025850](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230429132025850.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/JavaWeb/Ch05_listener.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05_Listener 3 | date: 2019-05-29 4 | tags: 5 | - Java 6 | categories: 7 | - JavaWeb 8 | 9 | --- 10 | 11 | # Listener 12 | 13 | ![image-20230426160703261](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426160703261.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringSecurity/Ch00_intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Introduction 3 | date: 2022-12-16 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Spring Security 9 | 10 | --- 11 | 12 | # ![image-20221216234502572](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221216234502572.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Go/Ch06_Popular_Components.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch06_Popular Components 3 | date: 2023-01-23 4 | tags: 5 | - Go 6 | categories: 7 | - Go 8 | 9 | 10 | --- 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | # log: Logrus https://github.com/sirupsen/logrus 21 | 22 | # 定时任务: Corn https://github.com/robfig/cron -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch02_JavaWeb_basic_structure.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Javaweb基本结构 3 | date: 2019-04-12 4 | tags: 5 | - Java 6 | - JVM 7 | categories: 8 | - JVM 9 | 10 | --- 11 | 12 | # Javaweb基本结构 13 | 14 | ![image-20230412110950525](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230412110950525.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Jenkins/Ch03_Gitee.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03_Gitee 3 | date: 2023-01-21 4 | tags: 5 | - Jenkins 6 | categories: 7 | - Jenkins 8 | 9 | --- 10 | 11 | # Jenkins + Gitee 12 | 13 | ![image-20230501215334386](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230501215334386.png) 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch09_Notes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09 Notes 3 | date: 2021-09-18 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | 10 | --- 11 | 12 | # Notes 13 | 14 | 连接postgresql 15 | 16 | ```yaml 17 | url: jdbc:postgresql://地址:端口/数据库?currentSchema=你的模式&characterEncoding=UTF-8 18 | ``` 19 | 20 | -------------------------------------------------------------------------------- /Blog/blogs/2022/HuggingFace/Ch03_Notes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03_Notes 3 | date: 2024-01-26 4 | tags: 5 | - HuggingFace 6 | categories: 7 | - NLP 8 | --- 9 | 10 | 11 | 12 | 13 | 14 | #### Generation prompts的意思 15 | 16 | ![image-20240126122459537](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20240126122459537.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/react_chat/Ch00_intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 chat 3 | date: 2022-11-17 4 | tags: 5 | - react 6 | - chat 7 | categories: 8 | - React 9 | 10 | 11 | --- 12 | 13 | 14 | 15 | https://github.com/0YHR0/react-native-gifted-chat 16 | 17 | 在example文件夹下删除yarn.lock 和.expo 18 | 19 | 执行expo upgrade 47 20 | 21 | 运行npm start -------------------------------------------------------------------------------- /Blog/blogs/2022/PHP/Ch01_Regex.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_regex 3 | date: 2019-10-23 4 | tags: 5 | - regex 6 | - php 7 | categories: 8 | - PHP 9 | --- 10 | 11 | # Regex 12 | 13 | ![image-20220529113456610](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113456610.png) 14 | 15 | 详细信息:https://www.jb51.net/article/160947.htm -------------------------------------------------------------------------------- /Blog/blogs/2022/Spring/Ch04_Transaction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 Transaction 3 | date: 2019-08-05 4 | tags: 5 | - Spring 6 | - Java 7 | categories: 8 | - Spring 9 | --- 10 | 11 | # Transaction 12 | 13 | 应该是add*等等,要加*号表示配置事务 14 | 15 | ![image-20230425184559019](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425184559019.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Model_Driven_Software_Development/Task_one.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Task One 3 | date: 2022-04-21 4 | tags: 5 | - Model 6 | categories: 7 | - MDSD 8 | 9 | --- 10 | 11 | ## Task one 12 | 13 | pragmatic: entertaining kids 14 | 15 | ​ showing the real railway 16 | 17 | ​ crying things around 18 | 19 | -------------------------------------------------------------------------------- /Blog/blogs/2022/PHP/Ch02_Form.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Form 3 | date: 2019-10-23 4 | tags: 5 | - form 6 | - php 7 | categories: 8 | - PHP 9 | --- 10 | 11 | # Form 12 | 13 | Form提交表单:![image-20220529113601637](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113601637.png)![image-20220529113619477](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113619477.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch03_DesignPatten.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03_DesignPattern 3 | date: 2019-04-13 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | 10 | --- 11 | 12 | # DesignPattern 13 | 14 | ![image-20230426213841994](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426213841994.png) 15 | 16 | ![](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426213841994.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/HuggingFace/Ch04_Tools.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04_Tools 3 | date: 2024-01-26 4 | tags: 5 | - HuggingFace 6 | categories: 7 | - NLP 8 | 9 | --- 10 | 11 | 12 | 13 | ### Pandas 14 | 15 | ![image-20240126123250533](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20240126123250533.png) 16 | 17 | ![image-20240126123300837](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20240126123300837.png) -------------------------------------------------------------------------------- /blog-service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | labels: 5 | k8s-app: blog 6 | name: blog 7 | namespace: blog 8 | spec: 9 | externalTrafficPolicy: Cluster 10 | ports: 11 | - name: blog 12 | port: 10080 13 | protocol: TCP 14 | targetPort: 80 15 | selector: 16 | k8s-app: blog 17 | type: LoadBalancer 18 | status: 19 | loadBalancer: 20 | ingress: 21 | - hostname: localhost 22 | -------------------------------------------------------------------------------- /Blog/blogs/2022/mybatis/Ch03_Object.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 Mybatis重要对象 3 | date: 2019-10-23 4 | tags: 5 | - Java 6 | - Mybatis 7 | categories: 8 | - Mybatis 9 | 10 | --- 11 | 12 | # Mybatis重要对象 13 | 14 | ![image-20230426005300072](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426005300072.png) 15 | 16 | ![image-20230426005308352](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426005308352.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/DataStructure/Ch01_Linear_structure.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Linear structure and non-linear structure 3 | date: 2019-06-11 4 | tags: 5 | - Data structure 6 | categories: 7 | - Data structure 8 | 9 | --- 10 | 11 | # Linear structure and non-linear structure 12 | 13 | 14 | 15 | **线性结构:数据元素之间存在一对一的线性关系** 16 | 17 | - 顺序存储结构:存储空间连续 18 | - 链式存储结构:存储空间不一定是连续的 19 | 20 | 例如:数组,链表,栈,队列 21 | 22 | **非线性结构:多维数组,广义表,树结构,图结构** 23 | 24 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch07_DataFlow.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07_DataFlow 3 | date: 2021-03-26 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | 11 | 12 | --- 13 | 14 | # DataFlow 15 | 16 | ![image-20220528195242876](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195242876.png) 17 | 18 | ![image-20220528195250719](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195250719.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Android/Ch02_WebView.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Webview 3 | date: 2021-05-07 4 | tags: 5 | - Android 6 | categories: 7 | - Android 8 | --- 9 | 10 | # Webview 11 | 12 | ```java 13 | webView = findViewById(R.id.web_01); 14 | //加载本地HTML 15 | //webView.loadUrl("file:///android_asset/echarts.html"); 16 | //加载网络url 17 | webView.getSettings().setJavaScriptEnabled(true); 18 | webView.loadUrl("https://m.baidu.com"); 19 | ``` 20 | 21 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch04_ImportResource.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 ImportResource 3 | date: 2021-08-12 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | 10 | --- 11 | 12 | 在别的项目中如果别人bean是用原生配置文件写的,可以使用该注解进行引入 13 | 14 | ![image-20230425175424326](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175424326.png) 15 | 16 | ![](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175424326.png) 17 | 18 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch05_Enum.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05_Enum 3 | date: 2019-04-17 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | 10 | --- 11 | 12 | # ![image-20230426214903101](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214903101.png) 13 | 14 | Season单例模式示例: 15 | 16 | Season枚举类示例:和一般的类一样,可以实现接口,直接implements 接口名 就可以 17 | 18 | ![image-20230426214942293](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214942293.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/AITools/Ch00_AIPainting.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Stable Diffusion 3 | date: 2024-05-05 4 | tags: 5 | - Stable Diffusion 6 | categories: 7 | - AIGC 8 | 9 | --- 10 | 11 | # Stable Diffusion 12 | 13 | 14 | 15 | ### 扩散原理 16 | 17 | 18 | 19 | ![image-20240505135355385](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20240505135355385.png) 20 | 21 | 22 | 23 | 24 | 25 | ## Use Online 26 | 27 | https://www.esheep.com/ 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Go/Ch00_Install.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00_Install 3 | date: 2022-12-04 4 | tags: 5 | - Go 6 | categories: 7 | - Go 8 | --- 9 | 10 | # 环境配置 11 | 12 | 下载依赖:https://go.dev/dl/ 13 | 14 | 配置环境变量: 15 | 16 | ```shell 17 | GOROOT=go的安装目录 18 | GOPATH=go的依赖下载目录 19 | ``` 20 | 21 | 22 | 23 | 24 | 25 | 只有main package下的main函数才会被执行 26 | 27 | HelloWorld.go 28 | 29 | ```go 30 | package main 31 | 32 | import "fmt" 33 | 34 | func main() { 35 | fmt.Println("Hello, I am bubu!") 36 | } 37 | 38 | ``` 39 | 40 | -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Ch17_ROS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch17 ROS 3 | date: 2022-05-28 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | 10 | --- 11 | 12 | # ROS 13 | 14 | - what is robot operating system:![img](https://api2.mubu.com/v3/document_image/bc43d694-bc95-46f9-ac9a-3562a9c69786-14899999.jpg) 15 | - roscore![img](https://api2.mubu.com/v3/document_image/3de7faef-1e6d-48a7-b7e3-8b15937a6dee-14899999.jpg) 16 | - ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/1f6d4078-0074-4f50-93ad-7afe9355af32-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/XML/Ch01_SAX.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_SAX 3 | date: 2019-11-29 4 | tags: 5 | - xml 6 | - SAX 7 | categories: 8 | - XML 9 | --- 10 | 11 | # SAX 12 | 13 | ![image-20220529112607954](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112607954.png) 14 | 15 | ![image-20220529112625207](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112625207.png) 16 | 17 | ![image-20220529112640549](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112640549.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch03_PreParse.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 Preparse 3 | date: 2019-09-12 4 | tags: 5 | - JS 6 | categories: 7 | - JS 8 | --- 9 | 10 | # Preparse 11 | 12 | ![image-20220529115602246](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115602246.png) 13 | 14 | ![image-20220529115620885](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115620885.png) 15 | 16 | ```sh 17 | 结果 18 | 19 | 9 20 | 21 | 9 22 | 23 | 9 24 | 25 | 9 26 | 27 | 9 28 | 29 | undefined 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Java/Ch07_Callback.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07_Callback 3 | date: 2019-06-11 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | --- 10 | 11 | # Callback 12 | 13 | ![image-20230425114200915](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114200915.png) 14 | 15 | ![image-20230425114209362](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114209362.png) 16 | 17 | ![image-20230425114218999](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114218999.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch09_Date.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09 Date 3 | date: 2019-10-06 4 | tags: 5 | - Date 6 | categories: 7 | - JS 8 | --- 9 | 10 | # Date class 11 | 12 | Data每次new的时候都会获取当前最新的时间,并且会显示时区 13 | 14 | ```js 15 | var date = new Date(); 16 | var data1 = new Date("12/01/1999 11:10:59");//不传参数默认当前时间,传了参数就会显示参数的时间 17 | /* 18 | 日期格式:月/日/年 时:分:秒 19 | 年份务必写完整 20 | */ 21 | alert(data1.getDay());//返回星期几 0-6 周日是0 22 | alert(data1.getDate());//返回几月份 23 | // alert(date); 24 | var i = Date.now();//获取当前时间的时间戳:从1970年1.1开始到当前时刻的毫秒数,可以用来测试代码的执行效率 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /Blog/blogs/2022/RabbitMQ/Ch00_Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Intro 3 | date: 2022-11-22 4 | tags: 5 | - RabbitMQ 6 | - MQ 7 | categories: 8 | - RabbitMQ 9 | 10 | --- 11 | 12 | 13 | 14 | ## ![image-20221122125510532](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221122125510532.png) 15 | 16 | ![image-20221122125721324](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221122125721324.png) 17 | 18 | + 削峰,解耦,异步 19 | 20 | ![image-20221122130219493](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221122130219493.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/mybatis/Ch05_Config.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05 Config 3 | date: 2019-10-28 4 | tags: 5 | - Java 6 | - Mybatis 7 | categories: 8 | - Mybatis 9 | 10 | --- 11 | 12 | # Config 13 | 14 | 配置文件 15 | 16 | ![image-20230426010224971](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010224971.png) 17 | 18 | ![image-20230426010242280](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010242280.png) 19 | 20 | ![image-20230426010253430](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010253430.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Nodejs/Ch01_Introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Introduction 3 | date: 2020-12-25 4 | tags: 5 | - Nodejs 6 | categories: 7 | - Nodejs 8 | --- 9 | 10 | # Introduction 11 | 12 | Chrome中js运行环境: 13 | 14 | ![image-20220518164137191](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220518164137191.png) 15 | 16 | 17 | 18 | Node.js是一个基于javascript的v8运行环境 19 | 20 | ![image-20220518164753663](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220518164753663.png) 21 | 22 | + Node.js中无法调用BOM DOM等浏览器内置api 23 | 24 | 25 | 26 | NodeJs LTS是长期稳定版,推荐企业级项目使用 27 | 28 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SuperSet/SuperSet_build.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: SuperSet(Apache开源数据大屏) 3 | date: 2021-12-28 4 | tags: 5 | - Data 6 | categories: 7 | - SuperSet 8 | 9 | --- 10 | 11 | # SuperSet(Apache开源数据大屏) 12 | 13 | ## 搭建过程 14 | 15 | 参照官网:https://superset.apache.org/docs/installation/installing-superset-using-docker-compose 16 | 17 | docker安装: 18 | 19 | 需要python3环境 https://www.cnblogs.com/marvin-wen/p/13066152.html 20 | 21 | Git clone下载太慢解决办法:在https://ghproxy.com/后面加git的地址,注意保留https:// 22 | 像这样git clone https://ghproxy.com/https://github.com/... 23 | 24 | 25 | 26 | 也可以参照鱼皮视频教程:https://www.bilibili.com/video/BV1eT4y197w6 -------------------------------------------------------------------------------- /Blog/blogs/2022/Redis/Ch01_Conclusion.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Conclusion 3 | date: 2019-08-08 4 | tags: 5 | - redis 6 | categories: 7 | - Redis 8 | --- 9 | 10 | # Conclusion 11 | 12 | ![image-20220529215137217](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529215137217.png) 13 | 14 | ![image-20220529215147590](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529215147590.png) 15 | 16 | ![image-20220529215202815](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529215202815.png)![image-20220529215211317](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529215211317.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch08_DataType.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch08_DataType 3 | date: 2021-03-26 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | --- 11 | 12 | # DataType 13 | 14 | 1.Java,Scala基本数据类型 15 | 16 | 2.Java,Scala的元组类型(Tuple) 17 | 18 | 3. Scala 样例类(case classes) 19 | 20 | 4.Java简单对象(POJOs)【必须要有空参构造方法,属性是私有化的话必须有getter,setter方法】 21 | 22 | 5. 其他(Arrays,Lists,Maps, Enums等) 23 | 24 | ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/clipboard.png) 25 | 26 | ![image-20220528195356707](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195356707.png) 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DataStructure/Ch05_Stack.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05 Stack 3 | date: 2019-07-02 4 | tags: 5 | - Data structure 6 | categories: 7 | - Data structure 8 | --- 9 | 10 | # Stack 11 | 12 | 13 | 14 | **复杂计算机的实现:** 15 | 16 | - **中缀转后缀** 17 | - **计算后缀** 18 | 19 | **中缀转后缀原则:** 20 | 21 | + 两个栈,一个运算符栈,一个字母栈,运算符出栈前先出所有的字母栈 22 | 23 | - 当下一操作符的优先级高于栈顶操作符,入栈 24 | - 当下一操作符的优先级低于栈顶操作符,一直出栈,直到遇到比其低级的操作符,再入栈 25 | - 当 “( ” 入栈时,具有最高的优先级,直接压入栈 26 | - 当 “ ( ” 出栈时,具有最低的优先级,除非碰到 “ )”,否则不会出栈 27 | - 当读到“ ) ” 时,弹出栈中的操作符,直到遇到 “(” 28 | 29 | 例:a + b * c + ( d * e + f ) * g 30 | 31 | 后缀:a b c * + d e * f + g * + 32 | 33 | **后缀计算原则:** 34 | 35 | - 字母压入栈中,当遇到操作符时,弹出两个字母,并且把计算之后的数值继续压入栈中,以此类推 -------------------------------------------------------------------------------- /Blog/blogs/2022/LLM/Ch01_Chainlit.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Chainlit 3 | date: 2024-07-04 4 | tags: 5 | - LLMs 6 | categories: 7 | - LLMs 8 | 9 | --- 10 | 11 | 12 | 13 | # Chainlit(UI for chat LLM) 14 | 15 | ref: https://github.com/Chainlit/chainlit 16 | 17 | 18 | 19 | ```python 20 | pip install chainlit 21 | 22 | chainlit --help # Auto create a config file 23 | 24 | chainlit hello # create a welcome page 25 | ``` 26 | 27 | 28 | 29 | 1. Create a app.py in the project 30 | 31 | 2. ```python 32 | chainlit run app.py -w # hot loading 33 | ``` 34 | 35 | 3. Call the model 36 | 37 | 1. URL + access token 38 | 2. Deploy locally 39 | 40 | 41 | 42 | Check my skeleton repo here: -------------------------------------------------------------------------------- /Blog/blogs/2022/MySQL/Ch03_Advanced.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 Advanced 3 | date: 2023-11-02 4 | tags: 5 | - DB 6 | categories: 7 | - DB 8 | 9 | 10 | --- 11 | 12 | # Mysql运维架构设计 13 | 14 | 15 | 16 | + 用MHA来监控有单点的问题,解决方案是用Orchestrator,是开源的mysql高可用,拓扑的可视化管理工具,检测,故障转移的组件,有UI界面,在此场景下也可以作为mysql的配置中心 17 | 18 | ![image-20231102192840450](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102192840450.png) 19 | 20 | ![image-20231102193336114](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102193336114.png) 21 | 22 | ![image-20231102193521663](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102193521663.png) 23 | 24 | + 在挂的时候千万不能自动切换,因为会有数据不一致性的问题 -------------------------------------------------------------------------------- /Blog/blogs/2022/solr/Ch03_Useage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 Useage 3 | date: 2022-06-17 4 | tags: 5 | - Solr 6 | categories: 7 | - Solr 8 | 9 | 10 | 11 | --- 12 | 13 | # Ch03 Useage 14 | 15 | 16 | 17 | + q: Query不止找到需要的条件,而且会计算相关程度 18 | 19 | + fq:FilteredQuery:不会计算相关程度,并且对结果进行缓存 20 | 21 | + sort:结果排序 22 | + fl:只返回列出的字段 23 | + df:default field,比如原来要写feature:29,现在只要写29 24 | + wt:可以返回不同的数据类型 25 | 26 | 27 | 28 | 29 | 30 | ![image-20220617174059016](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220617174059016.png) 31 | 32 | 33 | 34 | ## HTTP请求 35 | 36 | ![image-20220617174609494](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220617174609494.png) 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Blog/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Blog of YHR", 3 | "version": "1.3.8", 4 | "author": "reco_luan", 5 | "scripts": { 6 | "dev": "vuepress dev . --open --host \"localhost\"", 7 | "build": "vuepress build ." 8 | }, 9 | "devDependencies": { 10 | "@vuepress/plugin-active-header-links": "^1.9.7", 11 | "vuepress": "1.8.2", 12 | "vuepress-plugin-dynamic-title": "^1.0.0", 13 | "vuepress-plugin-medium-zoom": "^1.1.9", 14 | "vuepress-plugin-nuggets-style-copy": "^1.0.3", 15 | "vuepress-theme-reco": "1.6.14" 16 | }, 17 | "description": "Blog of YHR", 18 | "dependencies": { 19 | "@vssue/api-github-v3": "^1.4.7", 20 | "@vssue/vuepress-plugin-vssue": "^1.4.8" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DistributedSystem/Ch07_Time.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07 Time 3 | date: 2022-06-24 4 | tags: 5 | - Distributed System 6 | categories: 7 | - Distributed System 8 | 9 | --- 10 | 11 | # Physical time 12 | 13 | - clock skew/时间=drift rate. 如一个表在十天内慢了10秒,skew就是10秒,drift rate就是1sec/day 14 | 15 | - Internal synchronization:内部各个时钟的差别不超过bound都可以,都是1970年都行 16 | 17 | - External synchronization:必须与精确的时钟差别不超过bound 18 | 19 | - Cristian’s algorithm:![img](https://api2.mubu.com/v3/document_image/3dc7d6ba-c7e7-4fae-a15c-6d164a0773d4-14899999.jpg) 20 | 21 | - Berkeley algorithm:Internal synchronization 22 | 23 | - master询问每个服务器时间,并且计算平均值(计算的时候包含了自己的时间) 24 | 25 | - 然后把偏移量发给各个服务器(因为可以避免传输时间的误差) 26 | 27 | - fault-torlance:会自动去除明显不对的时间 -------------------------------------------------------------------------------- /Blog/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | home: true 3 | heroText: Welcome to YHR's HOME! 4 | tagline: Man liebt zuletzt seine Begierde, und nicht das Begehrte. -- Friedrich Wilhelm Nietzsche 5 | heroImage: /5f1a222c19115dc4b0f411ac0dff72b.jpg 6 | heroImageStyle: { 7 | maxWidth: '700px', 8 | width: '100%', 9 | display: block, 10 | margin: '3rem auto 3rem', 11 | background: '#fff', 12 | borderRadius: '1rem', 13 | } 14 | #bgImageStyle: { 15 | # height: '900px' 16 | #} 17 | isShowTitleInHome: false 18 | actionText: Test 19 | actionLink: /views/ 20 | features: 21 | - title: Yesterday 22 | details: 开发一款看着开心、写着顺手的 vuepress 博客主题 23 | - title: Today 24 | details: 希望帮助更多的人花更多的时间在内容创作上,而不是博客搭建上 25 | - title: Tomorrow 26 | details: 希望更多的爱好者能够参与进来,帮助这个主题更好的成长 27 | --- -------------------------------------------------------------------------------- /Blog/blogs/2022/Data_warehouse/Ch08_Advanced_topics.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch08 Advanced topics 3 | date: 2021-01-25 4 | tags: 5 | - Data 6 | - Data warehouse 7 | - Data lake 8 | categories: 9 | - Data warehouse 10 | --- 11 | 12 | 13 | 14 | # Advanced topics 15 | 16 | Data的分类:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/1ab3b544-ee3a-46c0-b1dc-a1542abb215c-14899999.jpg) 17 | 18 | Data lake和data warehouse![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/60492963-463c-4e79-aa09-8f41ba930f05-14899999.jpg) 19 | 20 | ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/7c6b0f4f-174d-4a64-9b43-476a26874ca0-14899999.jpg) 21 | 22 | 23 | 24 | 好文:https://www.zhihu.com/question/433131888 25 | 26 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch03_Deploy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03_Deploy 3 | date: 2021-03-01 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | --- 11 | 12 | # Deploy 13 | 14 | 新建maven项目,引入依赖包 15 | 16 | ```xml 17 | 18 | 19 | org.apache.flink 20 | flink-java 21 | 1.10.1 22 | 23 | 24 | org.apache.flink 25 | flink-streaming-java_2.12 26 | 1.10.1 27 | 28 | 29 | ``` 30 | 31 | 其中2.12为scala语言版本 32 | 33 | 因为flink运行时包中的akka的底层为scala(高并发处理) 34 | 35 | spark的底层也是scala 36 | 37 | 所以需要指定scala版本 -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch08_Regex.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch08 Regex 3 | date: 2019-10-05 4 | tags: 5 | - regex 6 | categories: 7 | - JS 8 | --- 9 | 10 | # Regex 11 | 12 | ```js 13 | var i = new RegExp("a");//第一个参数为正则表达式,第二个参数为匹配模式 14 | //匹配模式中“i”为忽略大小写,“g”为全局匹配模式,可以返回所有符合正则的字符串 15 | var reg = /a/i;//快捷创建正则表达式方法 16 | reg = /a | b///表示a或者b,也可以表示为[ab],字母表示为[a-z] 17 | //[^ab]除了ab 18 | //^表示以什么开头,$表示以什么结尾 19 | var str = "ab"; 20 | str.split(reg);//可以用正则表达式拆分字符串 21 | str.search(reg);//可以根据正则表达式搜索字符串,返回第一个找到的索引,如果是全局匹配则返回一个数组 22 | str.match(reg);//可以根据正则表达式提取出来匹配到的字符串,如果是全局匹配则返回一个数组 23 | str.replace(reg, "new");//把一个字符串中符合正则表达式的替换为新字符串 24 | //第一个参数为正则表达式,第二个参数为替换的字符串,不会影响原字符串,返回一个新的字符串 25 | alert(reg.test(str));//可以检查字符串中是否含有某个字母 26 | ``` 27 | 28 | 详细语法: https://www.jb51.net/article/72044.htm -------------------------------------------------------------------------------- /Blog/blogs/2022/RabbitMQ/Ch02_MQ.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 MQ 3 | date: 2022-11-29 4 | tags: 5 | - RabbitMQ 6 | - MQ 7 | categories: 8 | - RabbitMQ 9 | 10 | 11 | --- 12 | 13 | ![image-20221129204453163](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221129204453163.png) 14 | 15 | ![image-20221129204521126](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221129204521126.png) 16 | 17 | ![image-20221129204711782](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221129204711782.png) 18 | 19 | ![image-20221129204737757](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221129204737757.png) 20 | 21 | ![image-20221129205525356](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221129205525356.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch07_File.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07_File 3 | date: 2019-04-20 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | 10 | 11 | 12 | --- 13 | 14 | # File 15 | 16 | File类的各种方法:![image-20230426222140537](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222140537.png) 17 | 18 | 使用filefilter过滤需要list出来的文件: 19 | 20 | ![image-20230426222153270](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222153270.png) 21 | 22 | 23 | 24 | 创建文件:文件名大小写没有区别 25 | 26 | ![image-20230426222208353](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222208353.png) 27 | 28 | 29 | 30 | 运行可执行文件: 31 | 32 | ![image-20230426222219664](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222219664.png) -------------------------------------------------------------------------------- /blog-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | k8s-app: blog 6 | name: blog 7 | namespace: blog 8 | spec: 9 | progressDeadlineSeconds: 600 10 | replicas: 3 11 | selector: 12 | matchLabels: 13 | k8s-app: blog 14 | strategy: 15 | rollingUpdate: 16 | maxSurge: 25% 17 | maxUnavailable: 25% 18 | type: RollingUpdate 19 | template: 20 | metadata: 21 | labels: 22 | k8s-app: blog 23 | name: blog 24 | spec: 25 | containers: 26 | - image: 0yhr0/blog:1.3.1 27 | imagePullPolicy: IfNotPresent 28 | name: blog 29 | resources: 30 | requests: 31 | cpu: "0.1" 32 | memory: 100Mi 33 | dnsPolicy: ClusterFirst 34 | restartPolicy: Always 35 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch06_css.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch06 css 3 | date: 2019-09-30 4 | tags: 5 | - css 6 | categories: 7 | - JS 8 | --- 9 | 10 | # css 11 | 12 | ![image-20220529214140707](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214140707.png)![image-20220529214148824](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214148824.png)![image-20220529214156563](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214156563.png)![image-20220529214202713](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214202713.png)![image-20220529214213349](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214213349.png)![image-20220529214221918](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214221918.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/MongoDB/Ch01_Deployment.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Deployment 3 | date: 2022-11-13 4 | tags: 5 | - MongoDB 6 | - DB 7 | categories: 8 | - MongoDB 9 | 10 | --- 11 | 12 | ## 安装HELM 13 | 14 | ```sh 15 | wget https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz 16 | tar xf helm-v3.8.0-linux-amd64.tar.gz 17 | mv linux-amd64/helm /usr/local/bin/helm 18 | helm repo add bitnami https://charts.bitnami.com/bitnami 19 | ``` 20 | 21 | 22 | 23 | ## 单机部署: 24 | 25 | https://github.com/0YHR0/Deployment-of-Mongodb-and-Mongo-Express-UI-on-Kubernetes/blob/master/mongo-secret.yaml 26 | 27 | 28 | 29 | https://www.bogotobogo.com/DevOps/Docker/Docker_Kubernetes_MongoDB_MongoExpress.php 30 | 31 | 32 | 33 | 记得把service改成node port 34 | 35 | 36 | 37 | ## K8s部署: 38 | 39 | https://github.com/mongodb/mongodb-kubernetes-operator 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Lab_02.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lab 02 3 | date: 2022-06-18 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | 10 | --- 11 | 12 | # Lab 02 13 | 14 | - memory descriptor是task struct的一部分,用来描述给一个进程的内存分配![img](https://api2.mubu.com/v3/document_image/3620fdae-61c3-4e0a-bf68-bee80761dc05-14899999.jpg) 15 | 16 | - Memory descriptor包含些什么: 17 | 18 | 19 | 20 | - kernel线程的memory-struct是null 21 | 22 | - 当几个线程共用一个进程的内存空间(创建子进程时,传递CLONE_VM参数)时,mm_users会增加 23 | 24 | - 共用内存空间的线程退出时:![img](https://api2.mubu.com/v3/document_image/0dedaedb-5ecc-44ce-9c13-3339339865fa-14899999.jpg) 25 | 26 | - mm_count一般都是1,除了kernel操作改内存空间时会+1![img](https://api2.mubu.com/v3/document_image/56d64d31-8e9c-496f-a0bc-16747a55d84a-14899999.jpg) 27 | 28 | - ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/63a1841a-49b5-49b8-8d37-316fd03a69de-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch02_Introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Introduction 3 | date: 2021-01-31 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | 11 | --- 12 | 13 | # Introduction 14 | 15 | 16 | 17 | ![image-20220528195108342](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195108342.png) 18 | 19 | ![image-20220528195116576](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195116576.png) 20 | 21 | ![image-20220528195124333](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195124333.png) 22 | 23 | ![image-20220528195137874](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195137874.png) 24 | 25 | ![image-20220528195146238](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195146238.png) 26 | 27 | Flink既可以批处理也可以流处理 -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Ch16_VM.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch16 VM 3 | date: 2022-05-26 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | --- 10 | 11 | # Virtual Machines 12 | 13 | - 结构:![img](https://api2.mubu.com/v3/document_image/a774b028-4750-4f47-ae57-c5dff7b2366b-14899999.jpg) 14 | 15 | - type0是硬件支持,type1是软件支持:![img](https://api2.mubu.com/v3/document_image/e92742fc-1710-402a-a554-ff8f3bfdaf00-14899999.jpg) 16 | 17 | - 双模式cpu: 18 | 19 | 20 | 21 | - cpu有user mode和kernel mode 22 | 23 | - 虚拟机也有virtual user mode和virtual kernel mode,但是都运行在真实cpu的user mode中 24 | 25 | - 要切换到kernel mode必须从virtual kernel mode进行 26 | 27 | - Trap-and-Emulate![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/a410cb2a-6ce4-49f2-93df-225ec8786528-14899999.jpg)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/da5bfee2-ee75-4f9e-a3e7-df26afc8592a-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/HuggingFace/Ch01_Env.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_Env 3 | date: 2023-11-22 4 | tags: 5 | - HuggingFace 6 | categories: 7 | - NLP 8 | --- 9 | 10 | # Env 11 | 12 | + 在windows上因为下载的模型默认放到c盘,我们可以修改路径 13 | + 设置缓存地址的方法,也就是设置TRANSFORMERS_CACHE环境变量,我将其设置在了用户环境变量里面:![image-20231122105829182](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231122105829182.png) 14 | + 接下来关键的一步: 15 | 在用户环境变量Path或者系统环境变零PATH中添加: 16 | **%TRANSFORMERS_CACHE%** 17 | 18 | 19 | 20 | ## python下载依赖 PT-CPU 21 | 22 | ```sh 23 | pip install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html 24 | 25 | #安装transformers 26 | #pip安装 27 | pip install transformers==4.18.0 28 | 29 | #安装datasets 30 | #pip安装 31 | pip install datasets==2.4.0 32 | 33 | #安装torchtext 34 | pip install torchtext==0.11.2 35 | ``` 36 | 37 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DataStructure/Ch04_Time_Complexity.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 Time Complexity 3 | date: 2019-06-30 4 | tags: 5 | - Data structure 6 | categories: 7 | - Data structure 8 | 9 | 10 | --- 11 | 12 | **时间复杂度:** 13 | 14 | - 忽略常数项 15 | - 忽略低次项 16 | - 忽略系数 17 | 18 | 以下时间复杂度从小到大排列: 19 | 20 | 常数阶:O(1) 21 | 22 | ```java 23 | int c =a+b; 24 | a++; 25 | ``` 26 | 27 | 对数阶:O(logN) 28 | 29 | ```java 30 | int i = 1; 31 | while(i < n){ 32 | i = i * 2; 33 | } 34 | ``` 35 | 36 | 线性阶:O(n) 37 | 38 | ```java 39 | for(int i = 0; i < n; i++){ 40 | a = a + 1; 41 | } 42 | ``` 43 | 44 | 线性对数阶:O(nlogN) 45 | 46 | ```java 47 | for(int i = 1 ; i < n; i++){ 48 | while(m < k){ 49 | m = m * 2; 50 | } 51 | } 52 | ``` 53 | 54 | 平方阶:O(n2) 55 | 56 | ```java 57 | for(int i = 1; i < n; i++){ 58 | for(int j = 1; j < n; j++){ 59 | n = n + 1; 60 | } 61 | } 62 | ``` 63 | 64 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringCloud/Ch01_MicroService_basics.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Microservice basics 3 | date: 2022-04-09 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Spring Cloud 9 | --- 10 | 11 | # Ch01 微服务基础 12 | 13 | ![image-20220410000917406](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410000917406.png) 14 | 15 | ![image-20220410000958968](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410000958968.png) 16 | 17 | ![image-20220410105401088](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410105401088.png) 18 | 19 | 20 | 21 | 与spring boot兼容:![image-20220410105635979](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410105635979.png) 22 | 23 | 24 | 25 | 基础springcloud创建项目模板: 26 | 27 | 链接:https://pan.baidu.com/s/1uK4BIJKzHVjWAIwwd0wutw?pwd=yyds 28 | 提取码:yyds -------------------------------------------------------------------------------- /Blog/blogs/2022/XML/Ch03_DTD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03_DTD 3 | date: 2019-12-10 4 | tags: 5 | - xml 6 | - DTD 7 | categories: 8 | - XML 9 | --- 10 | 11 | # DTD 12 | 13 | 规范XML结构:![image-20220529113131461](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113131461.png) 14 | 15 | ![image-20220529113151951](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113151951.png) 16 | 17 | ![image-20220529113200081](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113200081.png) 18 | 19 | ![image-20220529113210931](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113210931.png) 20 | 21 | ![image-20220529113222413](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113222413.png) 22 | 23 | ![image-20220529113256948](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113256948.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/HuggingFace/Ch00_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00_Basic 3 | date: 2023-11-16 4 | tags: 5 | - HuggingFace 6 | categories: 7 | - NLP 8 | 9 | 10 | --- 11 | 12 | # 13 | 14 | ![image-20231116164327642](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231116164327642.png) 15 | 16 | + BERT: 基于完型填空,挖词预测 17 | + GPT:不断回归,一个一个字往后生成 18 | 19 | ![image-20231119133151482](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231119133151482.png) 20 | 21 | ![image-20231121174809910](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231121174809910.png) 22 | 23 | 24 | 25 | ![image-20231127155949255](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231127155949255.png) 26 | 27 | ![image-20231127160128868](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231127160128868.png) 28 | 29 | + 只要提供模型的名字,会自动加载分词器 30 | + 31 | 32 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch10_CommonMethods.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch10 CommonMethods 3 | date: 2019-10-07 4 | tags: 5 | - Date 6 | categories: 7 | - JS 8 | 9 | --- 10 | 11 | # CommonMethods 12 | 13 | ```js 14 | var c = Infinity;//表示正无穷 15 | 16 | console.log(Number.MAX_VALUE);//输出number类型的最大值 17 | 18 | console.log(Number.MIN_VALUE);//表示大于0的最小值 19 | 20 | var a1 = "abc"; 21 | var a2 = "bcd"; 22 | console.log(a1*a2);//结果为NaN,表示not a number,但是使用type of返回值还是number 23 | console.log(typeof a);//输出a的数据类型 24 | 25 | console.log(Number.MAX_VALUE);//输出number类型的最大值 26 | console.log(Number.MIN_VALUE);//表示大于0的最小值 27 | 28 | var a = parseInt("10.2");//结果为10 29 | 30 | console.log("a" in p1);//检查对象中是否含有属性值,原型对象中也可以查到, 注意要加双引号 31 | 32 | console.log(p1.hasOwnProperty("age"));//检查对象自身中是否含有属性值,不能识别到原型对象中的属性 33 | ``` 34 | 35 | ```js 36 | var str = "aaa,ggg,ff,d.3"; 37 | var arr = str.split(",");//分割字符串,并返回一个数组 38 | alert(arr); 39 | ``` 40 | 41 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch08_Exception.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch08_Exception 3 | date: 2019-04-20 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | --- 10 | 11 | # Exception 12 | 13 | Try-catch自定义异常类使用方法: 14 | 15 | ![image-20230426222350755](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222350755.png) 16 | 17 | 18 | 19 | 一般使用System.err.println();来输出错误,因为System.out可能会被重定向。 20 | 21 | Exception继承了Throwable 22 | 23 | 默认的方法:e.printStackTrace();将会提示方法调用处以及异常抛出处。 24 | 25 | 重新抛出异常会把异常抛给上一级异常处理程序 26 | 27 | ![image-20230426222407885](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222407885.png) 28 | 29 | ![image-20230426222418216](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222418216.png) 30 | 31 | ![image-20230426222428991](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222428991.png) 32 | 33 | 34 | 35 | RuntimeException会自动捕获,finally不管是否抛出错误都执行 -------------------------------------------------------------------------------- /Blog/blogs/2022/Kubernetes/Ch26_Advanced.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch26 Advanced 3 | date: 2023-11-02 4 | tags: 5 | - K8s 6 | - Kubernetes 7 | categories: 8 | - Kubernetes 9 | 10 | --- 11 | 12 | 13 | 14 | # KtConnect 15 | 16 | ![image-20231102193923337](C:\Users\YHR\AppData\Roaming\Typora\typora-user-images\image-20231102193923337.png) 17 | 18 | + 在本地开发的时候不可能写几行代码就打包镜像到k8s进行调试,而且依赖的资源都在k8s上,所以要用这么一个本地开发联调k8s的工具 19 | 20 | ![image-20231102194210816](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102194210816.png) 21 | 22 | ![image-20231102194832395](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102194832395.png) 23 | 24 | ![image-20231102194804781](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102194804781.png) 25 | 26 | ![image-20231102195011368](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231102195011368.png) 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Kubernetes/Ch29_Job.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch29 Job and Cronjob 3 | date: 2024-05-01 4 | tags: 5 | - K8s 6 | - Kubernetes 7 | categories: 8 | - Kubernetes 9 | 10 | 11 | --- 12 | 13 | 14 | 15 | # Job & CronJob 16 | 17 | ![image-20241011191911791](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011191911791.png) 18 | 19 | ![image-20241011191919185](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011191919185.png) 20 | 21 | ![image-20241011191927758](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011191927758.png) 22 | 23 | ![image-20241011191935628](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011191935628.png) 24 | 25 | ![image-20241011191946648](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011191946648.png) 26 | 27 | ![image-20241011191954574](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011191954574.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Gin/Ch00_Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00_Intro 3 | date: 2022-12-22 4 | tags: 5 | - Gin 6 | - Web 7 | - Go 8 | categories: 9 | - Go 10 | 11 | --- 12 | 13 | # 14 | 15 | ```go 16 | go get github.com/gin-gonic/gin 17 | ``` 18 | 19 | ```go 20 | package main 21 | 22 | import ( 23 | "github.com/gin-gonic/gin" 24 | ) 25 | 26 | func main() { 27 | //create a server 28 | ginServer := gin.Default() 29 | 30 | //request 31 | ginServer.GET("/hello", func(context *gin.Context) { 32 | context.JSON(200, gin.H{"msg": "hello from go"}) 33 | }) 34 | 35 | //run 36 | ginServer.Run(":8080") 37 | } 38 | 39 | ``` 40 | 41 | https://github.com/0YHR0/Gin-Study 42 | 43 | 英文文档template:https://pkg.go.dev/html/template 44 | 45 | 中文翻译版: https://colobu.com/2019/11/05/Golang-Templates-Cheatsheet/#if/else_%E8%AF%AD%E5%8F%A5 46 | 47 | # Gorm+Mysql 48 | 49 | ```go 50 | //安装MySQL驱动 51 | go get -u gorm.io/driver/mysql 52 | //安装gorm包 53 | go get -u gorm.io/gorm 54 | ``` 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DeepLearning/Ch01_practice2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Practice2 3 | date: 2022-06-14 4 | tags: 5 | - DL 6 | categories: 7 | - DL 8 | 9 | --- 10 | 11 | # Ch00 Practice2 12 | 13 | 定义sigmoid函数和他的导数 14 | 15 | ```py 16 | import numpy as np 17 | 18 | 19 | def sigmoid(x: np.array): 20 | return 1 / (1 + np.exp(-x)) 21 | 22 | 23 | def derivative_sigmoid(x: np.array): 24 | return np.exp(-x) * np.power((1 + np.exp(-x)), -2) 25 | 26 | 27 | if __name__ == '__main__': 28 | print(1) 29 | test = np.ones([2, 2]) 30 | print(derivative_sigmoid(test)) 31 | ``` 32 | 33 | 34 | 35 | 绘制图像: 36 | 37 | ```py 38 | plt.figure(figsize=(5, 5)) 39 | plt.title("function") 40 | x = np.linspace(-30, 30, 500) 41 | y1 = sigmoid(x) 42 | y2 = derivative_sigmoid(x) 43 | plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--', label='sigmoid') 44 | plt.plot(x, y2, color='blue', linewidth=1.0, linestyle='--', label='derivative_sigmoid') 45 | plt.legend() 46 | plt.show() 47 | ``` 48 | 49 | -------------------------------------------------------------------------------- /Blog/blogs/2022/VuePress/VuePress_depoly.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vuepress搭建博客+云服务器部署 3 | date: 2020-12-25 4 | tags: 5 | - Blog 6 | - Docker 7 | - Cloud server 8 | categories: 9 | - Vuepress 10 | 11 | --- 12 | 13 | # Vuepress搭建博客+云服务器部署 14 | 15 | + 安装 vuepress,最好不要用npm安装,因为依赖树会出错,截至2021/12/23,按照官方文档中使用yarn安装未发现问题https://vuepress.vuejs.org/zh/guide/getting-started.html![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/4cc9c0e8-7da9-4050-bad7-f569c62896a7-14899999.jpg) 16 | + 安装脚手架工具:npm install @vuepress-reco/theme-cli -g 17 | + 创建项目:theme-cli init my-blog #my-blog可替换成自己需要的项目名称AIA![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/a38d9a29-0596-4827-902f-c867b9dca7bb-14899999.jpg) 18 | + 启动项目![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/9521949d-c903-4cd5-9401-b31e8561f9fa-14899999.jpg) 19 | + 打包项目:npm run build(每次修改完笔记之后重新打包并部署) 20 | + 把打包好的public文件夹下的项目部署到nginx上 21 | + md中的图片必须复制到服务器上并且改成相对路径 22 | + 文件名不能有中文 23 | + 文件名不能带空格 24 | 25 | -------------------------------------------------------------------------------- /Blog/blogs/2022/mybatis/Ch02_Transaction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Transaction 3 | date: 2019-10-21 4 | tags: 5 | - Java 6 | - Mybatis 7 | categories: 8 | - Mybatis 9 | --- 10 | 11 | # Transaction 12 | 13 | ![image-20230426005049632](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426005049632.png) 14 | 15 | 16 | 17 | mybatis默认执行sql语句是手工提交事务模式,在insert,delete,update后需要提交事务 18 | 19 | ![image-20230426005115686](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426005115686.png) 20 | 21 | image-20230426005127331 22 | 23 | 24 | 25 | 直接用java创建对象加入数据库: 26 | 27 | ![image-20230426005149250](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426005149250.png) 28 | 29 | 30 | 31 | 如果id要用default那就不在dao的xml文件中设置: 32 | 33 | ![image-20230426005203726](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426005203726.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Spring/Ch00_CreateProject.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Create Project 3 | date: 2019-07-09 4 | tags: 5 | - Spring 6 | - Java 7 | categories: 8 | - Spring 9 | --- 10 | 11 | # Ch00 Create Project 12 | 13 | 14 | 15 | 导入maven依赖: 16 | 17 | ```xml 18 | 19 | 20 | org.springframework 21 | spring-webmvc 22 | 5.3.9 23 | 24 | 25 | org.springframework 26 | spring-jdbc 27 | 5.3.9 28 | 29 | 30 | 31 | ``` 32 | 33 | Spring主要特点:IOC:控制翻转(解析xml,用工厂模式,反射创建对象) 34 | 35 | ​ DI(依赖注入)是实现IOC的一种方式 36 | 37 | ​ service类调用factory类 38 | 39 | ​ AOP:面向切面 40 | 41 | 还有对事务的支持![image-20230425181356610](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425181356610.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/DSD_VHDL/Ch03.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 lecture2 3 | date: 2022-11-04 4 | tags: 5 | - FPGA 6 | - VHDL 7 | categories: 8 | - VHDL 9 | --- 10 | 11 | 12 | 13 | ## gray code 14 | 15 | ![image-20221103100651757](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221103100651757.png)![image-20221103100752159](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221103100752159.png) 16 | 17 | + 第一位照抄,gray code的第n位等于原码判断第n位与n-1位是否一样,一样是0,不一样是1 18 | 19 | 20 | 21 | 并发执行 22 | 23 | ![image-20221103105046912](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221103105046912.png) 24 | 25 | ![image-20221103105655678](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221103105655678.png) 26 | 27 | ![image-20230101201124318](C:\Users\YHR\AppData\Roaming\Typora\typora-user-images\image-20230101201124318.png) 28 | 29 | 30 | 31 | ### 锁存器 32 | 33 | ![image-20230101202823170](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230101202823170.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/MySQL/Ch01_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Basic 3 | date: 2019-12-07 4 | tags: 5 | - DB 6 | categories: 7 | - DB 8 | 9 | 10 | --- 11 | 12 | # Basic 13 | 14 | ![image-20230425113015440](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113015440.png) 15 | 16 | ![image-20230425113023671](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113023671.png) 17 | 18 | ![image-20230425113033073](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113033073.png) 19 | 20 | ![image-20230425113043908](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113043908.png) 21 | 22 | ![image-20230425113052561](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113052561.png) 23 | 24 | ![image-20230425113108071](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113108071.png) 25 | 26 | ![image-20230425113118492](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113118492.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Kubernetes/Ch19_UseDashboard.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch19 UseDashboard 3 | date: 2022-05-25 4 | tags: 5 | - K8s 6 | - Kubernetes 7 | categories: 8 | - Kubernetes 9 | 10 | --- 11 | 12 | # UseDashboard 13 | 14 | **查看** 15 | 16 | 选择指定的命名空间`dev`,然后点击`Deployments`,查看dev空间下的所有deployment 17 | 18 | ![image-20220522215623363](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220522215623363.png) 19 | 20 | **扩缩容** 21 | 22 | 在`Deployment`上点击`规模`,然后指定`目标副本数量`,点击确定 23 | 24 | ![image-20220522215646404](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220522215646404.png) 25 | 26 | **编辑** 27 | 28 | 在`Deployment`上点击`编辑`,然后修改`yaml文件`,点击确定 29 | 30 | ![image-20220522215704032](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220522215704032.png) 31 | 32 | **操作Pod** 33 | 34 | 选中某个Pod,可以对其执行日志(logs)、进入执行(exec)、编辑、删除操作 35 | 36 | 37 | 38 | 使用右上角+号可以新建资源 39 | 40 | ![image-20220522215807029](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220522215807029.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Algorithm/Ch13_DevideAndConque.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch13 DevideAndConque 3 | date: 2020-04-02 4 | tags: 5 | - Algorithm 6 | categories: 7 | - Algorithm 8 | 9 | 10 | 11 | --- 12 | 13 | # DevideAndConque 14 | 15 | **汉诺塔问题:** 16 | 17 | - 如果只有一个盘,可以直接移动 18 | - 如果不是一个盘,总归可以把它看成两个部分,第一部分1为最低下那个盘,第二部分2为剩下的盘 19 | 20 | 设共有柱子ABC,需要把A柱移动到C柱 21 | 22 | 1. 先把2移动到B 23 | 2. 再把1移动到C 24 | 3. 再把2移动到C 25 | 26 | ```java 27 | public class Hanoitower { 28 | 29 | public static void main(String[] args) { 30 | Han(5, 'A' , 'B', 'C'); 31 | 32 | } 33 | /** 34 | * 35 | * @param num: 要移动的数目 36 | * @param a:第一个柱子 37 | * @param b:第二个柱子 38 | * @param c:第三个柱子 39 | */ 40 | public static void Han(int num, char a, char b, char c) { 41 | if(num == 1) { 42 | System.out.println(a + "=>" + c); 43 | } 44 | else { 45 | //先把上面那部分移动到b 46 | Han(num - 1, a, c, b); 47 | //再把下面那部分移动到c 48 | System.out.println(a + "=>" + c); 49 | //再把剩下的从b移动到c 50 | Han(num - 1,b,a,c); 51 | } 52 | } 53 | 54 | } 55 | ``` 56 | 57 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Java/Ch02_Shortcut.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Shortcut 3 | date: 2019-05-12 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | 10 | --- 11 | 12 | # Idea常用快捷键 13 | 14 | 15 | 16 | Ctrl+H,查看接口的实现类 17 | 18 | **Ctrl+alt+v 自动生成返回值** 19 | 20 | fori 循环 21 | 22 | Ctrl+Alt+O 优化导入的类和包 23 | 24 | Alt+Insert 生成代码(如get,set方法,构造函数等) 25 | 26 | Ctrl+Alt+T 生成try catch 或者 Alt+enter 27 | 28 | CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里 29 | 30 | **Ctrl + O 重写方法** 31 | 32 | **Ctrl + I 实现方法** 33 | 34 | Ctr+shift+U 大小写转化 35 | 36 | ALT+回车 导入包,自动修正 37 | 38 | ALT+/ 代码提示 39 | 40 | CTRL+J 自动代码 41 | 42 | Ctrl+Shift+J,整合两行为一行 43 | 44 | CTRL+空格 代码提示 45 | 46 | CTRL+SHIFT+SPACE 自动补全代码 47 | 48 | CTRL+ALT+L 格式化代码 49 | 50 | CTRL+ALT+I 自动缩进 51 | 52 | CTRL+ALT+O 优化导入的类和包 53 | 54 | ALT+INSERT 生成代码(如GET,SET方法,构造函数等) 55 | 56 | CTRL+E 最近更改的代码 57 | 58 | CTRL+ALT+SPACE 类名或接口名提示 59 | 60 | CTRL+P 方法参数提示 61 | 62 | CTRL+Q,可以看到当前方法的声明 63 | 64 | 65 | 66 | Shift+F6 重构-重命名 (包、类、方法、变量、甚至注释等) 67 | 68 | Ctrl+Alt+V 提取变量 -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Ch12_GFS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch12 Google file system 3 | date: 2022-05-02 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | --- 10 | 11 | # Google file system 12 | 13 | - https://zhuanlan.zhihu.com/p/458151870 14 | - 架构:![img](https://api2.mubu.com/v3/document_image/d91d1cc9-77b6-4285-a87f-7c5f7d3a7562-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/75913a28-26d1-41ac-95e4-0a05549a9f08-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/76660658-0c23-4387-bbdc-8fd9249b52f9-14899999.jpg) 15 | - 租约:![img](https://api2.mubu.com/v3/document_image/892ffca6-b85a-4e63-af8f-41fce2c6ee36-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/08eb5f2d-073b-435b-a2f8-789655d57608-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/86ab842b-6482-4e3c-b49f-749724b0dbcb-14899999.jpg) 16 | - 快照:写时才复制![img](https://api2.mubu.com/v3/document_image/d74c7966-d3c8-4723-b6c3-6baeb89e7be8-14899999.jpg) 17 | - 垃圾回收:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/718a5064-81fd-4d84-ba65-936bdae2470b-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/DataStructure/Ch09_Summary.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09 Summary 3 | date: 2019-08-05 4 | tags: 5 | - Data structure 6 | categories: 7 | - Data structure 8 | 9 | --- 10 | 11 | 12 | 13 | 14 | 15 | **数组** 16 | 17 | ​ **优点**: 18 | 19 | - 随机访问快(可以通过下标迅速定位) 20 | - 查找速度快 21 | 22 | ​ ** 缺点**: 23 | 24 | - 增加删除的效率低(可能需要大幅度移动数据) 25 | - 内存空间不灵活,需要一整块的内存,也有可能浪费内存 26 | - 扩展性差,大小在初始化时就指定好了 27 | 28 | 29 | 30 | **链表:** 31 | 32 | ​ **缺点**: 33 | 34 | - 访问速度慢,需要从头开始遍历 35 | 36 | ​ **优点**: 37 | 38 | - 插入删除的速度快 39 | - 可扩展性强,大小不固定 40 | - 内存空间是分散的 41 | 42 | 43 | 44 | **单链表与双链表的区别:** 45 | 46 | - 单链表在删除节点时需要一个temp,指针移动的复杂度为2i 47 | - 双向链表可以用二分法查找 48 | 49 | 50 | 51 | **哈希表:** 52 | 53 | ​ **优点**: 54 | 55 | - 插入/查询/删除效率非常高 56 | 57 |   **缺点**: 58 | 59 | - 空间利用率不高,底层使用的是数组,并且使用的某些单元是没有被利用的 60 | - 哈希表中的元素是无序的,不能按照固定的顺序来遍历哈希表中的元素 61 | - 不能快速的找出哈希表中的最大值或者最小值 62 | 63 | 64 | 65 | **树结构:** 66 | 67 | + 在某种场景下,使用树结构会更加方便 68 | 69 | + 因为树结构是非线性,可以表示一对多 70 | + 比如文件的目录结构 71 | + 对于一个平衡树的插入和查找等效率为O(logN) 平衡树: 树两边的数据均匀分布 非平衡树: 树两边的数据不均匀分布 72 | + 连续插入有序的数据,树分布不均匀,变成一个链表结构,插入和查找等效率变成 O(N)   73 | 74 |    -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch01_Event.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Event 3 | date: 2019-09-09 4 | tags: 5 | - JS 6 | categories: 7 | - JS 8 | --- 9 | 10 | # Event 11 | 12 | ![image-20220529115118249](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115118249.png) 13 | 14 | ![image-20220529115127966](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115127966.png) 15 | 16 | ![image-20220529115140983](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115140983.png) 17 | 18 | **使用这种方式添加的监听器会依次执行,推荐** 19 | 20 | 21 | 22 | **移除事件:** 23 | 24 | ![image-20220529115159971](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115159971.png) 25 | 26 | ![image-20220529115210231](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115210231.png) 27 | 28 | ![image-20220529115223402](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115223402.png) 29 | 30 | 也就是先执行father的监听器 31 | 32 | 反之false先执行son的监听器 33 | 34 | ![image-20220529115242722](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115242722.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java/Ch03_JavaDS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03_Java_Datastructure 3 | date: 2019-05-12 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | --- 10 | 11 | # ![image-20230425113337990](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113337990.png) 12 | 13 | 14 | 15 | **Vector和ArrayList:** 16 | 17 | 1. Vector是线程安全的,因为大部分方法都用syncronized方法修饰,而ArrayList不是 18 | 19 | 2. ArrayList在原来的数组不够用的时候扩容0.5倍,Vector扩容1倍 20 | 21 | 所以单线程环境下,Vector的效率很低,而在多线程环境中不能直接用ArrayList,必须加处理 22 | 23 | 24 | 25 | **HashMap和HashTable:** 26 | 27 | 1. Hashtable中方法是synchronized,多线程可以直接用Hashtable,而HashMap必须手动处理。 28 | 29 | 2. Hashtable的key和value都允许null值,而HashMap中null只能作为键,并且只有一个。 30 | 31 | 3. Hashtable直接使用对象的hashcode,而HashMap是另外计算了hash值。 32 | 33 | 4. Hashtable的hash数组初始大小为11,增加方式是old*2+1,而hashMap中默认数组的大小为16,而且一定是2的指数。 34 | 35 | 36 | 37 | **TreeMap和HashMap:** 38 | 39 | 1. TreeMap继承自SortedMap,HashMap继承自Abstractap,TreeMap会把元素排序,所以更适合按自然顺序遍历元素,其他情况HashMap更常用,因为效率更高 40 | 41 | 42 | 43 | **HashMap和HashSet:** 44 | 45 | ![image-20230425113412190](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113412190.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/RealTimeSE/Ch05_Implementation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05 Implementation 3 | date: 2022-12-29 4 | tags: 5 | - RealTimeSE 6 | categories: 7 | - RealTimeSE 8 | --- 9 | 10 | # Implementation 11 | 12 | - Overview![img](https://api2.mubu.com/v3/document_image/26250a42-991b-4b4b-8ff4-c390dd83394f-14899999.jpg) 13 | 14 | - 高内聚,低耦合https://blog.csdn.net/walid1992/article/details/73278304![img](https://api2.mubu.com/v3/document_image/69ab2ab0-0830-4c70-9594-c8bf1f25fc78-14899999.jpg) 15 | 16 | - Develop platform 和 Target platform不一样:会导致每个平台都要自己的编译器 17 | 18 | - Buliding 代码的过程 19 | 20 | 21 | 22 | - micro-controller:多了分配地址空间,把机器码的地址映射到实际地址空间![img](https://api2.mubu.com/v3/document_image/4da13dfd-2e64-44c2-88b6-5e6b7d78e62e-14899999.jpg) 23 | 24 | - 两个task之间通信,把数据的指针放到队列中![img](https://api2.mubu.com/v3/document_image/32fced8c-14f2-4f8f-893a-e7fc0433613e-14899999.jpg) 25 | 26 | - Timer:hard timer, soft timer![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/a243f395-4dab-4785-b462-802e67324f71-14899999.jpg)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/35b41917-1383-4b80-9ee3-4086db3e7461-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch15_Consistancy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch15_Consistancy 3 | date: 2021-04-08 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | 11 | --- 12 | 13 | # Consistancy 14 | 15 | ![image-20220528202001027](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202001027.png) 16 | 17 | ![image-20220528202013002](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202013002.png) 18 | 19 | ![image-20220528202023340](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202023340.png) 20 | 21 | ![image-20220528202031337](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202031337.png) 22 | 23 | ![image-20220528202047654](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202047654.png) 24 | 25 | 2pc:https://blog.csdn.net/nazeniwaresakini/article/details/104220178 26 | 27 | ![image-20220528202104064](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202104064.png) 28 | 29 | ![image-20220528202111089](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202111089.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch03_Portals.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 portals 3 | date: 2021-12-28 4 | tags: 5 | - Service 6 | - Service Computing 7 | categories: 8 | - Service Computing 9 | 10 | --- 11 | 12 | # Ch03 portals 13 | 14 | ## portlet:门户,模块![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/9192b1f9-cb19-4cbd-b63e-05a5c4dcca96-14899999.jpg) 15 | 16 | #### portlet有自己的规则, 是restricted,比如不允许在一个页面中的不同模块中使用不同的background,这样会使整个页面看上去很丑 17 | 18 | #### portlet和servlet的区别![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/5990caf1-e355-4429-bc6d-83e36865fbb6-14899999.jpg) 19 | 20 | #### potal的结构![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/a988004c-74ab-4cd0-904c-00918c251275-14899999.jpg)![](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/a988004c-74ab-4cd0-904c-00918c251275-14899999.jpg)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/97b07463-caa4-48fa-8532-619e2c70a907-14899999.jpg) 21 | 22 | #### 根据登录信息显示不同的portal![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/e854e8ef-68ed-4f1d-a7db-4faf8302df73-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Zookeeper/Ch01_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Basic 3 | date: 2020-11-21 4 | tags: 5 | - Zookeeper 6 | categories: 7 | - Zookeeper 8 | --- 9 | 10 | # Zookeeper概述 11 | 12 | - Zookeeper是一个基于观察者模式设计的分布式服务管理框架,主要是文件系统+通知机制![img](https://api2.mubu.com/v3/document_image/a61a59d1-c184-4df5-b715-aed25b1885e2-14899999.jpg) 13 | 14 | - Zookeeper的数据结构: 15 | 16 | - 可以看作一棵树,所有的节点ZNode都能用路径唯一标识,每个Znode默认存储1Mb的数据![img](https://api2.mubu.com/v3/document_image/4832a203-eb8d-46c6-8124-885ce23afbf6-14899999.jpg) 17 | 18 | - Zookeeper提供的功能: 19 | 20 | - 统一命名服务 21 | - 对应用,服务进行统一命名,如:域名是很多ip的命名 22 | 23 | - 统一配置管理 24 | 25 | - 要求: 26 | 27 | - 一般要求在一个集群中,所有的节点的配置信息都是一致的,如Kafka集群 28 | 29 | - 对配置文件修改后,希望能快速同步到各个节点上 30 | 31 | - 实现: 32 | 33 | - 将配置文件写到一个Znode上 34 | 35 | - 各个客户端服务器监听这个Znode 36 | 37 | - 一旦Znode的数据发生修改,zookeeper通知各个客户端的服务器 38 | 39 | - 统一集群管理 40 | 41 | - 要求: 42 | - 根据节点的实时状态做出一定的调整 43 | 44 | - 实现: 45 | 46 | - 可将这些节点信息写入Znode 47 | 48 | - 监听这些Znode来获取他的实时变化 49 | 50 | - 服务器动态上下线 51 | - 客户端能实时洞察到服务器的上下线变化 52 | 53 | - 软负载均衡 54 | - Zookeeper记录每台服务器的访问数,让访问数最少的服务器处理最新的客户端请求 -------------------------------------------------------------------------------- /Blog/blogs/2022/Kubernetes/Ch20_Helm.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch20 Helm 3 | date: 2022-06-12 4 | tags: 5 | - K8s 6 | - Kubernetes 7 | - Helm 8 | categories: 9 | - Kubernetes 10 | 11 | 12 | --- 13 | 14 | # Ch20 Helm 15 | 16 | Helm是 kubernetes的包管理器,包管理器类似于我们在ubuntu中使用的apt,在centos中使用的yum 或者python中的pip一样,能够快速查找,下载和安装软件包。helm由客户端组件helm和服务端组件Tiller组成,能够将一组众多分散的k8s资源打包统一管理,是查找、共享和使用为kubernetes构建软件的最佳方式 17 | 18 | 19 | 20 | ### centos7环境 的 k8s安装helm 3.7.1 21 | 22 | helm的官方网址: 23 | 24 | https://helm.sh/ 25 | 26 | heml需要在k8s的主节点上安装。 27 | 28 | 下载安装包进行安装,helm发布的版本地址如下: 29 | 30 | https://github.com/helm/helm/releases 31 | 32 | centos7环境,则选择 Linux amd64 这个版本,下载地址如下: 33 | 34 | https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz 35 | 36 | ```sh 37 | mkdir myhelm 38 | cd myhelm 39 | curl -SLO https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz 40 | tar -zxvf helm-v3.7.1-linux-amd64.tar.gz 41 | mv linux-amd64/helm /usr/local/bin/helm 42 | helm version 43 | ``` 44 | 45 | 46 | 47 | 例:安装solr operator 48 | 49 | https://apache.github.io/solr-operator/docs/local_tutorial#install-the-solr-operator 50 | 51 | 52 | 53 | 使用docker安装solr 54 | 55 | https://hub.docker.com/_/solr 56 | 57 | -------------------------------------------------------------------------------- /Blog/blogs/2022/TF/Ch04_ActivationFunction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 Activation Function 3 | date: 2022-06-25 4 | tags: 5 | - Tensorflow 6 | categories: 7 | - Tensorflow 8 | 9 | --- 10 | 11 | # Ch04 Activation Function 12 | 13 | ![image-20220625235322621](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625235322621.png) 14 | 15 | ![image-20220625235710516](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625235710516.png) 16 | 17 | ![image-20220625235901931](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625235901931.png) 18 | 19 | + sigmoid的导数在0-0.25之间 20 | 21 | 22 | 23 | ![image-20220625235958938](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625235958938.png) 24 | 25 | ![image-20220626000026344](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220626000026344.png) 26 | 27 | + 因为过多的负数输入Relu函数会导致梯度为0,不能更新参数,所以在随机初始化的时候应该避免过多初始为负数输入进ReLu![image-20220626000307965](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220626000307965.png) 28 | 29 | ![image-20220626000359059](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220626000359059.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch11_Dynamic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch11_Dynamic 3 | date: 2020-04-22 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | 10 | --- 11 | 12 | # 动态代理 13 | 14 | 比如有100个class中,一共有10000个方法需要在执行之前加上“开始执行”,在执行结束之后加上“方法执行完毕”,就可以使用动态代理。 15 | 16 | 被动态代理的方法必须写在接口内,而实体类不支持动态代理 17 | 18 | 具体步骤为: 19 | 20 | 1. 把被动态代理的方法写在接口内,并由一个真实的类class实现这个接口interface 21 | 2. 新建一个代理对象类proxyclass,实现接口InvocationHandler,成员变量为Object,将来传入被代理的类,并且提供传入参数的方法 22 | 3. 实现InvocationHandler中的invoke方法(将来method调用invoke方法时会自动跳转到此方法执行)【方法参数为:被代理的对象类;被代理的Method对象;方法参数】 23 | 4. 在方法体内写需要如何代理,先写被代理方法执行前需要添加的语句,再写method.invoke方法,第一个参数为被代理对象,第二个参数为被代理方法的参数,以便来确定唯一的一个方法。最后写被代理方法执行之后需要添加的语句。 24 | 5. 在main方法内创建一个被代理对象的interface上转型实例a,再创建一个代理对象的InvocationHandler接口的上转型实例,调用Proxy.newProxyInstance方法,返回值为interface实例(需要强制转换)【参数为:代理对象的类加载器;被代理对象的接口(使用getclass.getinterfaces()方法);代理对象】 25 | 6. 最后使用a.方法名调用方法 26 | 27 | 28 | 29 | 详情:https://blog.csdn.net/Dream_Weave/article/details/84183247 30 | 31 | 代码如下:![image-20230426223908163](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223908163.png) 32 | 33 | ![image-20230426223921771](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223921771.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/solr/Ch02_start2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 二进制文件安装 3 | date: 2022-06-10 4 | tags: 5 | - Solr 6 | categories: 7 | - Solr 8 | 9 | 10 | --- 11 | 12 | # Ch02 二进制文件安装 13 | 14 | 在官网下载binary releases:https://solr.apache.org/downloads.html 15 | 16 | 上传到服务器并解压, -C后面的参数是解压位置 17 | 18 | ```sh 19 | tar -xvzf ./solr-8.11.1.tgz -C /home/haoran/solr 20 | ``` 21 | 22 | 设置solr_home, 23 | 24 | ```sh 25 | # 只对当前shell生效 26 | export solr_home=/home/haoran/solr/solr-8.11.1 27 | 28 | 29 | # 或者切换到root下修改环境变量,对所有用户生效 30 | vim /etc/profile 31 | 添加 export solr_home=/home/haoran/solr/solr-8.11.1 32 | #运行以下代码重新加载环境变量 33 | source /etc/profile 34 | ``` 35 | 36 | 37 | 38 | 开启solr 39 | 40 | ```ps 41 | cd $solr_home 42 | bin/solr start -p 8983 43 | ``` 44 | 45 | 46 | 47 | 之后就可以通过服务器ip:端口访问到solradmin 48 | 49 | 创建一个solrCore![image-20220617160104349](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220617160104349.png) 50 | 51 | instanceDir设置为: /home/haoran/solr/solr-8.11.1/server/solr/configsets/sample_techproducts_configs 52 | 53 | 54 | 55 | 在$solr_home/example/exampledocs使用post.jar下载一些示例文件: 56 | 57 | ```sh 58 | java -jar -Dc=solr_test_collection post.jar *.xml 59 | ``` 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch01_Traditional.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_Traditional 3 | date: 2020-12-31 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | --- 11 | 12 | # Traditional Processing structure 13 | 14 | 15 | 16 | ### 传统架构 17 | 18 | ![image-20220528195009665](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195009665.png) 19 | 20 | **实时性好,但做不了高并发** 21 | 22 | ![image-20220528192822034](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528192822034.png) 23 | 24 | **ETL**-->Extract-Transform-Load的缩写,用来描述将[数据](https://baike.baidu.com/item/数据/5947370)从来源端经过抽取(extract)、[转换](https://baike.baidu.com/item/转换/197560)(transform)、加载(load)至目的端的过程。 25 | 26 | **可以处理高并发,但实时性不行** 27 | 28 | 29 | 30 | ### 流处理 31 | 32 | ![image-20220528195028231](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195028231.png) 33 | 34 | 修改或扩展十分麻烦,要修改两套系统 35 | 36 | ![image-20220528195039136](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195039136.png) 37 | 38 | ![image-20220528195048897](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528195048897.png) 39 | 40 | spark是从批处理演变过来,不是真正的流处理 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Blog/blogs/2022/RealTimeSE/Ch01_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Basic techniques 3 | date: 2022-12-19 4 | tags: 5 | - RealTimeSE 6 | categories: 7 | - RealTimeSE 8 | 9 | --- 10 | 11 | # Basic techniques 12 | 13 | 14 | 15 | 16 | 17 | - Function Tree 18 | 19 | - 同一层的抽象程度必须一样 20 | 21 | - 只有技术密切相关的才能有一个共同的父亲 22 | 23 | - Entity-Relationship Diagram(ERD) 24 | 25 | - Entity 26 | 27 | - Attribute![img](https://api2.mubu.com/v3/document_image/488117aa-067b-405d-8ba4-729e5e441b49-14899999.jpg) 28 | 29 | - Associations 30 | 31 | - Cardinalities![img](https://api2.mubu.com/v3/document_image/082c3aab-547d-4d76-a772-bacb25c25c4a-14899999.jpg) 32 | 33 | - State-Machine 34 | 35 | - 输出取决于输入和状态![img](https://api2.mubu.com/v3/document_image/11e30d9d-d762-4034-ba2a-63792f1b701c-14899999.jpg) 36 | 37 | - 最终状态也不一定要有,如![img](https://api2.mubu.com/v3/document_image/3c14cf3b-594e-4d1d-9a3b-708dca1b8f97-14899999.jpg) 38 | 39 | - Dicision table 40 | 41 | - 示意图:![img](https://api2.mubu.com/v3/document_image/78fbb6c7-d1c9-48ab-b141-ce0e7b7518da-14899999.jpg) 42 | 43 | - Redundancy 44 | 45 | - Contradiction 46 | 47 | - Completeness test 48 | 49 | - Number of theoretically possible cases = number of condition combinations 50 | 51 | - 计算有几种情况,表中列出了几种情况,并把没有的情况补齐 -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch09_Stream.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09_Stream 3 | date: 2019-04-21 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | 10 | --- 11 | 12 | **底层流:文件字节输入(出)流:FileInputStream, FileOutputStream(可能出现乱码)** 13 | 14 | ​ **文件字符输入(出)流:FileReader, FileWriter(解决乱码)** 15 | 16 | ​ **数组流:ByteArrayInputStream, ByteArrayOutputStream(目的可以是内存)** 17 | 18 | **高级流:缓冲流:BufferedReader, BufferedWriter(增加了文件读取能力,可以按行读取)** 19 | 20 | ​ **参数:Reader Writer** 21 | 22 | ​ **数据流:DataInputStream, DataOutputStream(可以机器无关)** 23 | 24 | ​ **参数:InputStream OutputStream** 25 | 26 | ​ **对象流:ObjectInputStream, ObjectOutputStream(把对象(Serializable)存入文件)** 27 | 28 | ​ **参数:InputStream OutputStream** 29 | 30 | **随机流:RandomAcessFile 既能读文件也能写文件,参数为File+mode** 31 | 32 | 数组流:流和源的目的地可以是文件,也可以是计算机内存 33 | 34 | 35 | 36 | ![image-20230426222559051](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222559051.png) 37 | 38 | 39 | 40 | 数据流:可以按照机器无关的风格读取数值,不再关心该数值为多少字节,是输入输出流的一个高上层流 41 | 42 | **注意:不能随意使用tostring方法,当一char数组需要转化为string输出时,必须使用string的构造方法:new String(c);否则会出现乱码** 43 | 44 | **Java源码中tostring方法的返回值是 类型@哈希值;** 45 | 46 | ![image-20230426222610270](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426222610270.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Linux/Ch00_Notes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Notes 3 | date: 2018-10-02 4 | tags: 5 | - Linux 6 | categories: 7 | - Linux 8 | 9 | --- 10 | 11 | # Notes 12 | 13 | 14 | 15 | ## 用户 16 | 17 | ubuntu 18 | 19 | ```sh 20 | useradd -m haoran #创建用户并创建home 21 | passwd haoran #改密码 22 | 23 | #加root权限 24 | chmod u+w /etc/sudoers 25 | 26 | vim /etc/sudoers # 在root ALL=(ALL) ALL这一行下面添加 27 | haoran ALL=(ALL) ALL 28 | 29 | chmod u-w /etc/sudoers 30 | 31 | #可以用密码登录 32 | sudo vi /etc/ssh/sshd_config 33 | 34 | # 改 PasswordAuthentication yes 35 | systemctl restart sshd 36 | 37 | #再次修改密码 38 | sudo haoran passwd 39 | 40 | #修改登录脚本 41 | usermod -s /bin/bash haoran 42 | ``` 43 | 44 | 45 | 46 | ubuntu22安装docker 47 | 48 | https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04 49 | 50 | 51 | 52 | docker 安装winery 53 | 54 | https://winery.readthedocs.io/en/latest/user/getting-started.html 55 | 56 | ```sh 57 | docker run -it -p 8080:8080 \ 58 | -e PUBLIC_HOSTNAME=localhost \ 59 | -e WINERY_FEATURE_RADON=true \ 60 | -e WINERY_REPOSITORY_PROVIDER=yaml \ 61 | -v :/var/repository \ 62 | -u `id -u` \ 63 | opentosca/radon-gmt 64 | ``` 65 | 66 | 67 | 68 | 69 | 70 | # Netplan 71 | 72 | 使用netplan配置网络 73 | 74 | https://blog.csdn.net/h4241778/article/details/110099003 75 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch02_CSS_Form.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 CSS&Form 3 | date: 2021-11-28 4 | tags: 5 | - Service 6 | - Service Computing 7 | - Css 8 | categories: 9 | - Service Computing 10 | --- 11 | 12 | # CSS&Form 13 | 14 | ## CSS 15 | 16 | + css结构![image-20220409180405045](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220409180405045.png) 17 | + css选择器![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/acbcb0fd-dba2-40ad-9e80-702f945ace93-14899999.jpg)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/47775d1a-a47c-4789-a643-26ee76d8db47-14899999.jpg) 18 | 19 | 20 | 21 | 详细教程:https://blog.csdn.net/wuyxinu/article/details/103583618 22 | 23 | 24 | 25 | ## Form 26 | 27 | + form结构:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/1a12ca03-5990-46d2-a468-ebfc7a78e5df-14899999.jpg) 28 | + target 属性规定在何处打开 action URL![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/11d70797-8c74-41fa-a486-34324233bb84-14899999.jpg) 29 | + input结构![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/ec9668bb-c1b4-4558-a777-92595cfc0af8-14899999.jpg) 30 | + 例子:单选按钮只有name一样才能实现互斥![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/4caf55cc-b799-4c24-98fe-ab0ffbac3b18-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Prometheus/Ch00_Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Intro 3 | date: 2023-01-26 4 | tags: 5 | - Prometheus 6 | categories: 7 | - Prometheus 8 | --- 9 | 10 | ![image-20230126220444524](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230126220444524.png) 11 | 12 | 13 | 14 | ![image-20230126221903587](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230126221903587.png) 15 | 16 | 17 | 18 | ![image-20230127160251110](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230127160251110.png) 19 | 20 | ![image-20230127231704423](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230127231704423.png) 21 | 22 | ![image-20230127234734729](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230127234734729.png) 23 | 24 | 25 | 26 | ## Components 27 | 28 | 29 | 30 | ![image-20230129174121443](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230129174121443.png) 31 | 32 | ![image-20230129173306450](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230129173306450.png) 33 | 34 | ![image-20230129174321921](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230129174321921.png) 35 | 36 | ![image-20230129174619322](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230129174619322.png) 37 | 38 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch03_Conditional.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 Conditional 3 | date: 2021-08-11 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | --- 10 | 11 | **@Conditional** 12 | 13 | 条件装配, 满足一定的条件进行组件装配: 14 | 15 | ![image-20230425175146003](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175146003.png) 16 | 17 | 例子: 18 | 19 | @ConditionalonBean:表示bean之间的依赖,只有容器中有指定的bean才会创建 20 | 21 | yxb只有dog的bean被创建了才会创建 22 | 23 | ![image-20230425175208965](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175208965.png) 24 | 25 | 26 | 27 | 也可以把该注解放在配置类之上 28 | 29 | ![image-20230425175220022](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175220022.png) 30 | 31 | 32 | 33 | **反向:意思是容器中没有指定bean的时候创建bean** 34 | 35 | ![image-20230425175231003](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175231003.png) 36 | 37 | 38 | 39 | 扩展:控制bean的加载顺序: 40 | 41 | https://blog.csdn.net/qianshangding0708/article/details/107373538 42 | 43 | 1. @DependsOn 44 | 45 | image-20230425175255042 46 | 47 | 2. 参数注入![image-20230425175316078](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175316078.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Haskell/Ch00_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00_Basic 3 | date: 2023-11-01 4 | tags: 5 | - Haskell 6 | categories: 7 | - Haskell 8 | 9 | --- 10 | 11 | # Basic 12 | 13 | https://www.haskell.org/ghcup/ win powershell安装 14 | 15 | 16 | 17 | 装完之后在cmd运行 18 | 19 | image-20231101170429572 20 | 21 | image-20231101170647726 22 | 23 | image-20231101171205710 24 | 25 | + !!表示索引值image-20231101171414133 26 | + image-20231101171459734 27 | + image-20231101172206909 28 | + image-20231101172134564 29 | + -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch01_JVM_basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_JVM基础 3 | date: 2019-05-12 4 | tags: 5 | - Java 6 | - JVM 7 | categories: 8 | - JVM 9 | --- 10 | 11 | # JVM架构图 12 | 13 | 14 | 15 | + **本地方法栈**:存储一些本地方法,与系统调用有关 16 | 17 | + **栈(线程)**:栈中存的局部变量,比如对象,存的是对象的引用。指向堆中的对象。每一个对象创建一个栈,每个方法为一个栈帧 18 | 19 | + **堆**:存储对象的值 20 | 21 | + **方法区(元空间)**:存储一些常量,静态变量以及类的信息。同样静态对象存的是引用,指向堆中的对象 22 | 23 | + **程序计数器**:存储线程运行到的位置,以便中断后继续运行![image-20211225211032148](C:\Users\YHR\AppData\Roaming\Typora\typora-user-images\image-20211225211032148.png) 24 | 25 | 26 | 27 | 28 | 29 | # JVM垃圾回收机制 30 | 31 | 32 | 33 | **堆中创建的对象存放空间:(在执行GC的时候会STW(stop the world,停止应用程序的所有线程))** 34 | 35 | + 对象创建先放在Eden区,等Eden区放满之后会进行一次minor GC,判断哪些对象没有引用指向它(使用可达性算法【从root开始找】并遍历堆中的所有对象),就删除对象并且把剩下的对象存入Survivor区中的一个,并把这些对象的年龄+1. 36 | 37 | + 当第二次Eden区放满之后,相同的算法会回收Eden以及上一个Survivor区,并把剩下的对象放入另一个Survivor区,并年龄+1。如此往复,直到某个对象的年龄到达15,就把他放入老年代。(若文件过大【对象大于surviver区域的百分之50】,则直接放入老年代) 38 | 39 | + 当老年代满了(或剩余空间小于minorgc时的平均内存大小)之后会执行full GC,相比minor GC,他会花费大量的时间。所以性能调优的时候首要缩短full GC 的次数。 40 | 41 | 42 | 43 | **对象结构**: 44 | 45 | ![image-20211225211307621](C:\Users\YHR\AppData\Roaming\Typora\typora-user-images\image-20211225211307621.png) 46 | 47 | 48 | 49 | ![image-20230425114252236](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114252236.png) 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Blog/blogs/2022/TF/Ch19_ResNet.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch19 ResNet 3 | date: 2022-07-03 4 | tags: 5 | - Tensorflow 6 | - ResNet 7 | categories: 8 | - Tensorflow 9 | --- 10 | 11 | # Ch19 ResNet 12 | 13 | 使用残差跳连,引入了前方信息,缓解梯度消失,使神经网络层数增加成为可能 14 | 15 | 16 | 17 | ![image-20220702175714219](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220702175714219.png) 18 | 19 | + 何凯明表示,单纯堆叠神经网络,会使神经网络退化,后面的神经网络会丢失最初始神经网络的特征,所以他用了跳连线,将前期的特征直接接到了后面![image-20220702175841954](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220702175841954.png) 20 | + ![image-20220702175939812](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220702175939812.png) 21 | 22 | ![image-20220702180100970](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220702180100970.png) 23 | 24 | + 如果维度不同,调用红色框里的代码 25 | + 如果维度相同,则直接相加 26 | 27 | ![image-20220703124149716](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220703124149716.png) 28 | 29 | + residual_path=true 用虚线连接, residual_path=false 用实线连接 30 | + block_list表示每个橙色块(block)中有几个ResnetBlock 31 | 32 | filter=卷积核的个数就是输出的深度![image-20220703124947423](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220703124947423.png) 33 | 34 | ![image-20220703131331007](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220703131331007.png) 35 | 36 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Kubernetes/Ch22_NFS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch22 NFS 3 | date: 2022-07-08 4 | tags: 5 | - K8s 6 | - Kubernetes 7 | - NFS 8 | categories: 9 | - Kubernetes 10 | --- 11 | 12 | # Ch22 NFS 13 | 14 | 15 | 16 | deploy a NFS service on one machine 17 | 18 | 新建一个目录,把它暴露给其他主机--->ch17 19 | 20 | 21 | 22 | 查看nfs:![image-20220710215237216](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220710215237216.png) 23 | 24 | then![image-20220708231120026](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220708231120026.png) 25 | 26 | ![image-20220710215518257](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220710215518257.png) 27 | 28 | ```yaml 29 | ``` 30 | 31 | 32 | 33 | ## 使用nfs做pv报错: 34 | 35 | ref:https://blog.csdn.net/m0_46090675/article/details/122276216 36 | 37 | ```sh 38 | [root@k8s-master ~]# kubectl logs nfs-9cf648dcf-c7w65 39 | 2022-01-02 06:19:36+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started. 40 | chown: changing ownership of '/var/lib/mysql/': Operation not permitted 41 | 42 | ``` 43 | 44 | 解决: 45 | 46 | ![image-20220711011648194](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220711011648194.png) 47 | 48 | 49 | 50 | 51 | 52 | NFS provisionor: https://computingforgeeks.com/configure-nfs-as-kubernetes-persistent-volume-storage/ 53 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JavaWeb/Ch00_CreateProject.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00_CreateProject 3 | date: 2019-05-20 4 | tags: 5 | - Java 6 | categories: 7 | - JavaWeb 8 | 9 | --- 10 | 11 | # 创建项目 12 | 13 | 新建一个webapplication的model 14 | 15 | 记得勾上这个 webapplication 16 | 17 | ![image-20230426155043226](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426155043226.png) 18 | 19 | 创建完的目录如下 20 | 21 | image-20230426155055304 22 | 23 | web目录下存放web工程的资源文件,比如html,css,js等 24 | 25 | WEB-INF为受服务器保护的目录,浏览器无法直接访问到这个目录 26 | 27 | web.xml是整个动态web工程的部署描述文件,在这里可以配置很多web工程的描述文件 28 | 29 | Servlet程序 30 | 31 | Fliter过滤器 32 | 33 | Listener监听器 34 | 35 | Session超时 36 | 37 | 38 | 39 | 可以修改时热部署(在更新资源文件时服务器同步更新) 40 | 41 | ![image-20230426155117475](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426155117475.png) 42 | 43 | 44 | 45 | 46 | 47 | # Tomcat配置项目的路径 48 | 49 | Tomcat的核心分为3个部分: 50 | 51 | (1)Web容器---处理静态页面; 52 | 53 | (2)catalina --- 一个servlet容器-----处理servlet; 54 | 55 | (3)还有就是JSP容器,它就是把jsp页面翻译成一般的servlet。 56 | 57 | 工程一般放在webapps文件夹下 58 | 59 | 当在访问时不写工程名时,默认访问ROOT工程:http://ip:port 60 | 61 | 当访问没有资源名时,默认访问index.html页面![image-20230426160147233](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426160147233.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/DistributedSystem/Ch06_Interprocess.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch06 Interprocess 3 | date: 2022-06-22 4 | tags: 5 | - Distributed System 6 | categories: 7 | - Distributed System 8 | --- 9 | 10 | # Interprocess+RMI+components+Graph 11 | 12 | 13 | 14 | - events:represent the state changes 15 | 16 | - socket建立方法:![img](https://api2.mubu.com/v3/document_image/c8927a8f-0007-4aee-9a02-d7cb97fc96d8-14899999.jpg) 17 | 18 | - stub负责marshing and unmarshing the data![img](https://api2.mubu.com/v3/document_image/aadb3d7c-52e6-49ae-b969-07f8e22a7975-14899999.jpg) 19 | 20 | - components放在container中,容器的功能等 21 | 22 | - gateway(flooding) Algorithm最小生成树 23 | 24 | 25 | 26 | - 根节点往其他所有节点发消息 27 | 28 | - 若节点收到消息,且没有成为树中的一个节点(没有parent),则认发消息的节点是parent,并把消息传递给除父节点外的其他节点 29 | 30 | - 若节点收到消息,且已经成为树中的一员,他会扔掉这个消息 31 | 32 | - 若一个节点同时受到两个消息,那么随机取一个消息的发送者为parent,并且扔掉另一个消息(如b和c同时发给e) 33 | 34 | - 特点:树的深度取决于每条信号的传输时间 35 | 36 | - 改进算法: 37 | 38 | 39 | 40 | - 节点在发送信息的时候带上到根节点的distance 41 | 42 | - 根节点的distance为0,没有收到消息的distance为正无穷 43 | 44 | - 收到消息后,认distance最小的一个节点为父节点,并且distance+1之后发给除父节点外的其他节点 45 | 46 | - 如果多个节点同时开始最小生成树算法,给每个节点id,在一个节点收到多个节点的message时,取id最大的节点的消息,并且加入这个节点的生成树算法![img](https://api2.mubu.com/v3/document_image/f6d287c1-8e42-44f8-b701-85ee53142186-14899999.jpg) 47 | 48 | - GHShttps://blog.csdn.net/houwanfeimark/article/details/108568819 -------------------------------------------------------------------------------- /Blog/blogs/2022/TF/Ch03_Learningrate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch03 Learning rate 3 | date: 2022-06-24 4 | tags: 5 | - Tensorflow 6 | categories: 7 | - Tensorflow 8 | --- 9 | 10 | # Ch03 Learning rate 11 | 12 | ```py 13 | import tensorflow as tf 14 | 15 | # where函数(条件语句,真返回a,假) 16 | a = tf.constant([1, 2, 3, 1, 1]) 17 | b = tf.constant([0, 1, 3, 4, 5]) 18 | c = tf.where(tf.greater(a, b), a, b) # 若a>b,返回a对应位置的元素,否则返回b对应位置的元素 19 | print("c:", c) 20 | 21 | 22 | # 产生随机数 23 | rdm = np.random.RandomState(seed=1) 24 | a = rdm.rand() 25 | b = rdm.rand(2, 3) 26 | print("a:", a) 27 | print("b:", b) 28 | 29 | # 将两个数组按垂直方向叠加,变成一个二维数组 30 | a = np.array([1, 2, 3]) 31 | b = np.array([4, 5, 6]) 32 | c = np.vstack((a, b)) 33 | print("c:\n", c) 34 | 35 | # 生成等间隔数值点(起始值,结束值,步长)几个就生成几维数组 36 | x, y = np.mgrid[1:3:1, 2:4:0.5] 37 | # 将x, y拉直,并合并配对为二维张量,生成二维坐标点 38 | grid = np.c_[x.ravel(), y.ravel()] 39 | print("x:\n", x) # 为了保证两个数组的维度相同,所以都是2行4列 40 | print("y:\n", y) 41 | print("x.ravel():\n", x.ravel()) 42 | print("y.ravel():\n", y.ravel()) 43 | print('grid:\n', grid) 44 | ``` 45 | 46 | ![image-20220625234030553](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625234030553.png) 47 | 48 | ![image-20220625234934344](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625234934344.png)![image-20220625235112198](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220625235112198.png) 49 | -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/Ch02_CRUD.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 CRUD 3 | date: 2022-12-05 4 | tags: 5 | - ElasticSearch 6 | - ES 7 | categories: 8 | - ElasticSearch 9 | 10 | 11 | --- 12 | 13 | 14 | 15 | ![image-20221205164541505](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205164541505.png) 16 | 17 | ![image-20221205164623835](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205164623835.png) 18 | 19 | ![image-20221205164849433](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205164849433.png) 20 | 21 | # ![image-20221205173717454](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205173717454.png) 22 | 23 | ![image-20221205173812665](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205173812665.png) 24 | 25 | + ![image-20221205173936757](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205173936757.png) 26 | 27 | ## 插入文档 28 | 29 | ![image-20221205174549262](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205174549262.png) 30 | 31 | ![image-20221205174946423](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205174946423.png) 32 | 33 | ![image-20221205175250452](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205175250452.png) 34 | 35 | ![image-20221205175350115](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221205175350115.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch05_ConfigureProperties.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05 ConfigureProperties 3 | date: 2021-08-13 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | 10 | 11 | --- 12 | 13 | 可以读取properties文件中的配置并进行绑定,**prefix中不能有大写字母!!!** 14 | 15 | ![image-20230425175548244](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175548244.png) 16 | 17 | ![image-20230425175555320](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175555320.png) 18 | 19 | 测试: 20 | 21 | ![image-20230425175606575](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175606575.png) 22 | 23 | 24 | 25 | 如果在使用第三方类的配置绑定功能,类中没有@Component,那么可以用以下方式: 26 | 27 | ![image-20230425175617416](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175617416.png) 28 | 29 | 30 | 31 | 开启配置绑定功能,并把People注册到容器中 32 | 33 | ![image-20230425175629735](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175629735.png) 34 | 35 | 36 | 37 | 出现如下错误: 38 | 39 | ![image-20230425175640017](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175640017.png) 40 | 41 | 42 | 43 | 在pom.xml中增加如下依赖 44 | 45 | ```xml 46 | 47 | org.springframework.boot 48 | spring-boot-configuration-processor 49 | true 50 | 51 | ``` 52 | 53 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JavaWeb/Ch06_Servlet.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch06_Filter 3 | date: 2019-05-30 4 | tags: 5 | - Java 6 | categories: 7 | - JavaWeb 8 | 9 | 10 | --- 11 | 12 | # Filter 13 | 14 | 是一个接口,作用是拦截请求,过滤响应 15 | 16 | 过滤器常见的场景有: 17 | 18 | 1.权限检查 19 | 20 | 2.日志操作 21 | 22 | 3.事务管理.....![image-20230426161442960](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161442960.png) 23 | 24 | 25 | 26 | Example: 27 | 28 | 要求:在web项目下新建一个admin文件夹,使得里面的文件(html文件,jsp文件等等)只有在用户登录之后才能访问。 29 | 30 | 由于用户登录后会把登录信息都保存到session域中,所以要检查用户是否登录,可以判断session中是否包含用户的信息即可。 31 | 32 | 配置web.xml文件 33 | 34 | ![image-20230426161456326](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161456326.png) 35 | 36 | 37 | 38 | 39 | 40 | ## Filter的生命周期: 41 | 42 | 1. 构造器方法 43 | 44 | 2. init初始化方法 45 | 46 | ​ 第1,2步在web工程被创建的时候就被执行 47 | 48 | 3. doFilter过滤方法 49 | 50 | ​ 第三步每次拦截到请求就会执行 51 | 52 | 4. destory销毁 53 | 54 | ​ 第4步,停止web工程的时候就会销毁 55 | 56 | FilterConfig类: 57 | 58 | tomcat每次创建一个filter时,也会创建一个FilterConfig类,用来存放filter配置信息(在init方法中可以在使用) 59 | 60 | 1. 获取Filter的名称 61 | 62 | 2. 获取Filter的init-para初始化参数(在web.xml中) 63 | 64 | 3. 获取servletContext对象![image-20230426161518360](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161518360.png) 65 | 66 | 67 | 68 | 69 | 70 | ## FilterChain 71 | 72 | ![image-20230426161542522](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161542522.png) 73 | 74 | -------------------------------------------------------------------------------- /Blog/blogs/2022/solr/Ch01_start.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 docker安装(有问题,待解决) 3 | date: 2022-04-19 4 | tags: 5 | - Solr 6 | categories: 7 | - Solr 8 | 9 | --- 10 | 11 | # Ch01 docker安装(有问题,待解决) 12 | 13 | ## install 14 | 15 | 根据docker官网,在服务器的docker中安装solr 16 | 17 | https://hub.docker.com/_/solr 18 | 19 | 20 | 21 | ```sh 22 | docker pull solr 23 | docker volume create solrVolume 24 | docker volume inspect solrVolume 25 | # /var/lib/docker/volumes/solrVolume/_data 26 | # docker run -d --name solr -p 8983:8983 -e SOLR_OPTS="$SOLR_OPTS -Dsolr.allowPaths=*" -v # solrVolume:/opt/solr-8.11.1 solr 27 | docker run -d --name solr -p 8983:8983 -v solrVolume:/opt/solr-8.11.1 solr 28 | ``` 29 | 30 | 31 | 32 | 在启动的时候通过命令改配置文件solr.in.sh: 33 | 34 | ![image-20220617114424607](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220617114424607.png) 35 | 36 | 37 | 38 | 39 | 40 | 使用服务器ip+端口可以访问solr admin 41 | 42 | 43 | 44 | ## Solr文件结构 45 | 46 | ![image-20220615221836029](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220615221836029.png) 47 | 48 | 49 | 50 | ## 新建一个core 51 | 52 | 找到配置文件的位置: 53 | 54 | 物理机: 55 | 56 | /var/lib/docker/volumes/solrVolumn/_data/server/solr/configsets/sample_techproducts_configs 57 | 58 | 59 | 60 | docker容器内: 61 | 62 | /opt/solr-8.11.1/server/solr/configsets/sample_techproducts_configs 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 使用容器内的位置作为instanceDir: 71 | 72 | > 有问题,待解决 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch14_FaultTorlance.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch14_FaultTorlance 3 | date: 2021-04-08 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | --- 11 | 12 | # Fault Torlance 13 | 14 | ![image-20220528201655550](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201655550.png) 15 | 16 | ![image-20220528201704106](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201704106.png) 17 | 18 | ![image-20220528201716943](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201716943.png) 19 | 20 | ![image-20220528201732880](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201732880.png) 21 | 22 | ![image-20220528201742555](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201742555.png) 23 | 24 | ![image-20220528201757247](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201757247.png) 25 | 26 | ![image-20220528201805417](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201805417.png) 27 | 28 | ![image-20220528201821143](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201821143.png) 29 | 30 | 可以设置检查点,第一个参数为多久保存一次检查点,第二个参数为检查点的模式,一般为exactly-once【状态一致性的级别】 31 | 32 | ```java 33 | env.enableCheckpointing(5000, CheckpointingMode.AT_LEAST_ONCE);//每个5秒执行一次 34 | ``` 35 | 36 | ![image-20220528201854176](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528201854176.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Lab_01.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lab 01 3 | date: 2022-05-28 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | --- 10 | 11 | # Lab 01 12 | 13 | - unsafe concurrency可以用automic operation来解决,但是代码过长又不能保证,所以用lock 14 | 15 | - 自旋锁可以用在:使用关中断来保证不会发声死锁,因为时间很短 16 | 17 | - 读写自旋锁:分为读锁和写锁 18 | 19 | - 读可以多个一起读,但是只有在没有写的时候 20 | 21 | - 写的时候其他进程都被阻塞 22 | 23 | - 信号量机制:表示一个资源的剩余个数,等待获取信号量的进程会进入等待队列,但是不会像自旋锁一样占用cpu,因为当有信号量的时候,它会被被动唤醒 24 | 25 | - mutex是semaphores=1的情况(互斥) 26 | 27 | - 程序top half:把不耗时部分放到top half,不可中断 28 | 29 | - 程序bottom half:可被中断 30 | 31 | - sequential locks:引入版本号,write的时候会+1,read会一直重试直到开始读的sequential number=结束读的sequential number。适用于有很多reader,没有很多writer的情况 32 | 33 | - Pre-emption Disabling: pre-emptive抢占式的,可以通过设置关键区不可抢占来实现同步![img](https://api2.mubu.com/v3/document_image/74343c53-e834-4d63-876d-61fa3839a1a6-14899999.jpg) 34 | 35 | - read barrier,write barrier,阻止指令重排序的 36 | 37 | - 加之前:![img](https://api2.mubu.com/v3/document_image/cee5169d-bda6-4f14-8e40-f547105061ac-14899999.jpg) 38 | 39 | - 加之后:![img](https://api2.mubu.com/v3/document_image/0a084d39-d487-4d6d-8058-f956355768af-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/7fbae135-2ec2-4a57-bd2d-af8546fea763-14899999.jpg) 40 | 41 | - RCU:读进程不会被阻塞 42 | 43 | 44 | 45 | - 多用于传递的不是值而是指针的情况:Only works on dynamically allocated data that is referenced via pointers 46 | 47 | - summary![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/42e947b8-b7a8-4ac7-9ef3-02cfd17c010d-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/React/Ch01_install.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 install react 3 | date: 2022-05-11 4 | tags: 5 | - react 6 | categories: 7 | - React 8 | 9 | --- 10 | 11 | # Install react 12 | 13 | 首先要装有nvm和nodejs 14 | 15 | 先安装nvm,再在nvm安装目录下新建一个nodejs文件夹,再用nvm install安装 16 | 17 | 修改环境变量到新建的nodejs目录下 18 | 19 | ![image-20220511104143293](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220511104143293.png) 20 | 21 | 22 | 23 | ```pow 24 | nvm install node版本包 25 | nvm ls 查看安装了哪些node版本包 26 | nvm use node版本包(指定使用哪个版本的node) 27 | 记住一定要先修改环境变量再安装node包 28 | ``` 29 | 30 | 31 | 32 | 33 | 34 | 使用脚手架工具安装react 35 | 36 | ```power 37 | npx create-react-app demo 38 | ``` 39 | 40 | 41 | 42 | + 查看新项目如何运行,看package.json文件的scripts 部分 43 | 44 | + package-lock.json是索引到本机上的一些包的 45 | 46 | + public放的是静态文件,所有的东西都会被注入到root里面![image-20220511115210536](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220511115210536.png) 47 | 48 | + src文件夹下所有的文件都可以删除,新建一个index.js, 按照模板写 49 | 50 | + ```jsx 51 | import ReactDOM from 'react-dom' 52 | 53 | // ReactDOM.render(组件名称,要注入的元素) 54 | ReactDOM.render( 55 |

hello

, 56 | document.getElementById("root") 57 | ) 58 | ``` 59 | 60 | + 在vscode中如果保存文件有问题,会自动格式化和红线 61 | 62 | + **禁用vscode里面的JS-CSS-HTML Formatter的插件, 然后重启vscode就不报错了** 63 | 64 | ![image-20220511142627179](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220511142627179.png) 65 | 66 | 67 | 68 | + 使用npm run start来启动项目 69 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JavaWeb/Ch02_Response.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Response 3 | date: 2019-05-27 4 | tags: 5 | - Java 6 | categories: 7 | - JavaWeb 8 | 9 | --- 10 | 11 | # Response 12 | 13 | 14 | 15 | ![image-20230426155551158](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426155551158.png) 16 | 17 | 18 | 19 | ## MIME 20 | 21 | ![image-20230426155606286](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426155606286.png) 22 | 23 | 24 | 25 | ## HttpServletResponse类 26 | 27 | 每次请求过来,Tomcat都会自动创建一个HttpServletResponse类传递给servlet使用,表示所有响应的信息。 28 | 29 | --- 30 | 31 | 向客户端传送消息的两种输出流: 32 | 33 | 字节流:getOutputStream(); 常用于下载(传递二进制流) 34 | 35 | 字符流:getWriter(); 常用于回传字符串(常用) 36 | 37 | 两种流只能使用一个,否则就会报错 38 | 39 | --- 40 | 41 | 使用字符流传消息:(解决中文乱码的问题) 42 | 43 | ```java 44 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 45 | //解决打印中文乱码的问题,设置服务端回传的数据格式 46 | response.setCharacterEncoding("UTF-8"); 47 | //通过请求头设置浏览器解析数据的格式 48 | response.setHeader("Content-type","text/html; charset=UTF-8"); 49 | //也可以使用这个来设置数据的格式,等同于上面两个方法的合成,但是此方法只有在调用获取流方法之前调用才有效 50 | response.setContentType("text/html; charset=UTF-8"); 51 | //往客户端回传字符串 52 | PrintWriter writer = response.getWriter(); 53 | writer.write("中文"); 54 | 55 | } 56 | ``` 57 | 58 | ![image-20230426161933104](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161933104.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Jenkins/Ch01_Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_Introduction 3 | date: 2022-09-19 4 | tags: 5 | - Jenkins 6 | categories: 7 | - Jenkins 8 | 9 | --- 10 | 11 | # Introduction 12 | 13 | ![image-20220806210421666](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220806210421666.png) 14 | 15 | 16 | 17 | ## k8s install jenkins 18 | 19 | https://blog.csdn.net/qq_34285557/article/details/124763695 20 | 21 | https://www.jenkins.io/doc/book/installing/kubernetes/#install-jenkins-with-yaml-files 22 | 23 | https://www.cnblogs.com/diskld/p/15736588.html 24 | 25 | 26 | 27 | ## deployment 28 | 29 | ```yaml 30 | apiVersion: apps/v1 31 | kind: Deployment 32 | metadata: 33 | name: jenkins 34 | spec: 35 | replicas: 1 36 | selector: 37 | matchLabels: 38 | app: jenkins 39 | template: 40 | metadata: 41 | labels: 42 | app: jenkins 43 | spec: 44 | containers: 45 | - name: jenkins 46 | image: jenkins/jenkins:lts-jdk11 47 | ports: 48 | - containerPort: 8080 49 | volumeMounts: 50 | - name: jenkins-home 51 | mountPath: /var/jenkins_home 52 | volumes: 53 | - name: jenkins-home 54 | emptyDir: { } 55 | ``` 56 | 57 | 58 | 59 | ## Service 60 | 61 | ```yaml 62 | apiVersion: v1 63 | kind: Service 64 | metadata: 65 | name: jenkins 66 | spec: 67 | type: NodePort 68 | ports: 69 | - port: 7096 70 | targetPort: 8080 71 | selector: 72 | app: jenkins 73 | ``` 74 | 75 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JavaWeb/Ch07_File.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07_File 3 | date: 2019-06-02 4 | tags: 5 | - Java 6 | categories: 7 | - JavaWeb 8 | --- 9 | 10 | # File 11 | 12 | 文件上传: 13 | 14 | 1. 要有一个form标签,method=post请求 15 | 16 | 2. form标签的encType标签必须为multipart/form-data值 17 | 18 | 3. 在form中使用input type=“file”添加上传的文件 19 | 20 | 4. 编写服务器代码来处理上传的数据 21 | 22 | ![image-20230426161811775](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161811775.png) 23 | 24 | 25 | 26 | ```html 27 |
28 | username: 29 | photo: 30 | 31 |
32 | ``` 33 | 34 | 35 | 36 | 服务端处理:输出传入的文件 37 | 38 | ```java 39 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 40 | // System.out.println("12313"); 41 | // 获取表单数据的输入流 42 | ServletInputStream inputStream = request.getInputStream(); 43 | //新建一个buffer,用来接收从流中读到的数据 44 | byte[] buffer = new byte[1024000]; 45 | int len = inputStream.read(buffer); 46 | System.out.println(new String(buffer,0,len)); 47 | 48 | } 49 | ``` 50 | 51 | https://www.bilibili.com/video/BV1Y7411K7zz?p=216&spm_id_from=pageDriver(P213-221) 52 | 53 | 54 | 55 | ![image-20230426161847438](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426161847438.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch04_Generic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04_Generic 3 | date: 2019-04-15 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | --- 10 | 11 | # Generic 12 | 13 | Java中的泛型只会在编译过程中有效,以此来检查代码的正确性,正确检验泛型结果后,会将泛型的信息擦出,并且在对象进入或离开方法边界处,添加类型检查和类型转换的方法。 14 | 15 | 也就是说,泛型信息不会进入到运行时阶段。 16 | 17 | 泛型分为: 18 | 19 | **泛型类,泛型接口,泛型方法** 20 | 21 | **泛型类:1.泛型不同的引用不能互相赋值** 22 | 23 | ​ **2.泛型默认为Object** 24 | 25 | ![image-20230426214708809](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214708809.png) 26 | 27 | ![image-20230426214700648](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214700648.png) 28 | 29 | 30 | 31 | **泛型接口:如果一个class实现了泛型接口,并且没有指定数据类型,那么class在声明时也要加泛型,如下:** 32 | 33 | ![image-20230426214738457](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214738457.png) 34 | 35 | 36 | 37 | **泛型方法:可变参数类型的泛型方法,在声明时必须加上泛型:** 38 | 39 | **在类上定义的泛型,可以在普通方法中使用,但是不能在静态方法中使用。** 40 | 41 | **也就是说普通方法中既可以用类中的泛型也可以用自己定义的泛型。** 42 | 43 | 静态方法中不能使用类定义的泛型只能使用自己定义的泛型。![image-20230426214803872](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214803872.png) 44 | 45 | 46 | 47 | **泛型通配符:** 48 | 49 | **无限制:** 50 | 51 | **有限制: 只有Person及其子类才可以传入;** 52 | 53 | ​ ** 只有Person及其父类才可以传入;** 54 | 55 | ​ ** 只有实现了Comparable接口的类才可以传入;** 56 | 57 | 58 | 59 | ![image-20230426214816599](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214816599.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Leetcode/Ch10_More.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch10 More 3 | date: 2023-08-22 4 | tags: 5 | - Stack 6 | categories: 7 | - Leetcode 8 | 9 | 10 | --- 11 | 12 | # 13 | 14 | ### [1365. 有多少小于当前数字的数字](https://leetcode.cn/problems/how-many-numbers-are-smaller-than-the-current-number/) 15 | 16 | ![image-20230822234623167](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230822234623167.png) 17 | 18 | + 暴力 19 | 20 | ```java 21 | class Solution { 22 | public int[] smallerNumbersThanCurrent(int[] nums) { 23 | int[] result = new int[nums.length]; 24 | int tmp = 0; 25 | for(int i = 0; i < nums.length; i++){ 26 | for(int j = 0; j < nums.length; j++){ 27 | if(nums[j] < nums[i]) tmp ++; 28 | } 29 | result[i] = tmp; 30 | tmp = 0; 31 | } 32 | 33 | return result; 34 | 35 | } 36 | } 37 | ``` 38 | 39 | + Hash 40 | 41 | ```java 42 | public int[] smallerNumbersThanCurrent(int[] nums) { 43 | Map map = new HashMap<>(); // 记录数字 nums[i] 有多少个比它小的数字 44 | int[] res = Arrays.copyOf(nums, nums.length); 45 | Arrays.sort(res); 46 | for (int i = 0; i < res.length; i++) { 47 | if (!map.containsKey(res[i])) { // 遇到了相同的数字,那么不需要更新该 number 的情况 48 | map.put(res[i], i); 49 | } 50 | } 51 | 52 | for (int i = 0; i < nums.length; i++) { 53 | res[i] = map.get(nums[i]); 54 | } 55 | 56 | return res; 57 | } 58 | ``` 59 | 60 | -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Ch11_File.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch11 File 3 | date: 2022-04-26 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | 10 | --- 11 | 12 | # File 13 | 14 | - File attributes![img](https://api2.mubu.com/v3/document_image/d9705406-eaf4-4608-afc0-3df0d87580a7-14899999.jpg) 15 | 16 | - File operations![img](https://api2.mubu.com/v3/document_image/c1d73442-e37e-4d28-96c0-1ad2fcc42292-14899999.jpg) 17 | 18 | - LOCK![img](https://api2.mubu.com/v3/document_image/114d4c52-7eea-470a-9d92-109b9b030a5d-14899999.jpg) 19 | 20 | - 顺序访问和随机访问![img](https://api2.mubu.com/v3/document_image/2a229366-9a45-4efc-9b78-95c0080fe798-14899999.jpg) 21 | 22 | - index![img](https://api2.mubu.com/v3/document_image/4e9281f7-3200-4c27-95e3-089d82994a8e-14899999.jpg) 23 | 24 | - 文件目录结构: 25 | 26 | - single-level![img](https://api2.mubu.com/v3/document_image/65b2d57a-7d89-4c37-a2d9-3fbeb9711edd-14899999.jpg) 27 | 28 | - two-level![img](https://api2.mubu.com/v3/document_image/53385792-7d70-46b0-9cf4-6033729b1cf3-14899999.jpg) 29 | 30 | - Tree-Structured Directories![img](https://api2.mubu.com/v3/document_image/7ef10297-36d2-42a4-b165-2a02b6e3603a-14899999.jpg) 31 | 32 | - Acyclic-Graph Directories无环图![img](https://api2.mubu.com/v3/document_image/8c3234b3-21fe-43da-a064-48a174cca0d8-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/7c6a2e23-8128-417f-9b8a-aa12404cd0f9-14899999.jpg) 33 | 34 | - File System Mounting(一个文件系统必须被挂载之后才可以被访问,挂载的目录叫做挂载点)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/b42fb66a-a675-42b7-8d78-11b915c8a5c8-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Notes/Ch00_pressure.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Pressure 3 | date: 2022-04-09 4 | tags: 5 | - Test 6 | - Test 7 | categories: 8 | - Notes 9 | 10 | --- 11 | 12 | # 13 | 14 | 15 | 16 | # .. 17 | 18 | # 压测架构 19 | 20 | ![image-20231022133412952](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231022133412952.png) 21 | 22 | 23 | 24 | ## 熔断![image-20231022133543574](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231022133543574.png) 25 | 26 | + 调别人的服务,别人的服务RT响应过高,会导致整个链路的雪崩 27 | + 就直接不去调用这个服务了 28 | 29 | ## 限流 30 | 31 | + 队列 + 漏斗:**漏桶算法的实现往往依赖于队列,请求到达如果队列未满则直接放入队列,然后有一个处理器按照固定频率从队列头取出请求进行处理。如果请求量大,则会导致队列满,那么新来的请求就会被抛弃。** 32 | 33 | + 令牌桶:令牌桶算法则是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。桶中存放的令牌数有最大上限,超出之后就被丢弃或者拒绝。当流量或者网络请求到达时,每个请求都要获取一个令牌,如果能够获取到,则直接处理,并且令牌桶删除一个令牌。如果获取不同,该请求就要被限流,要么直接丢弃,要么在缓冲区等待。 34 | 35 | + Guava**https://zhuanlan.zhihu.com/p/60979444**![image-20231022221215336](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231022221215336.png) 36 | 37 | + ### 平滑突发限流 38 | 39 | 使用 `RateLimiter`的静态方法创建一个限流器,设置每秒放置的令牌数为5个。返回的RateLimiter对象可以保证1秒内不会给超过5个令牌,并且以固定速率进行放置,达到平滑输出的效果。`RateLimiter`由于会累积令牌,所以可以应对突发流量。 40 | 41 | + ### 平滑预热限流 42 | 43 | `RateLimiter`的 `SmoothWarmingUp`是带有预热期的平滑限流,它启动后会有一段预热期,逐步将分发频率提升到配置的速率。 比如下面代码中的例子,创建一个平均分发令牌速率为2,预热期为3分钟。由于设置了预热时间是3秒,令牌桶一开始并不会0.5秒发一个令牌,而是形成一个平滑线性下降的坡度,频率越来越高,在3秒钟之内达到原本设置的频率,以后就以固定的频率输出。这种功能适合系统刚启动需要一点时间来“热身”的场景。 44 | 45 | + Guava`RateLimiter`只能用于单机的限流,如果想要集群限流,则需要引入 `redis`或者阿里开源的 `sentinel`中间件 46 | 47 | ## 降级 48 | 49 | + 对非核心模块降级,就是在业务的高峰期,把非核心功能隔离开,或者直接下线(比如在大促的时候,商品评价不能改变) 50 | 51 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Algorithm/Ch01_DutchFlag.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Dutch Flag 3 | date: 2019-07-01 4 | tags: 5 | - Algorithm 6 | categories: 7 | - Algorithm 8 | --- 9 | 10 | # Dutch Flag 11 | 12 | 荷兰国旗是由红白蓝3种颜色的条纹拼接而成,如下图所示: 13 | 14 | ![image-20230412115317305](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230412115317305.png) 15 | 16 | 我们把荷兰国旗问题用数组的形式表达一下是这样的: 17 | 18 | 给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。 19 | 20 | 例如,给定数组:[2, 3, 1, 9, 7, 6, 1, 4, 5],给定一个值4,那么经过处理原数组可能得一种情况是:[2, 3, 1, 1, 4, 9, 7, 6, 5],需要注意的是,小于4的部分不需要有序,大于4的部分也不需要有序,返回等于4部分的左右两个下标,即[4, 4] 21 | 22 | - less 用于记录小于 4 的区域的右下标,初始为-1,代表不存在 23 | - more 用于记录大于 4 区域的左下标,初始为9,代表不存在 24 | - L 用于正在遍历的元素的下标,初始值为0 25 | - 从 arr[L] 即 arr[0] 开始遍历数组 26 | 27 | ​ 如果 arr[L] > 4, 交换 arr[++ less] 和 arr[L++] 的值 28 | 29 | ​ 如果 arr[L] < 4, 交换 arr[--more] 和 arr[L] 的值 30 | 31 | ​ 如果 arr[L] = 4, 不交换,L++,直接遍历下一个值 32 | 33 | - 当 L >= more,退出循环。 34 | 35 | ```java 36 | public static int[] partition(int[] arr, int L, int R, int p) { 37 | int less = L - 1; 38 | int more = R + 1; 39 | while(L < more) { 40 | if(arr[L] < p) { 41 | swap(arr, ++less, L++); 42 | } else if (arr[L] > p) { 43 | swap(arr, --more, L);//注意这边l不需要加,因为是单向扫描 44 | } else { 45 | L++; 46 | } 47 | } 48 | return new int[] { less + 1, more - 1 }; 49 | } 50 | 51 | public static void swap(int[] arr, int i, int j) { 52 | int temp = arr[i]; 53 | arr[i] = arr[j]; 54 | arr[j] = temp; 55 | } 56 | ``` 57 | 58 | -------------------------------------------------------------------------------- /Blog/blogs/2022/XML/Ch02_XPATH.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_XPATH 3 | date: 2019-11-30 4 | tags: 5 | - xml 6 | - XPATH 7 | categories: 8 | - XML 9 | 10 | --- 11 | 12 | # XPATH 13 | 14 | ![image-20220529112754939](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112754939.png) 15 | 16 | ![image-20220529112825290](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112825290.png) 17 | 18 | ![image-20220529112839371](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112839371.png)![image-20220529112848112](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112848112.png)![image-20220529112857601](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112857601.png)![image-20220529112910228](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112910228.png)![image-20220529112920161](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112920161.png)![image-20220529112929323](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112929323.png)![image-20220529112939158](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112939158.png) 19 | 20 | ![image-20220529112948176](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112948176.png)![image-20220529112956593](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112956593.png)![image-20220529113007290](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113007290.png)![image-20220529113022590](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529113022590.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/MySQL/Ch00_Index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Index 3 | date: 2019-12-07 4 | tags: 5 | - DB 6 | categories: 7 | - DB 8 | 9 | --- 10 | 11 | # Index 12 | 13 | **索引是帮助mysql高效获取数据的排好序的数据结构** 14 | 15 | ​ **所有的数据是存在磁盘上的,当查找到了之后,会加载到内存里** 16 | 17 | - 二叉树 18 | - 红黑树 19 | - hash表:不常用,因为单值查找比较快,而范围查找不能实现 20 | - B-tree 21 | 22 | 联合索引:按照字段逐个比较 23 | 24 | 一般都用b树或b+树 25 | 26 | - 二叉树:不平衡 27 | 28 | - 红黑树(是一种平衡二叉树):由于一个节点只能存一组数据,还是开销太大 29 | 30 | - b树(多叉平衡树):一个节点可以存放多个数据,数据索引从左到右依次递增![image-20230425105018405](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425105018405.png) 31 | 32 | - b+树:key值有冗余(如图,15不止一个),只有在叶子节点才存放value 33 | 34 | ​ 每一个节点大小是固定的,不把数据存在非叶节点的原因是能使其存储更多的key值 35 | 36 | ​ 多了横向指针,目的是在范围查找的时候速度更快,一次定位之后就可以查找![image-20230425105127062](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425105127062.png) 37 | 38 | - mysql存储引擎(表级别,非数据库级别): 39 | 40 | - InnoDB索引实现:表数据文件本身就是按照b+树组织的一个索引文件(ibd) 41 | 42 | + 聚集索引,叶节点本身就包含了完整的数据记录 43 | 44 | + InnoDB一定要有主键,而且推荐整型自增型主键,为什么不使用uuid 45 | 46 | ![image-20230425105228310](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425105228310.png) 47 | 48 | - mylSM索引实现:索引文件(MYI)和数据文件(MYD)是分离的(非聚集) 49 | + 叶节点存放数据所在地址 50 | 51 | ![image-20230425105414854](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425105414854.png) 52 | 53 | ![image-20230425105516062](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425105516062.png) 54 | 55 | 非主键索引存储的是name以及主键的id,主键索引存储的是一行数据 56 | 57 | 先查name索引,后查主键索引 58 | 59 | ![image-20230425105556642](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425105556642.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/ElasticSearch/Ch00_Intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Intro 3 | date: 2022-12-03 4 | tags: 5 | - ElasticSearch 6 | - ES 7 | categories: 8 | - ElasticSearch 9 | --- 10 | 11 | ## 12 | 13 | ![image-20221203094914246](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221203094914246.png) 14 | 15 | ![image-20221203100650607](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221203100650607.png) 16 | 17 | ![image-20221204145545535](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204145545535.png) 18 | 19 | ![image-20221204145934245](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204145934245.png) 20 | 21 | ![image-20221204150137416](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204150137416.png) 22 | 23 | ![image-20221204151919279](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204151919279.png) 24 | 25 | ![image-20221204152015139](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204152015139.png) 26 | 27 | ![image-20221204153452926](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204153452926.png) 28 | 29 | ![image-20221204153713454](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204153713454.png) 30 | 31 | ![image-20221204153749794](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204153749794.png) 32 | 33 | 34 | 35 | ## IK 分词器 36 | 37 | ![image-20221204224453699](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204224453699.png) 38 | 39 | ![image-20221204225541242](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221204225541242.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Model_Driven_Software_Development/Ch03_MetaModel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Meta models 3 | date: 2022-04-21 4 | tags: 5 | - Model 6 | categories: 7 | - MDSD 8 | 9 | --- 10 | 11 | # Meta models 12 | 13 | ![image-20220501005113407](C:\Users\YHR\AppData\Roaming\Typora\typora-user-images\image-20220501005113407.png) 14 | 15 | ![image-20220501005243021](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220501005243021.png) 16 | 17 | ![image-20220501010658193](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220501010658193.png) 18 | 19 | 20 | 21 | ![image-20220502001936874](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502001936874.png) 22 | 23 | ![image-20220502002004023](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502002004023.png) 24 | 25 | + 一个abstract syntax可以对应多个Concrete Syntax![image-20220502002035059](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502002035059.png) 26 | + ![image-20220502002312012](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502002312012.png) 27 | + 在实际上meta model是有限的,即meta-model可以self describing-->model itself 28 | + 例子:![image-20220502002647067](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502002647067.png) 29 | 30 | ![image-20220502005457802](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502005457802.png) 31 | 32 | ![image-20220502213423246](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502213423246.png) 33 | 34 | 35 | 36 | ![image-20220502213445943](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220502213445943.png) 37 | 38 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch09_Sink.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09_Sink 3 | date: 2021-03-30 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | 11 | --- 12 | 13 | # Sink 14 | 15 | JDBC: 16 | 17 | ```java 18 | twitterSource.addSink(new MysqlSink()); 19 | ``` 20 | 21 | open和close方法只会执行一次,每次数据来之后都会执行invoke函数,所以一般数据库链接和sql语句框架预编译都在open和close中完成 22 | 23 | ```java 24 | /** 25 | * use the connection pool to get the connection,because several thread will connect to the mysql 26 | */ 27 | public static class MysqlSink extends RichSinkFunction { 28 | private static ComboPooledDataSource ds = null; 29 | private static Connection conn = null; 30 | private static PreparedStatement ps = null; 31 | 32 | //get the connection pool 33 | static{ 34 | try{ 35 | ds = new ComboPooledDataSource("mysql"); 36 | }catch (Exception e) { 37 | throw new ExceptionInInitializerError(e); 38 | } 39 | 40 | } 41 | 42 | @Override 43 | public void open(Configuration parameters) throws Exception { 44 | conn = ds.getConnection(); 45 | String sql = "Insert INTO test (id,data) values (default,?)"; 46 | ps = conn.prepareStatement(sql); 47 | } 48 | 49 | @Override 50 | public void close() throws Exception { 51 | ps.close(); 52 | conn.close(); 53 | } 54 | 55 | @Override 56 | public void invoke(String value, Context context) throws Exception { 57 | ps.setObject(1, value); 58 | int result = ps.executeUpdate(); 59 | if(result == 0){ 60 | throw new Exception("update mysql failed"); 61 | } 62 | 63 | 64 | } 65 | } 66 | ``` 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /Blog/blogs/2022/RealTimeSE/Ch02_Requirement.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Requirements engineering 3 | date: 2022-12-22 4 | tags: 5 | - RealTimeSE 6 | categories: 7 | - RealTimeSE 8 | 9 | 10 | --- 11 | 12 | # Requirements engineering 13 | 14 | 15 | 16 | - Requirements:分为三个阶段![img](https://api2.mubu.com/v3/document_image/a146d260-cfa5-4a77-897a-302b4da77f8a-14899999.jpg) 17 | 18 | - Requirements类型:![img](https://api2.mubu.com/v3/document_image/0e6c6f0e-8592-4b9c-8835-24a9686cb78e-14899999.jpg) 19 | 20 | - Characteristic of requirements:![img](https://api2.mubu.com/v3/document_image/971a567b-bda4-4228-a9ee-419b3a1b58fa-14899999.jpg) 21 | 22 | - Requirements engineering: 23 | 24 | - Stakeholders 25 | 26 | - Three Risks with Requirements: 27 | 28 | 29 | 30 | - Test driven requiements engineering: 每一步都对应一个test![img](https://api2.mubu.com/v3/document_image/b3270d2e-0ddb-4490-8d5b-a95acc16a109-14899999.jpg) 31 | 32 | - Manage the risks:![img](https://api2.mubu.com/v3/document_image/c5218e38-a810-4882-b20c-46321bfb46fd-14899999.jpg) 33 | 34 | - Developing requirements: 35 | 36 | - 1. Understanding the needs 37 | 38 | - 2. Specifying the requirements 39 | 40 | - 3. Analyzing the requirements 41 | 42 | - 4. Analysis and modeling of solution 43 | 44 | - 5. Verify requirements![img](https://api2.mubu.com/v3/document_image/9747e357-0ed4-4fda-85b6-30f917fafa3c-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/0a214acc-eeb8-4345-a324-b955e92589c9-14899999.jpg) 45 | 46 | - Managing requirements: 47 | 48 | - Requirements Change Management 49 | 50 | - Requirements Traceability![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/c25cbc3b-b0f0-4bf2-a519-d54117d0072f-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch12_State.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch12_State 3 | date: 2021-04-03 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | 11 | 12 | --- 13 | 14 | # State 15 | 16 | ![image-20220528200631430](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200631430.png) 17 | 18 | ![image-20220528200656829](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200656829.png) 19 | 20 | ![image-20220528200710112](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200710112.png) 21 | 22 | 23 | 24 | --- 25 | 26 | ![image-20220528200742779](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200742779.png) 27 | 28 | 29 | 30 | --- 31 | 32 | **常用:** 33 | 34 | ![image-20220528200805971](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200805971.png) 35 | 36 | ![image-20220528200814022](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200814022.png) 37 | 38 | ![image-20220528200822388](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200822388.png) 39 | 40 | ![image-20220528200830665](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200830665.png) 41 | 42 | ![image-20220528200840040](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200840040.png) 43 | 44 | ![image-20220528200852227](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200852227.png) 45 | 46 | ![image-20220528200916606](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200916606.png) 47 | 48 | ![image-20220528200934763](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528200934763.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch12_Axis_ESB.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch12 Axis&ESB 3 | date: 2022-01-21 4 | tags: 5 | - Service 6 | - Service Computing 7 | categories: 8 | - Service Computing 9 | --- 10 | 11 | # Ch12 Axis&ESB 12 | 13 | - Axis2: 14 | 15 | - message处理模型:有点像责任链模式![img](https://api2.mubu.com/v3/document_image/6ebd5c32-aa8e-4389-abbb-a162496d97e6-14899999.jpg) 16 | 17 | - 核心模块![img](https://api2.mubu.com/v3/document_image/ea93e122-cd09-46cb-9ebe-0e7d3b415e28-14899999.jpg) 18 | 19 | - 两种思路:![img](https://api2.mubu.com/v3/document_image/95e990c2-5f9a-44cb-aba6-d26d19a0d8d2-14899999.jpg) 20 | 21 | - 基于message filter和pipe:一个message先经过outcoming再经过incoming 22 | 23 | - incoming pipe:message在输入server之前的处理,比如查看授权等![img](https://api2.mubu.com/v3/document_image/f3c660e4-91a9-4ec4-bdb5-1176984d1ac3-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/ec736a24-c336-4c76-ba51-b1129e223f69-14899999.jpg) 24 | 25 | - outcoming pipe:message从client输出之后处理,比如写到日志等![img](https://api2.mubu.com/v3/document_image/970c6ef7-f620-4804-8f8e-d3e30178e8a3-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/9315780b-0a53-4ca6-897f-18fdfb38c0f1-14899999.jpg) 26 | 27 | - Module是一组handler,以.mar结尾的文件,model can be engaged to service by deployment descriptor 28 | 29 | - Top-down: 30 | 31 | - webservice development with Axis:通过wsdl生成java类和xml,实现逻辑功能并部署到服务器上![img](https://api2.mubu.com/v3/document_image/0018309a-7691-40d8-985e-e9f697283bb8-14899999.jpg) 32 | 33 | - Client development![img](https://api2.mubu.com/v3/document_image/8595a371-ae94-4043-9018-752538f534c1-14899999.jpg) 34 | 35 | - summary![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/ca7a3cd3-3395-4376-a778-44c0f7a704c2-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/TF/Ch10_dataEnhance.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch10 DataEnhancement 3 | date: 2022-06-30 4 | tags: 5 | - Tensorflow 6 | categories: 7 | - Tensorflow 8 | 9 | 10 | --- 11 | 12 | # Ch10 DataEnhancement 13 | 14 | ![image-20220630235538974](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220630235538974.png) 15 | 16 | ![image-20220701001510350](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220701001510350.png) 17 | 18 | ```py 19 | import tensorflow as tf 20 | from tensorflow.keras.preprocessing.image import ImageDataGenerator 21 | 22 | fashion = tf.keras.datasets.fashion_mnist 23 | (x_train, y_train), (x_test, y_test) = fashion.load_data() 24 | x_train, x_test = x_train / 255.0, x_test / 255.0 25 | 26 | x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) # 给数据增加一个维度,使数据和网络结构匹配 27 | 28 | image_gen_train = ImageDataGenerator( 29 | rescale=1. / 1., # 如为图像,分母为255时,可归至0~1 30 | rotation_range=45, # 随机45度旋转 31 | width_shift_range=.15, # 宽度偏移 32 | height_shift_range=.15, # 高度偏移 33 | horizontal_flip=True, # 水平翻转 34 | zoom_range=0.5 # 将图像随机缩放阈量50% 35 | ) 36 | image_gen_train.fit(x_train) 37 | 38 | model = tf.keras.models.Sequential([ 39 | tf.keras.layers.Flatten(), 40 | tf.keras.layers.Dense(128, activation='relu'), 41 | tf.keras.layers.Dense(10, activation='softmax') 42 | ]) 43 | 44 | model.compile(optimizer='adam', 45 | loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), 46 | metrics=['sparse_categorical_accuracy']) 47 | 48 | model.fit(image_gen_train.flow(x_train, y_train, batch_size=32), epochs=5, validation_data=(x_test, y_test), 49 | validation_freq=1) 50 | model.summary() 51 | 52 | ``` 53 | 54 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DSD_VHDL/Ch04_Component.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04 Component 3 | date: 2022-11-04 4 | tags: 5 | - FPGA 6 | - VHDL 7 | categories: 8 | - VHDL 9 | 10 | 11 | --- 12 | 13 | ## Components 14 | 15 | ![image-20221104151215993](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104151215993.png) 16 | 17 | ![image-20221104151348285](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104151348285.png) 18 | 19 | ![image-20221104151610984](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104151610984.png) 20 | 21 | ![image-20221104152041106](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104152041106.png) 22 | 23 | ![image-20221104152217775](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104152217775.png) 24 | 25 | ![image-20221104152707548](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104152707548.png) 26 | 27 | ![image-20221104152607617](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104152607617.png) 28 | 29 | 30 | 31 | ## FSM 32 | 33 | ![image-20221104160612777](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104160612777.png) 34 | 35 | ![image-20221104161529349](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104161529349.png) 36 | 37 | ![image-20221104162313028](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104162313028.png) 38 | 39 | + state 是用来存储当前state的 40 | 41 | 42 | 43 | ## divider 44 | 45 | ![image-20221104163101827](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104163101827.png)![image-20221104163638556](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221104163638556.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch10_Streaming.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09_Streaming 3 | date: 2021-04-01 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | --- 11 | 12 | # Streaming API(source) 13 | 14 | 1. 从集合中读取数据: 15 | 16 | ```java 17 | StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); 18 | //从集合中读取数据,可以把类的对象封装成集合 19 | DataStream collectionSource = env.fromCollection(Arrays.asList("aaa", "bbb", "ccc")); 20 | //直接读取元素 21 | DataStream eleSource = env.fromElements("as", "sss", "sda"); 22 | //输出,参数可以区别哪个输出 23 | collectionSource.print("collection"); 24 | eleSource.print("element"); 25 | 26 | //参数为jobname 27 | env.execute("jobone"); 28 | ``` 29 | 30 | 要按照顺序输出可以在全局中设置并行度为1. 31 | 32 | 2. 从文件中读取数据: 33 | 34 | ```java 35 | DataStream fileSource = env.readTextFile("path"); 36 | ``` 37 | 38 | 3. 自定义数据源: 39 | 40 | ```java 41 | DataStream twitterSource = env.addSource(new V2source()); 42 | ``` 43 | 44 | 通过参数的collect方法来获取数据: 45 | 46 | ```java 47 | public class V2source implements SourceFunction { 48 | private boolean running = true; 49 | @Override 50 | public void run(SourceContext sourceContext) throws Exception { 51 | InputStream stream = FilterTwitterStream.getStream(); 52 | BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); 53 | String line = reader.readLine(); 54 | while(running){ 55 | while (line != null) { 56 | sourceContext.collect(line); 57 | line = reader.readLine(); 58 | } 59 | } 60 | 61 | } 62 | 63 | @Override 64 | public void cancel() { 65 | running = false; 66 | 67 | } 68 | } 69 | ``` 70 | 71 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Kafka/Ch00_intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Intro 3 | date: 2022-11-20 4 | tags: 5 | - Kafka 6 | - MQ 7 | categories: 8 | - Kafka 9 | --- 10 | 11 | 12 | 13 | ## 定义 14 | 15 | ![image-20221120102059015](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221120102059015.png) 16 | 17 | 18 | 19 | ## Function 20 | 21 | 传统的消息队列的主要应用场景包括:缓存/消峰、解耦和异步通信。 22 | 23 | ![image-20221120102350139](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221120102350139.png) 24 | 25 | ![image-20221120102403972](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221120102403972.png) 26 | 27 | ![image-20221120104303607](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221120104303607.png) 28 | 29 | 30 | 31 | ## 消息队列的两种模式 32 | 33 | ![image-20221120105508549](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221120105508549.png) 34 | 35 | + 一个分区只能由一个消费者消费 36 | 37 | 38 | 39 | ## 基础架构 40 | 41 | ![image-20221120110043918](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221120110043918.png) 42 | 43 | + Producer:消息生产者,就是向Kafka broker 发消息的客户端。 44 | + Consumer:消息消费者,向Kafka broker 取消息的客户端。 45 | + Consumer Group(CG):消费者组,由多个consumer 组成。消费者组内每个消 46 | 费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不 47 | 影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。 48 | + Broker:一台Kafka 服务器就是一个broker。一个集群由多个broker 组成。一个 49 | broker 可以容纳多个topic。 50 | + Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic。 51 | + Partition:为了实现扩展性,一个非常大的topic 可以分布到多个broker(即服 52 | 务器)上,一个topic 可以分为多个partition,每个partition 是一个有序的队列。 53 | + Replica:副本。一个topic 的每个分区都有若干个副本,一个Leader 和若干个 54 | Follower。 55 | + Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数 56 | 据的对象都是Leader。 57 | + Follower:每个分区多个副本中的“从”,实时从Leader 中同步数据,保持和 58 | Leader 数据的同步。Leader 发生故障时,某个Follower 会成为新的Leader。 59 | 60 | 61 | 62 | 未完待续。。。 -------------------------------------------------------------------------------- /Blog/blogs/2022/DistributedSystem/Ch02_Bully.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Bully Algorithm 3 | date: 2022-05-27 4 | tags: 5 | - Distributed System 6 | categories: 7 | - Distributed System 8 | --- 9 | 10 | # Bully Algorithm 11 | 12 | - Bully算法是一种霸道的集群选主算法,选举原则是“长者”为大,即在所有活着的节点中,选取ID最大的节点为leader。 13 | 14 | - 节点可以挂掉,但是消息传输必须可靠并且同步(所以可以计算出最大消息来回时间,T=T(process) + T(transmit)),集群中的每个节点均知道其他节点的ID(唯一) 15 | 16 | - 有三种类型的消息: 17 | 18 | - election message:to call elections 19 | 20 | - answer message: to vote 21 | 22 | - coordinator message: to announce own as a coordinator 23 | 24 | - 选举条件: 25 | 26 | - 集群初始化 27 | 28 | - 主节点故障或与其他节点失去联系,并且被其他节点发现 29 | 30 | - 任意一个比当前主节点 ID 大的新节点加入集群 31 | 32 | - 某个节点从故障中恢复,但是收到了比他id小的vitory消息 33 | 34 | - 选举基本过程: 35 | 36 | - 初始化时,网络环境正常,节点也无故障的情况下,集群中的每个节点都会判断自己的ID是否是当前活着的所有节点ID的最大的,如果是,则直接向其他节点发送Victory消息,宣誓自己为Leader 37 | 38 | - 当主节点发生故障或其他原因导致重新选主时,如果当前节点发现自己的ID不是当前活着的节点中ID最大的,则向比自己ID大的所有节点发送Election消息,并等待回复Alive消息。 39 | 40 | - 在给定的时间范围内,本节点如果没有收到其他节点回复的Alive消息,则认为自己成为Leader,并且向其他节点发送Victory消息。 如果接受到比自己ID大的节点的Alive消息,则人家比你大,老老实实的等待Victory消息吧,若此时没有收到victory消息,则表示id比自己大的节点挂了,则自己可以成为leader。 41 | 42 | - 选举过程:![img](https://api2.mubu.com/v3/document_image/e4ad4588-0415-4f8d-97d5-6c4cdaade882-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/17780b53-dc5c-4114-99e1-0a8167f2f4ef-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/19776849-9537-4bf8-a4cf-7a3da5f5c724-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/b7879f53-ad43-40d3-a03f-dceb438459e4-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/46c73b14-b605-4947-aed3-282a53a2bd15-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/a5a77059-6bf3-4d07-aa88-6923732c3735-14899999.jpg) 43 | 44 | - ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/e2e89742-8d10-4bd1-a64e-ef4ecc25d772-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java_basic/Ch10_Reflection.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch10_Reflection 3 | date: 2020-04-21 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | --- 10 | 11 | # Reflection 12 | 13 | 每个类在JRE中都为其保留一个不变的class对象 14 | 15 | Class本身也是一个类 16 | 17 | Class类只能由系统建立对象 18 | 19 | 一个类在JVM中只会有一个class实例,对应一个class文件 20 | 21 | 每个类都会记得自己由哪个class对象创建而成 22 | 23 | 通过class可以得到一个类的完整结构 24 | 25 | Class类的常用创建方法: 26 | 27 | ![image-20230426223122755](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223122755.png) 28 | 29 | 30 | 31 | 利用class类来获得类的各种信息: 32 | 33 | ![image-20230426223141481](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223141481.png) 34 | 35 | ![image-20230426223200816](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223200816.png) 36 | 37 | ![image-20230426223209117](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223209117.png) 38 | 39 | 40 | 41 | 42 | 43 | 利用反射机制创建对象 44 | 45 | 使用反射机制获取与调用方法:当一个方法有泛型参数时,编译器会自动上转型 46 | 47 | T的上转型为Object 48 | 49 | 在 Java 反射中,一个 Method 执行时遭遇的异常会被包装在一个特定的异常中,这个异常就是 InvocationTargetException。需要手动获取异常具体信息,如下代码 50 | 51 | ```java 52 | catch (InvocationTargetException e) { 53 | Throwable cause = e.getCause(); 54 | System.out.println(cause.toString()); 55 | 56 | } 57 | ``` 58 | 59 | ![image-20230426223716183](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223716183.png) 60 | 61 | 62 | 63 | 使用反射机制获以及使用取field(成员变量) 64 | 65 | ![image-20230426223727101](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223727101.png) 66 | 67 | 68 | 69 | 反射中会出现的异常情况: 70 | 71 | ![image-20230426223750835](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426223750835.png) 72 | 73 | 74 | 75 | 更多详细内容参考https://blog.csdn.net/briblue/article/details/76223206 -------------------------------------------------------------------------------- /Blog/blogs/2022/Model_Driven_Software_Development/Ch01_Introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01_Introduction 3 | date: 2022-04-20 4 | tags: 5 | - Model 6 | categories: 7 | - MDSD 8 | 9 | --- 10 | 11 | # Introduction 12 | 13 | ![image-20220420114038380](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420114038380.png) 14 | 15 | ![image-20220420114108665](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420114108665.png) 16 | 17 | ## 1. Model driven vs model based 18 | 19 | ![image-20220420105457193](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420105457193.png) 20 | 21 | 22 | 23 | ## 2. Goals of MDSD 24 | 25 | ![image-20220420105547138](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420105547138.png) 26 | 27 | ![image-20220420105602889](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420105602889.png) 28 | 29 | 30 | 31 | ## 3. Example: 32 | 33 | ![image-20220420110731939](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420110731939.png) 34 | 35 | + Schematic repetitive code: 比如从class-diagram生成的框架,往里面填充自己的逻辑就可以 36 | + Generic code:比如一些函数库 37 | + ![image-20220420114019706](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420114019706.png) 38 | 39 | ## 4. Transformation: 40 | 41 | ![image-20220420111528221](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420111528221.png) 42 | 43 | ![image-20220420111725082](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420111725082.png) 44 | 45 | + 让一个model自动转换为另一个model 46 | 47 | 48 | 49 | 例子:![image-20220420112100581](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420112100581.png) 50 | 51 | 52 | 53 | ## 5. Meta model 54 | 55 | ![image-20220420112657001](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220420112657001.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Data_warehouse/Ch01_Data_warehouse_Architecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Data warehouse Architecture 3 | date: 2021-10-26 4 | tags: 5 | - Data 6 | - Data warehouse 7 | categories: 8 | - Data warehouse 9 | --- 10 | 11 | # Data warehouse Architecture 12 | 13 | + 数据仓库架构图:![image-20220408231627254](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408231627254.png) 14 | 15 | + Basic Elements 16 | 17 | + Source Systems 18 | + Classification![image-20220408232007743](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408232007743.png) 19 | + Data quality![image-20220408231944327](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408231944327.png) 20 | + Monitoring![image-20220408232055353](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408232055353.png) 21 | + Data Staging Area 22 | + Extraction 23 | + Transformation 24 | + Load 25 | + Core Data Warehouse 26 | + Data Marts 27 | + 数据集市(Data Marts) 为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据(subject area) 28 | + Independent data marts 29 | + Dependent data marts![image-20220408232127245](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408232127245.png) 30 | + End user data access 31 | + Data warehouse manager![image-20220408232240589](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408232240589.png) 32 | + Meta data repository![image-20220408232303660](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408232303660.png) 33 | + Operational Data Store![image-20220408232342356](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220408232342356.png) 34 | 35 | + Architecture:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/c4d0568b-a707-403b-a9c3-8ab5f9349676-14899999.jpg) 36 | 37 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch07_Yaml.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07 Yaml 3 | date: 2021-08-16 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | 10 | --- 11 | 12 | # YAML 13 | 14 | 基本语法: 15 | 16 | - key: value;kv之间有空格 17 | - 大小写敏感 18 | 19 | - 使用缩进表示层级关系 20 | - 缩进不允许使用tab,只允许空格 21 | 22 | - 缩进的空格数不重要,只要相同层级的元素左对齐即可 23 | - '#'表示注释 24 | 25 | - 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义 26 | 27 | 数据类型:![image-20230425180159002](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425180159002.png) 28 | 29 | 示例: 30 | 31 | 注意只有@Component的组件才可以用配置注入 32 | 33 | image-20230425180235318 34 | 35 | ![image-20230425180248223](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425180248223.png) 36 | 37 | yaml: 38 | 39 | ![image-20230425180301910](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425180301910.png) 40 | 41 | 42 | 43 | 使用controller输出: 44 | 45 | ![image-20230425180314141](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425180314141.png) 46 | 47 | 48 | 49 | 在springboot中,可以使用application.yml或application.yaml来配置属性 50 | 51 | 有多个属性文件时会同时生效,其中优先级properties>yml>yaml 52 | 53 | 开启配置自动提示功能: 54 | 55 | ```xml 56 | 57 | org.springframework.boot 58 | spring-boot-configuration-processor 59 | true 60 | 61 | ``` 62 | 63 | 并且在打包的时候不把这个依赖打包进去 64 | 65 | ```xml 66 | 67 | 68 | 69 | org.springframework.boot 70 | spring-boot-configuration-processor 71 | 72 | 73 | 74 | ``` 75 | 76 | ![image-20230425180346038](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425180346038.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/mybatis/Ch00_record.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 record 3 | date: 2022-10-10 4 | tags: 5 | - Java 6 | - Mybatis 7 | categories: 8 | - Mybatis 9 | --- 10 | 11 | 12 | 13 | Mybatis 在使用returning(postgresql)返回值时,可以用select 14 | 15 | ```java 16 | @Select("insert into organization(orgid,name,address) values(default,#{metadata.organization.name},#{metadata.organization.address}) returning orgid") 17 | @Options(flushCache = Options.FlushCachePolicy.TRUE) 18 | int createDocToOrganization(@Param("metadata") Metadata metadata, @Param("path") String path, @Param("objectId") String objectId); 19 | ``` 20 | 21 | 22 | 23 | # 数据分页 24 | 25 | 1. maven依赖 26 | 27 | ```xml 28 | 29 | com.github.pagehelper 30 | pagehelper 31 | 5.2.1 32 | 33 | ``` 34 | 35 | 2. 在mybatis主配置文件中加入plugins,在environments之前 36 | 37 | ```xml 38 | 46 | 47 | 48 | 49 | 50 | 51 | ``` 52 | 53 | ![image-20230426010348519](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010348519.png) 54 | 55 | 56 | 57 | # Cache 缓存 58 | 59 | ![image-20230426010408798](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010408798.png) 60 | 61 | ![image-20230426010419021](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010419021.png) 62 | 63 | ![image-20230426010432635](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010432635.png) 64 | 65 | ![image-20230426010442424](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426010442424.png) 66 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch15_MicroServices.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch15 MicroServices 3 | date: 2022-02-15 4 | tags: 5 | - Service 6 | - Service Computing 7 | categories: 8 | - Service Computing 9 | 10 | --- 11 | 12 | # Ch15 MicroServices 13 | 14 | - 什么是微服务![img](https://api2.mubu.com/v3/document_image/c46587dc-9170-4510-9643-34c0759da269-14899999.jpg) 15 | 16 | - 有哪些特性![img](https://api2.mubu.com/v3/document_image/e6ed32f7-506b-4bab-8d07-b54e86736deb-14899999.jpg) 17 | 18 | - 所以deployment是非常重要的,会在cloud computing课上讲 19 | 20 | - 在replica的情况下:碰到瓶颈的时候,只要复制对应的component就可以,不用整个应用一起复制![img](https://api2.mubu.com/v3/document_image/e78b974f-33fe-40f5-86c6-b04612d112dd-14899999.jpg) 21 | 22 | - Service的粒度很难确定![img](https://api2.mubu.com/v3/document_image/ccba73ac-ac6f-428a-8860-c343bae4e1c1-14899999.jpg) 23 | 24 | - 因为每个服务都要自己routing自己的消息到别的service等,所以会产生强耦合的情况,side car就是用来解决这个问题,把业务代码分割开来,sidecar负责接受请求,调用逻辑,发送请求![img](https://api2.mubu.com/v3/document_image/1e480b75-dea6-4391-a992-877384e1c9c6-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/9c149deb-2a3c-4689-8e63-1b1575066f28-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/969b0f6f-5ac7-4a79-8c1c-a1bd0e1fbe05-14899999.jpg) 25 | 26 | - Benefits of MicroServices: 27 | 28 | ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/ffde2a12-020e-42e7-9fff-567a9d8a059b-14899999.jpg) 29 | 30 | - Permissionless Innovation: 如果team间开会数量远大于team内部开会,那么这个要求没达到 31 | 32 | - Enable failure:出错之后很难排错,一个service内部错误是可以容忍的,但是不能有级联错误![img](https://api2.mubu.com/v3/document_image/3bf1056d-4dc5-4dd1-bcf9-a7808b0893b4-14899999.jpg) 33 | 34 | - Disrupt trust:不用相信某个工程师什么什么没问题,直接测试api![img](https://api2.mubu.com/v3/document_image/3339d367-2822-4633-b67a-b8179dd2bc0e-14899999.jpg) 35 | 36 | - You build it,you own it: 一个service由一个团队负责,有问题了就要马上修复![img](https://api2.mubu.com/v3/document_image/9e1caee5-ef9e-4915-bb72-d4d87bc978eb-14899999.jpg) 37 | 38 | - ... 39 | 40 | - 每个微服务都应该有自己的数据库,不能share 41 | 42 | - 微服务的中心思想是解耦 -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch02_Class.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Class 3 | date: 2019-09-10 4 | tags: 5 | - JS 6 | categories: 7 | - JS 8 | 9 | --- 10 | 11 | # Class 12 | 13 | 注意:函数最好不要随意定义在外部,会污染命名空间 14 | 15 | ![image-20220529115329128](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115329128.png) 16 | 17 | ```js 18 | var obj = {name : "yhr"}; 19 | ``` 20 | 21 | 22 | 23 | 1. 可以用构造函数创建对象 24 | 25 | ```js 26 | function Person(name, age) { 27 | this.name = name; 28 | this.age = age; 29 | this.say = function a() { 30 | alert("aaa"); 31 | } 32 | } 33 | ``` 34 | 35 | 2. 可以用工厂方法创建函数 36 | 37 | ```js 38 | function fac(name, age) { 39 | var obj = new Object(); 40 | obj.name = name; 41 | obj.age = age; 42 | return obj; 43 | } 44 | ``` 45 | 46 | 3. 原型对象:当创建一个函数,解析器会自动向函数添加一个原型对象,对于普通函数,没用,对于构造函数,任何同一个构造函数new出来的对象所指向的原型对象是同一个,也就是一个公共空间,可以把公共的属性或函数写入原型对象中: 47 | 48 | ```js 49 | function pro(name, age){//构造函数 50 | this.name = name; 51 | this.age = age; 52 | } 53 | pro.prototype.a = 999;//向构造函数的原型对象中写入一个属性a的值为999 54 | pro.prototype.say = function () {//向原型对象中写入一个函数 55 | alert("sayyyy"); 56 | 57 | } 58 | var p1 = new pro("aaa", 20); 59 | var p2 = new pro("bbb", 11); 60 | console.log(p1.a);//当访问属性时,如果对象内不存在,就会往原型对象里找 61 | console.log(p2.a); 62 | console.log(pro.prototype == p1.__proto__);//结果为true,注意访问方式不同 63 | p1.say();//调用原型对象中的方法 64 | ``` 65 | 66 | 一般修改原型对象的toString方法: 67 | 68 | ```js 69 | pro.prototype.toString = function () { 70 | return "age: " + this.age + " name: " + this.name; 71 | } 72 | ``` 73 | 74 | 获取对象属性时可以用两个方法: 75 | 76 | 1.对象名.属性名(固定) 77 | 78 | 2. 对象名[属性名] (常用来传递参数) 79 | 80 | ![image-20220529115502051](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115502051.png) 81 | 82 | 遍历对象: 83 | 84 | ![image-20220529115514144](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529115514144.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch06_NewProject.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch06 New project 3 | date: 2021-08-15 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | --- 10 | 11 | # 新建项目 12 | 13 | 步骤: 14 | 15 | - 引入场景依赖 16 | 17 | - - https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter 18 | 19 | - 查看自动配置了哪些(选做) 20 | 21 | - - 自己分析,引入场景对应的自动配置一般都生效了 22 | - 配置文件中debug=true开启自动配置报告。Negative(不生效)\Positive(生效) 23 | 24 | - 是否需要修改 25 | 26 | - - 参照文档修改配置项 27 | 28 | - - - https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties 29 | - 自己分析。xxxxProperties绑定了配置文件的哪些。 30 | 31 | - - 自定义加入或者替换组件 32 | 33 | - - - @Bean、@Component。。。 34 | 35 | - - 自定义器 **XXXXXCustomizer**; 36 | - ...... 37 | 38 | - 39 | 40 | - **简化开发:** 41 | 42 | - **1. Lombok** 43 | 44 | - 1. 引入依赖: 45 | 46 | ```xml 47 | 48 | org.projectlombok 49 | lombok 50 | 51 | ``` 52 | 53 | - 2. idea安装lombok插件 54 | 55 | - 在实体类上不用写getter,setter方法,可以用@Data代替 56 | - 全参构造和无参构造也可以用注解代替 57 | - 还可以重写利用属性重写hashcode和equals方法 58 | 59 | image-20230425175852077 60 | 61 | 3. 另外,在lombok中还提供日志输出功能:@slf4j,该注解会自动为类注入一个log属性 62 | 63 | - ![image-20230425175921754](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175921754.png) 64 | 65 | - 66 | 67 | - **2.Jrebel** 68 | 69 | - 可以动态热更新项目,但是需要付费 70 | 71 | - 72 | 73 | - **3.Spring initializr(项目创建向导)** 74 | 75 | - 在创建项目的时候可以自动帮我们引入依赖,搭建好一个springboot的项目框架: 76 | 77 | - 想要哪个勾哪个,如Mybatis,redis,web 78 | 79 | - ![image-20230425175940056](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175940056.png) 80 | 81 | - ![image-20230425175951130](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425175951130.png) 82 | 83 | - 84 | 85 | - -------------------------------------------------------------------------------- /Blog/blogs/2022/Spring/Ch02_Annotation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Annotation 3 | date: 2019-07-25 4 | tags: 5 | - Spring 6 | - Java 7 | categories: 8 | - Spring 9 | --- 10 | 11 | # Annotation 12 | 13 | ![image-20230425183500643](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183500643.png) 14 | 15 | ```java 16 | 17 | 18 | 19 | ``` 20 | 21 | image-20230425183513909 22 | 23 | ![image-20230425183536262](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183536262.png) 24 | 25 | 26 | 27 | 可以使用value指定bean的名字,否则取第一个字母小写的类名) 28 | 29 | 步骤: 30 | 31 | 1. 先在要创建bean的class里加入注解:括号里为bean的id 32 | 33 | ![image-20230425183553122](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183553122.png) 34 | 35 | 2. 配置文件:要使用到context命名空间,扫描包内所有的class 36 | 37 | 可以使用属性resource-pattern来指定扫描的资源,如resource-pattern = “repository/*.class”表示只扫描repository下面的包 38 | 39 | ![image-20230425183612052](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183612052.png) 40 | 41 | ![image-20230425183622286](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183622286.png) 42 | 43 | ![image-20230425183630454](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183630454.png) 44 | 45 | ![image-20230425183643411](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183643411.png) 46 | 47 | ![image-20230425183651863](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183651863.png) 48 | 49 | 50 | 51 | # 引入外部文件 52 | 53 | ![image-20230425183735619](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183735619.png) 54 | 55 | 56 | 57 | ## Spel表达式 58 | 59 | ![image-20230425183748402](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425183748402.png) 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringCloud/Ch02_service_split.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Service split 3 | date: 2022-04-10 4 | tags: 5 | - Java 6 | - Spring Cloud 7 | categories: 8 | - Spring Cloud 9 | 10 | --- 11 | 12 | # Ch02 Service split 13 | 14 | 15 | 16 | 服务拆分:![image-20220410115352698](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410115352698.png) 17 | 18 | 19 | 20 | ### 例:![image-20220410171524498](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410171524498.png) 21 | 22 | ​ Order和User两个服务,各自有独立的数据库 23 | 24 | ​ 在Order中要调用user信息,则需要在order服务中对User服务发起http请求:![image-20220410171837009](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/image-20220410171837009.png) 25 | 26 | 27 | 28 | 在Spring中提供了一个工具:RestTemplate,在order service的配置类中创建这个类,并注入: 29 | 30 | ```java 31 | @MapperScan("cn.itcast.order.mapper") 32 | @SpringBootApplication 33 | public class OrderApplication { 34 | 35 | public static void main(String[] args) { 36 | SpringApplication.run(OrderApplication.class, args); 37 | } 38 | /** 39 | * 创建Rest template并注入容器 40 | * @return 41 | */ 42 | @Bean 43 | public RestTemplate restTemplate(){ 44 | return new RestTemplate(); 45 | } 46 | 47 | } 48 | ``` 49 | 50 | 51 | 52 | 使用RestTemplate向其他服务发请求,在service中发http请求: 53 | 54 | ```java 55 | @Service 56 | public class OrderService { 57 | 58 | @Autowired 59 | private OrderMapper orderMapper; 60 | @Autowired 61 | private RestTemplate restTemplate; 62 | 63 | public Order queryOrderById(Long orderId) { 64 | // 1.查询订单 65 | Order order = orderMapper.findById(orderId); 66 | // 2. 利用restTemplate发起http请求,查询用户 67 | // 2.1 获取查询用户的url 68 | String url = "http://localhost:8081/user/" + order.getUserId(); 69 | // 2.2 发起http请求,get, 第一个参数是url,第二个参数是返回值类型 70 | User user = restTemplate.getForObject(url, User.class); 71 | // 3. 封装user到order中 72 | order.setUser(user); 73 | // 4.返回 74 | return order; 75 | } 76 | } 77 | ``` 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch07_Dynamic_pages.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch07 Dynamic pages 3 | date: 2022-01-02 4 | tags: 5 | - Service 6 | - Service Computing 7 | categories: 8 | - Service Computing 9 | 10 | --- 11 | 12 | # Ch07 Dynamic pages 13 | 14 | - 一个对servlet的请求映射成一条JVM里面的线程 15 | - Cookie没有安全问题,因为它不会撑爆你的硬盘,也不能执行代码 16 | 17 | - 但是有隐私问题,用户不希望被server记录下来自己干了什么,也不希望其他网站share cookies 18 | 19 | - 用户可以选择禁用cookie,这时候为了追踪session可以在url中附带信息,但是一旦用户离开就没有了 20 | 21 | - 也可以用form中的hidden fields![img](https://api2.mubu.com/v3/document_image/3a43bb47-6af1-41e5-8353-5bdee852e915-14899999.jpg) 22 | 23 | - 设置cookie![img](https://api2.mubu.com/v3/document_image/fc196f3d-ad71-47dc-9afa-6149362ccd54-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/d83f8100-4b00-4d9c-862d-292479dd3b7e-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/f9f4078d-cf62-48fd-afb2-07493cd0aca8-14899999.jpg) 24 | - JSP: 25 | 26 | - 单行表达式:![img](https://api2.mubu.com/v3/document_image/e79cb870-e0a7-4ea7-a938-30555fb216b1-14899999.jpg) 27 | 28 | - 多行:![img](https://api2.mubu.com/v3/document_image/b5a9bb99-d90c-4907-95fa-b42855e392ee-14899999.jpg) 29 | 30 | - 在jsp中,可以直接用out和request变量:![img](https://api2.mubu.com/v3/document_image/dd862963-82c2-4f60-a7e2-2ef90edf140a-14899999.jpg) 31 | 32 | - 静态包含:不会解析jsp代码![img](https://api2.mubu.com/v3/document_image/da76734e-55df-4b0f-99b7-0fc38e4d26a4-14899999.jpg) 33 | 34 | - 动态包含:会解析jsp代码![img](https://api2.mubu.com/v3/document_image/f6a5b0eb-589a-4590-a869-2c788263be53-14899999.jpg) 35 | 36 | - 可以引入tag library来实现某些功能![img](https://api2.mubu.com/v3/document_image/460eec15-c47f-4505-a1bb-fc21ee88b83a-14899999.jpg) 37 | - Load balancing 38 | 39 | - Host:IP地址 40 | 41 | - service:IP:port 42 | 43 | - Cluster:Collection of similar services 44 | 45 | - Virtual server: A cluster represented as a single service 46 | - 用一个IP:PORT来代表多个IP:PORT。这个IP:port就是load balancer提供的 47 | 48 | - 例子:![img](https://api2.mubu.com/v3/document_image/59a696eb-8194-43c7-88b6-8cdf3b1cb039-14899999.jpg) 49 | 50 | - 过程:![img](https://api2.mubu.com/v3/document_image/8c309ded-df1e-41c2-ba5b-ccd4f5e556d3-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/Go/Ch09_GoLinux.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09 GoLinux 3 | date: 2023-08-24 4 | tags: 5 | - Go 6 | categories: 7 | - Go 8 | 9 | --- 10 | 11 | Go命令行有常用的这几个命令: 12 | 13 | - go build 编译包和依赖 14 | - go run 编译和运行go程序 15 | - go install 编译并安装包和依赖 16 | - go get 将依赖下载到当前依赖并安装 17 | 18 | ![image-20230930232612233](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230930232612233.png) 19 | 20 | 21 | 22 | 运行go build命令时加入标记-x,这样可以看到go build命令具体都执行了哪些操作,查看具体构建过程 23 | 24 | ```go 25 | go build -x hello_main.go 26 | WORK=/var/folders/js/pmxyyt3s2693n8_dk137t8l80000gn/T/go-build580263953 27 | mkdir -p $WORK/b001/ 28 | cat >$WORK/b001/importcfg.link << 'EOF' # internal 29 | packagefile command-line-arguments=/Users/XXX/Library/Caches/go-build/66/66f8de4622b8ffa394c623ca185ac616e298e56b0922df729b6a595f48eafac7-d 30 | packagefile fmt=/usr/local/go/pkg/darwin_amd64/fmt.a 31 | ... 32 | packagefile internal/race=/usr/local/go/pkg/darwin_amd64/internal/race.a 33 | EOF 34 | mkdir -p $WORK/b001/exe/ 35 | cd . 36 | /usr/local/go/pkg/tool/darwin_amd64/link -o $WORK/b001/exe/a.out -importcfg $WORK/b001/importcfg.link -buildmode=exe -buildid=dvpJi7I5grdSogBnCMbW/lvYsRrpuUSUL86UZI79H/GF71-1TyEJxjFQJjlqbi/dvpJi7I5grdSogBnCMbW -extld=clang /Users/XXX/Library/Caches/go-build/66/66f8de4622b8ffa394c623ca185ac616e298e56b0922df729b6a595f48eafac7-d 37 | /usr/local/go/pkg/tool/darwin_amd64/buildid -w $WORK/b001/exe/a.out # internal 38 | mv $WORK/b001/exe/a.out hello_main 39 | rm -r $WORK/b001/ 40 | ``` 41 | 42 | 43 | 44 | ## go build 45 | 46 | `go build`是这几个命令的基础,`go build <命令源码文件/.>`会生成目标系统的可执行文件 47 | 48 | 49 | 50 | ## go run 51 | 52 | `go run`命令编译构建后直接运行,不会在项目目录或GOPATH目录下生成可执行文件。 53 | 传入`-x`参数查看详细执行过程可以看出对比`go build`,`go run`省略了`mv $WORK/b001/exe/a.out hello_main`搬移可执行文件,而是直接执行输出结果。 54 | 55 | 56 | 57 | ## go install 58 | 59 | `go install`大概等于`go build`+安装,所谓安装就是将命令源码生成的可执行文件或者库源码文件生成的归档文件放入GOPATH/bin或GOPATH/pkg中。 60 | go install可执行文件从打印的详细步骤可以看出主要区别就是`mv $WORK/b001/exe/a.out /Users/XXX/go/bin/hello_main`,将可执行文件放入GOPATH/bin而不是当前目录下。 61 | 62 | 63 | 64 | ## go get 65 | 66 | 命令go get会自动从一些主流公用代码仓库(比如 GitHub)下载目标代码包,并把它们安装到环境变量GOPATH相应目录中。 67 | 68 | 69 | 70 | ref: https://www.jianshu.com/p/d6e2184a5a4f -------------------------------------------------------------------------------- /Blog/blogs/2022/Cloud_Computing/Ch00_intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Intro 3 | date: 2022-11-08 4 | tags: 5 | - Cloud Computing 6 | categories: 7 | - Cloud 8 | - DevOps 9 | 10 | --- 11 | 12 | # ![image-20221108102455221](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102455221.png) 13 | 14 | ![image-20221108102506924](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102506924.png) 15 | 16 | 17 | 18 | ## Cloud Architecture style 19 | 20 | ![image-20221108102532861](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102532861.png) 21 | 22 | ![image-20221108102541870](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102541870.png) 23 | 24 | ![image-20221108102552623](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102552623.png) 25 | 26 | ![image-20221108102619233](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102619233.png) 27 | 28 | 29 | 30 | ### MicroServices 31 | 32 | ![image-20221108102641151](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102641151.png)![image-20221108102647773](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102647773.png) 33 | 34 | 35 | 36 | ### CQRS 37 | 38 | ![image-20221108102730029](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102730029.png) 39 | 40 | 41 | 42 | ### Event Driven 43 | 44 | ![image-20221108102746218](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102746218.png)![image-20221108102753113](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102753113.png) 45 | 46 | 47 | 48 | ### BigData 49 | 50 | ![image-20221108102809537](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102809537.png) 51 | 52 | 53 | 54 | ### BigCompute 55 | 56 | ![image-20221108102825785](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108102825785.png) 57 | 58 | ![image-20221108185053142](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108185053142.png) 59 | 60 | ![image-20221108190309658](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221108190309658.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java/Ch05_C3p0.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05_C3p0 3 | date: 2019-06-02 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | 9 | --- 10 | 11 | # C3p0 12 | 13 | 14 | 15 | maven依赖(记得要导2个包!!) 16 | 17 | ```xml 18 | 19 | com.mchange 20 | c3p0 21 | 0.9.5.2 22 | 23 | 24 | com.mchange 25 | mchange-commons-java 26 | 0.2.15 27 | 28 | ``` 29 | 30 | 31 | 32 | 在src文件夹下配置文件:(idea要放在src的resource目录下) 33 | 34 | c3p0配置文件名字一定是c3p0-config.xml 35 | 36 | ```xml 37 | 38 | 39 | 40 | 41 | 42 | com.mysql.cj.jdbc.Driver 43 | jdbc:mysql://localhost:3306/flink?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false 44 | root 45 | 123456 46 | 47 | 48 | 8 49 | 50 | 3000 51 | 52 | 30 53 | 54 | 100 55 | 5 56 | 200 57 | 58 | 59 | 60 | 5 61 | 8 62 | 5 63 | 30 64 | 0 65 | 5 66 | 67 | 68 | 69 | 70 | ``` 71 | 72 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DataStructure/Ch11_JavaBased.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch11 Java Based DataStructure 3 | date: 2019-07-08 4 | tags: 5 | - Data structure 6 | - Java 7 | categories: 8 | - Data structure 9 | 10 | --- 11 | 12 | # HashSet 13 | 14 | Hashset:可以存储任何对象的一种数据结构,在java.util包中。 15 | 16 | Set集合存的值是不重复的,并且可以存null。 17 | 18 | 若想让set存储指定的类型,就要使用到泛型: 19 | 20 | HashSet set = new HashSet(); // 只能存String类型的数据 21 | 22 | HashSet set = new HashSet(); //能存任何类型的数据 23 | 24 | ![image-20230426214217256](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214217256.png) 25 | 26 | 27 | 28 | # TreeSet 29 | 30 | Tree set是Sortedset的接口实现类,可以确保元素处于排序状态。 31 | 32 | 支持两种排序方法:自然排序和定制排序,默认使用自然排序 33 | 34 | 自然排序:在使用自然排序时,自动调用CompareTo方法,并按照升序排列,必须保证Treeset中的数据类型是一样的(可以使用泛型进行约束),否则会报出异常。 35 | 36 | ![image-20230426214250523](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214250523.png) 37 | 38 | 定制排序:必须实现Comparator接口,并且重写其中的Compare 方法: 39 | 40 | ![image-20230426214301441](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214301441.png) 41 | 42 | 43 | 44 | # ArrayList 45 | 46 | List代表一个元素有序且可以重复的结合,他会按照元素的插入顺序给每个元素建立一个索引。并且给出了按照索引操作元素的一些方法: 47 | 48 | ArrayList和Vector都实现List接口,但一般使用ArrayList![image-20230426214332396](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214332396.png) 49 | 50 | 51 | 52 | # Map 53 | 54 | Map用于保存具有映射关系的数据(对象),所以map中存在两组值,一组为key,一组为value,key与value拥有着单向对应的关系,即一个key必定只能找到一个value,两个key之间必定互不相等。 55 | 56 | Map是一个接口,HashMap是对Map的接口经典实现类。![image-20230426214409350](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214409350.png) 57 | 58 | 59 | 60 | TreeMap与TreeSet类似,也有自然排序和定制排序两种方式,定制排序需要实现Comparator接口并重写其中的Compare方法。 自然排序是字典排序 61 | 62 | 63 | 64 | 65 | 66 | # Collection 67 | 68 | Collection是一个操作set, map, list等的工具类,常直接调用其静态方法。 69 | 70 | Collection中提供了大量对集合元素进行排序,查询和修改等操作,还设置了对元素对象设置不可变和同步控制。下面以list为例: 71 | 72 | 其中sort为升序排序![image-20230426214459645](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214459645.png) 73 | 74 | ![image-20230426214508899](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230426214508899.png) 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch13_Service_discovery.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch13 Service discovery 3 | date: 2022-01-23 4 | tags: 5 | - Service 6 | - Service Computing 7 | categories: 8 | - Service Computing 9 | 10 | --- 11 | 12 | # Ch13 Service discovery 13 | 14 | - UDDI: Universal Description, Discovery & Integration![img](https://api2.mubu.com/v3/document_image/760a6c9b-e4a7-43f8-a99c-07b2dec7873f-14899999.jpg) 15 | 16 | - 公司把自己可以提供的服务注册到UDDI中,其他人再通过寻找Business registrations来找到service type registerations,最后使用服务 17 | 18 | ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/3df3bf84-c750-40bf-972d-12963145dca4-14899999.jpg) 19 | 20 | - 注册表的data包含这几项: 21 | 22 | ![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/f2259aaa-06ab-4e13-bf02-d4aaceedb9be-14899999.jpg) 23 | 24 | - Service Type叫做tModels 25 | 26 | - White page: business entity 27 | 28 | - Yellow page:business services 29 | 30 | - Green page: binding template 31 | 32 | - 例子:![img](https://api2.mubu.com/v3/document_image/6e5ab452-d6d0-4d10-972c-87096e6e38f1-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/34a3cecd-ba2c-40bc-a829-c7098039fe76-14899999.jpg) 33 | 34 | - 例子:我出售花,申请了一个域名并把它publish到了UDDI registry上,其他开发者可以用这个来发现我提供的服务,并且集成到自己的产品中,消费者既可以直接访问我的域名来买花,也可以通过其他集成了买花服务的产品来买花![img](https://api2.mubu.com/v3/document_image/0bfde40b-6c20-4a59-ba5b-64b82dcab977-14899999.jpg) 35 | 36 | - UDDI registry是一个集群,replica 37 | 38 | - public UDDI是一个失败,因为很多useless service在此注册 39 | 40 | - private UDDI是一个成功,因为限制了注册和使用 41 | 42 | - 使用UDDI![img](https://api2.mubu.com/v3/document_image/d527d91b-a028-4429-92ad-1d71477b5a29-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/3e7055ae-05f5-47d2-8a2d-d933d8e9afd1-14899999.jpg) 43 | 44 | - Metadata exchange 45 | 46 | - metadata描述了endpoint的属性![img](https://api2.mubu.com/v3/document_image/e1eefbfa-d259-4b00-94c3-89cc31065781-14899999.jpg) 47 | 48 | - 例子:表示MyEndPoint在询问YourEndPoint要policy方面的metadata![img](https://api2.mubu.com/v3/document_image/a84f7a43-4959-4611-8377-758c7297fb8c-14899999.jpg) 49 | 50 | - 例子:response:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/4252c111-a495-47df-8759-44c06ac9ad44-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringCloud/Ch08_Feign_basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch08 Feign basic 3 | date: 2022-04-16 4 | tags: 5 | - Java 6 | - Spring Cloud 7 | - Feign 8 | categories: 9 | - Spring Cloud 10 | --- 11 | 12 | # Ch08 Feign basic 13 | 14 | ![image-20220416225236245](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220416225236245.png) 15 | 16 | Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 17 | 18 | 其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。 19 | 20 | ![image-20210714174918088](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210714174918088.png) 21 | 22 | 23 | 24 | 25 | 26 | ## 使用 27 | 28 | Fegin的使用步骤如下: 29 | 30 | ### 1)引入依赖 31 | 32 | 我们在order-service服务的pom文件中引入feign的依赖: 33 | 34 | ```xml 35 | 36 | org.springframework.cloud 37 | spring-cloud-starter-openfeign 38 | 39 | ``` 40 | 41 | 42 | 43 | ### 2)添加注解 44 | 45 | 在order-service的启动类添加注解开启Feign的功能: 46 | 47 | ![image-20210714175102524](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210714175102524.png) 48 | 49 | 50 | 51 | ### 3)编写Feign的客户端 52 | 53 | 在order-service中新建一个接口,内容如下: 54 | 55 | ```java 56 | package cn.itcast.order.client; 57 | 58 | import cn.itcast.order.pojo.User; 59 | import org.springframework.cloud.openfeign.FeignClient; 60 | import org.springframework.web.bind.annotation.GetMapping; 61 | import org.springframework.web.bind.annotation.PathVariable; 62 | 63 | @FeignClient("userservice") 64 | public interface UserClient { 65 | @GetMapping("/user/{id}") 66 | User findById(@PathVariable("id") Long id); 67 | } 68 | ``` 69 | 70 | 71 | 72 | 这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如: 73 | 74 | - 服务名称:userservice 75 | - 请求方式:GET 76 | - 请求路径:/user/{id} 77 | - 请求参数:Long id 78 | - 返回值类型:User 79 | 80 | 这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。 81 | 82 | 修改order-service中的OrderService类中的queryOrderById方法,使用Feign客户端代替RestTemplate: 83 | 84 | ![image-20210714175415087](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210714175415087.png) 85 | 86 | 87 | 88 | Feign自动集成了Ribbon 89 | 90 | ![image-20220416225645206](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220416225645206.png) 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Zookeeper/Ch00_install.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Install 3 | date: 2020-11-21 4 | tags: 5 | - Zookeeper 6 | categories: 7 | - Zookeeper 8 | 9 | --- 10 | 11 | # 安装环境 12 | 13 | - 用Vmware起三台虚拟机,并安装sun的jdk 14 | 15 | - 注意:系统自带的OpenJDK 只包含最精简的jdk源码,平时我们在windows上开发的一般都是用sun的JDK,所以要卸载重装 16 | 17 | - 在官网下载要的jdk版本rpm包https://www.oracle.com/java/technologies/downloads/#java8 18 | 19 | - 卸载自带的OpenJDK: 20 | 21 | - 查看安装了哪些jdk:rpm -qa |grep java 22 | 23 | - 进入root: su 24 | 25 | - 卸载所有带openJDK的包:rpm -e --nodeps xx(xx是带Openjdk的包名) 26 | 27 | - 从本机使用ftp(如Xshell)上传下载的jdk源码,一般上传到Download文件夹 28 | 29 | - 进入Download文件夹,并安装jdk:rpm -ivh xx(xx是文件名) 30 | 31 | - 使用java --version查看是否安装成功![img](https://api2.mubu.com/v3/document_image/5dd01949-3794-4a8f-a6e9-5f2ffa4fa902-14899999.jpg) 32 | 33 | - 安装zookeeper: 34 | 35 | - 在/opt下创建一个文件夹module,把zookeeper安装包放到其中 36 | 37 | - 在/opt下创建一个文件夹install,用来安装软件 38 | 39 | - 在module中运行:tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/install 表示把zookeeper安装到install目录下 40 | 41 | - 在/opt/install目录下把zookeeper改个名字:mv apache-zookeeper-3.5.7-bin/ zookeeper-3.5.7 42 | 43 | - 在安装路径下的conf中找到zoo-sample.cfg,这是zookeeper配置文件,并修改名字为zoo.cfg 44 | 45 | - 打开zoo.cfg![img](https://api2.mubu.com/v3/document_image/f50a5658-b72b-452c-8ad3-fc2f8a275dbf-14899999.jpg) 46 | 47 | - dataDir不能放在temp中,因为linux系统中定期会对临时数据清理,一般在安装路径下新建一个文件夹zkData用来存放数据,并把它更新到配置文件中 48 | 49 | - 启动zookeeper: 50 | 51 | - 先启动服务端:bin/zkServer.sh start 52 | 53 | - 可以用jps -l 进行进程访问,看看启动成功了没有 54 | 55 | - 再启动客户端进行访问:bin/zkCli.sh、 56 | 57 | - 查看zookeeper的状态:bin/zkServer.sh status 58 | 59 | - 关闭zookeeper服务:bin/zkServer.sh stop 60 | 61 | - 配置参数: 62 | 63 | - zoo.cfg中的参数: 64 | 65 | - tickTime: 2000 【通信心跳时间,单位是毫秒】![img](https://api2.mubu.com/v3/document_image/2ac3731d-e831-4ca3-a30d-f2419e0f304a-14899999.jpg) 66 | 67 | - initLimit=10 【 LF初始通信的时限,如果在建立通信时10次心跳后还没有反应,则判断对方挂了】![img](https://api2.mubu.com/v3/document_image/bef4c97e-2397-4ff4-835f-62d2cad2e8c1-14899999.jpg) 68 | 69 | - syncLimit=5 【LF同步通信时限】![img](https://api2.mubu.com/v3/document_image/ed6a5d59-87f2-4888-b733-fe3a4a8eaae6-14899999.jpg) 70 | 71 | - dataDir【保存Zookeeper中的数据】 72 | 73 | - clientPort = 2181【客户端连接端口,通常不做修改】 74 | 75 | # -------------------------------------------------------------------------------- /Blog/blogs/2022/HuaweiCloud/Ch09_OpenSource.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch09 Open Source Components 3 | date: 2024-10-12 4 | tags: 5 | - HuaweiCloud 6 | categories: 7 | - HuaweiCloud 8 | 9 | --- 10 | 11 | # 开源组件 12 | 13 | 14 | 15 | # Knative 16 | 17 | image-20241013144442775 18 | 19 | Knative-豆包 (1) 20 | 21 | Knative-豆包 (2) 22 | 23 | Knative-豆包 (3) 24 | 25 | 26 | 27 | # Kubeflow 28 | 29 | Knative-豆包 (4) 30 | 31 | 32 | 33 | # Kserve(KFServe) 34 | 35 | Knative-豆包 (5) 36 | 37 | # Karmada 38 | 39 | Knative-豆包 (6) 40 | 41 | # Volcano 42 | 43 | Knative-豆包 (7) 44 | 45 | # Kuberay 46 | 47 | Knative-豆包 (10) 48 | 49 | ![image-20241013152009655](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241013152009655.png) 50 | 51 | 52 | 53 | Knative-豆包 (8) 54 | 55 | 56 | 57 | # Volcano 和 kuberay的区别 58 | 59 | Knative-豆包 (9) 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /Blog/blogs/2022/DSD_VHDL/Ch06_Exercise.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch06 Exercise 3 | date: 2023-01-01 4 | tags: 5 | - FPGA 6 | - VHDL 7 | categories: 8 | - VHDL 9 | --- 10 | 11 | # 12 | 13 | ## 取std_logic的绝对值 14 | 15 | ![image-20230102105553371](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230102105553371.png) 16 | 17 | + 第一位不取 18 | 19 | 20 | 21 | ## Johnson counter 22 | 23 | ![image-20230104121727813](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104121727813.png) 24 | 25 | 26 | 27 | ## GRAY COUNTER 28 | 29 | ![image-20230104121753348](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104121753348.png) 30 | 31 | ![image-20230104122038643](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104122038643.png) 32 | 33 | ![image-20230104122113898](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104122113898.png) 34 | 35 | ![image-20230104122204137](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104122204137.png) 36 | 37 | ![image-20230104122308280](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104122308280.png) 38 | 39 | 40 | 41 | 42 | 43 | ## latch 44 | 45 | ![image-20230104211441785](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104211441785.png) 46 | 47 | + process 3 会产生latch 48 | + 只有simulation会有区别(会一直循环,不能跑),synthesis不会有区别(sensitive list不会影响synthesis) 49 | + sesitive list多写的话会让simulation变慢 50 | + 也可以这么写![image-20230104212406033](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104212406033.png) 51 | 52 | 53 | 54 | 55 | 56 | ![image-20230104220752116](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230104220752116.png) 57 | 58 | + proc 3只有1个Flipflop 59 | + proc 4有两个Flipflop,因为tmp在使用之前没有赋值,所以综合的时候会把他作为一个记忆元件(memory element),所以tmp也会编程一个Flip-flop 60 | 61 | 62 | 63 | 64 | 65 | ![image-20230111124908521](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230111124908521.png) 66 | 67 | 68 | 69 | # Function 70 | 71 | ![image-20230226010745246](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230226010745246.png) 72 | 73 | ![image-20230226145559823](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230226145559823.png) 74 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Nginx/Ch00_Basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 Basic 3 | date: 2023-10-07 4 | tags: 5 | - Nginx 6 | categories: 7 | - Nginx 8 | 9 | 10 | --- 11 | 12 | # 13 | 14 | ## Nginx进程 15 | 16 | ![image-20231021113256789](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021113256789.png) 17 | 18 | + master是主进程负责读取和验证配置文件,以及管理worker进程 19 | + worker进程就是nginx的工作进程,负责处理实际的请求![image-20231021113731165](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021113731165.png) 20 | 21 | 22 | 23 | #### Ubuntu安装nginx 24 | 25 | ```sh 26 | sudo apt install nginx 27 | sudo nginx -t //查看配置文件位置 28 | 29 | ``` 30 | 31 | 32 | 33 | nginx.conf中![image-20231021114503075](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021114503075.png) 34 | 35 | + 第一行表示根目录所在的文件夹 36 | + 第二行表示匹配的文件 37 | + 修改配置文件之后,要重新加载```nginx -s reload``` 38 | + ![image-20231021122404978](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021122404978.png) 39 | 40 | 41 | 42 | ## 正向代理 43 | 44 | ![image-20231021125407577](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021125407577.png) 45 | 46 | + 代理的是客户端 47 | 48 | 49 | 50 | ## 反向代理 51 | 52 | ![image-20231021125431212](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021125431212.png) 53 | 54 | + 代理的是服务端 55 | + 负载均衡实例 56 | 57 | conf文件中,在http块中写:![image-20231021125733655](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021125733655.png) 58 | 59 | ![image-20231021125829840](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021125829840.png) 60 | 61 | + 也可以加权重![image-20231021125923430](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021125923430.png) 62 | + 也可以用ip_hash,表示会根据客户端的ip来哈希,保证同一个客户端访问的一直是同一个服务器,解决了session的问题![image-20231021130040835](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021130040835.png) 63 | + 自动使用https,但是自签证书,具体百度![image-20231021130622747](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021130622747.png) 64 | 65 | 66 | 67 | ### 虚拟主机 68 | 69 | + 在一台服务器上·部署多个站点 70 | 71 | + 在配置文件中,每个server块是一个虚拟主机 72 | + 复制一个server块到新的文件中(主配置文件最后一行会自动读取所有的配置文件)![image-20231021182147866](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20231021182147866.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch17_RunningTime.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch17_RunningTime 3 | date: 2021-04-10 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | 11 | 12 | 13 | --- 14 | 15 | # RunningTime 16 | 17 | ![image-20220528202722926](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202722926.png) 18 | 19 | ![image-20220528202729469](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202729469.png) 20 | 21 | ![image-20220528202736409](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202736409.png) 22 | 23 | ![image-20220528202746414](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202746414.png) 24 | 25 | ![image-20220528202755918](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202755918.png) 26 | 27 | ![image-20220528202809843](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528202809843.png) 28 | 29 | ```java 30 | map(new TweetKeyValue()).setParallelism(2); 31 | ``` 32 | 33 | 也可以全局指定并行度。 34 | 35 | ```java 36 | env.setParallelism(4); 37 | ``` 38 | 39 | 三个位置可以配置并行度 40 | 41 | 1. flink配置文件中 42 | 43 | 2. 代码里 44 | 45 | 3. flink任务提交时 46 | 47 | 优先级: 48 | 49 | 代码>提交>配置文件 50 | 51 | 代码里算子单独设置优先级高于全局设置优先级 52 | 53 | 54 | 55 | ### **任务链** 56 | 57 | 合理的设置并行度 58 | 59 | - 减少本地通信的开销 60 | - 减少序列化和反序列化 61 | 62 | 把多个算子合并为一个task,原本的算子成为里面的subtask 63 | 64 | 满足任务链需要以下条件: 65 | 66 | - 算子具有相同并行度(具有相同的分区数) 67 | - 算子属于one-to-one 68 | 69 | **one-to-one**:stream维护着分区以及元素的顺序(比如source和map之间)。这意味着map 算子的子任务看到的元素的个数以及顺序跟 source 算子的子任务生产的元素的个数、顺序相同。map、fliter、flatMap等算子都是one-to-one的对应关系。 70 | 71 | **Redistributing**:stream的分区会发生改变。每一个算子的子任务依据所选择的transformation发送数据到不同的目标任务。例如,keyBy 基于 hashCode 重分区、而 broadcast 和 rebalance 会随机重新分区,这些算子都会引起redistribute过程,而 redistribute 过程就类似于 Spark 中的 shuffle 过程。 72 | 73 | 并行度不同的算子之前传递数据会进行重分区,Redistributing类型的算子也会进行重分区。 74 | 75 | 当然还可以禁止掉合成任务链: 76 | 77 | 1. 单个算子不参与合成任务链 78 | 79 | ```java 80 | .disableChaining() 81 | ``` 82 | 83 | 2. 从单个算子开启一个新的任务链 84 | 85 | ```java 86 | .startNewChain() 87 | ``` 88 | 89 | 3. 全局不合成任务链 90 | 91 | ```java 92 | env.disableOperatorChaining() 93 | ``` 94 | 95 | 96 | 97 | ![image-20220528203002169](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220528203002169.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Java/Ch04_CommonObject.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch04_CommonObject 3 | date: 2019-05-12 4 | tags: 5 | - Java 6 | categories: 7 | - Java 8 | --- 9 | 10 | # CommonObject 11 | 12 | ![image-20230425113521966](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425113521966.png) 13 | 14 | 15 | 16 | ORM是对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种[程序设计](https://baike.baidu.com/item/程序设计)技术,用于实现[面向对象](https://baike.baidu.com/item/面向对象)编程语言里不同[类型系统](https://baike.baidu.com/item/类型系统)的数据之间的转换。 17 | 18 | 19 | 20 | **第 1 个:DAO** 21 | 22 |   DAO(Data Access Object)数据访问对象,它是一个面向对象的数据库接口,负责持久层的操作,为业务层提供接口,主要用来封装对数据库的访问,常见操作无外乎 CURD。我们也可以认为一个 DAO 对应一个 POJO 的对象,它位于业务逻辑与数据库资源中间,可以结合 PO 对数据库进行相关的操作。 23 | 24 | 25 | 26 | **第 2 个:PO** 27 | 28 |   PO(Persistent Object)持久层对象,它是由一组属性和属性的get和set方法组成,最简单的 PO 就是对应数据库中某个表中的一条记录(也就是说,我们可以将数据库表中的一条记录理解为一个持久层对象),多个记录可以用 PO 的集合,PO 中应该不包含任何对数据库的操作。PO 的属性是跟数据库表的字段一一对应的,此外 PO 对象需要实现序列化接口。 29 | 30 | 31 | 32 | **第 3 个:BO** 33 | 34 |   BO(Business Object)业务层对象,是简单的真实世界的软件抽象,通常位于中间层。BO 的主要作用是把业务逻辑封装为一个对象,这个对象可以包括一个或多个其它的对象。举一个求职简历的例子,每份简历都包括教育经历、项目经历等,我们可以让教育经历和项目经历分别对应一个 PO,这样在我们建立对应求职简历的 BO 对象处理简历的时候,让每个 BO 都包含这些 PO 即可。 35 | 36 | 37 | 38 | **第 4 个:VO** 39 | 40 |   VO(Value Object)值对象,通常用于业务层之间的数据传递,和 PO 一样也是仅仅包含数据而已,但 VO 应该是抽象出的业务对象,可以和表对应,也可以不对应,这根据业务的需要。 如果锅碗瓢盆分别为对应的业务对象的话,那么整个碗柜就是一个值对象。此外,VO 也可以称为页面对象,如果称为页面对象的话,那么它所代表的将是整个页面展示层的对象,也可以由需要的业务对象进行组装而来。 41 | 42 | 43 | 44 | **第 5 个:DTO** 45 | 46 |   DTO(Data Transfer Object)数据传输对象,主要用于远程调用等需要大量传输对象的地方,比如我们有一个交易订单表,含有 25 个字段,那么其对应的 PO 就有 25 个属性,但我们的页面上只需要显示 5 个字段,因此没有必要把整个 PO 对象传递给客户端,这时我们只需把仅有 5 个属性的 DTO 把结果传递给客户端即可,而且如果用这个对象来对应界面的显示对象,那此时它的身份就转为 VO。使用 DTO 的好处有两个,一是能避免传递过多的无用数据,提高数据的传输速度;二是能隐藏后端的表结构。常见的用法是:将请求的数据或属性组装成一个 RequestDTO,再将响应的数据或属性组装成一个 ResponseDTO. 47 | 48 | 49 | 50 | **第 6 个:POJO** 51 | 52 |   POJO(Plain Ordinary Java Object)简单的 Java 对象,实际就是普通的 JavaBeans,是为了避免和 EJB(Enterprise JavaBean)混淆所创造的简称。POJO 实质上可以理解为简单的实体类,其中有一些属性及其getter和setter方法的类,没有业务逻辑,也不允许有业务方法,也不能携带有connection之类的方法。POJO 是 JavaEE 世界里面最灵活的对象,在简单系统中,如果从数据库到页面展示都是 POJO 的话,它可以是 DTO;如果从数据库中到业务处理中都是 POJO 的话,它可以是 BO;如果从数据库到整个页面的展示的话,它也可以是 VO. 53 | 54 | 55 | 56 | *扩展阅读:* 57 | 58 |   在实际的项目中,我们还会遇到一个常见的对象,那就是 Entity 实体对象,它对应数据库中的表,我们可以简单的理解为一个表对应一个 Entity,同样以交易订单表 Order 为例,如果这个表有 25 个字段,那么这个 OrderEntity 对象里面也要含有 25 个对应的属性。 -------------------------------------------------------------------------------- /Blog/blogs/2022/DSD_VHDL/Ch01_intro.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Introduction 3 | date: 2022-10-31 4 | tags: 5 | - FPGA 6 | - VHDL 7 | categories: 8 | - VHDL 9 | 10 | --- 11 | 12 | # Introduction 13 | 14 | 15 | 16 | ![image-20221031174138851](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221031174138851.png) 17 | 18 | ```vhdl 19 | library IEEE; 20 | use IEEE.STD_LOGIC_1164.ALL; 21 | 22 | -- Uncomment the following library declaration if using 23 | -- arithmetic functions with Signed or Unsigned values 24 | --use IEEE.NUMERIC_STD.ALL; 25 | 26 | -- Uncomment the following library declaration if instantiating 27 | -- any Xilinx leaf cells in this code. 28 | --library UNISIM; 29 | --use UNISIM.VComponents.all; 30 | 31 | entity led is 32 | Port( 33 | switch_1 : in std_logic; 34 | switch_2 : in std_logic; 35 | led_1: out std_logic; 36 | led_2: out std_logic 37 | ); 38 | -- Port ( ); 39 | end led; 40 | 41 | architecture Behavioral of led is 42 | 43 | begin 44 | led_1 <= switch_1; 45 | led_2 <= switch_2; 46 | 47 | end Behavioral; 48 | 49 | ``` 50 | 51 | 52 | 53 | **architecture**中的语句都是并行(同时)执行,不是顺序执行 54 | 55 | ![image-20221102204415325](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221102204415325.png)![image-20221102204443680](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221102204443680.png)![image-20221102204516779](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221102204516779.png) 56 | 57 | + 横坐标和纵坐标同时assign,看最后的结果是什么 58 | 59 | ## signal![image-20221102210022769](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221102210022769.png)![image-20221102210214915](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221102210214915.png) 60 | 61 | ![image-20221031231405497](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221031231405497.png) 62 | 63 | ![image-20221101165635350](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221101165635350.png) 64 | 65 | 66 | 67 | ## When 68 | 69 | ![image-20221101170141844](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221101170141844.png) 70 | 71 | 72 | 73 | ## With select 74 | 75 | ![image-20221101171013553](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20221101171013553.png) 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Blog/blogs/2022/JS/Ch05_BasicDataType.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch05 BasicDataType 3 | date: 2019-09-13 4 | tags: 5 | - JS 6 | categories: 7 | - JS 8 | --- 9 | 10 | # BasicDataType 11 | 12 | + String 13 | 14 | - Number 15 | - Boolean 16 | - Undefined: 没声明 17 | - Null:没赋值 18 | 19 | 在使用Number时注意强制类型转换,如ParseInt() 20 | 21 | 任何变量都用var声明,可以把一个函数赋值给一个变量: 22 | 23 | ```js 24 | var a = function (b) { 25 | alert(b); 26 | } 27 | a(666); 28 | ``` 29 | 30 | 数组:可以混合存所有数据类型,数组中可以存数组,也就是二维数组,也可以放类,函数 31 | 32 | 数组索引:-1表示最后一个, -2表示倒数第二个 33 | 34 | ```js 35 | var arr = new Array(); 36 | var arrr = [];//更简单的创建数组的方式 37 | var num = [1,2,3,4,"a"];//可以在创建数组的时候就赋值 38 | arr[0] = 10; 39 | arr[1] = 20; 40 | arr[2] = "aaa"; 41 | alert(arr.length);//获取数组的长度,同时也可以设置数组的长度 42 | arr.length = 4; 43 | alert(arr);//可以直接输出数组的内容 44 | ``` 45 | 46 | 数组常用方法: 47 | 48 | ```js 49 | var num = [1,2,3,4,"a"]; 50 | var len = num.push("abbb","ccc");//可以往数组末尾添加元素,返回数组的长度 51 | var lenth = num.unshift("xxx",666);//可以往数组头部添加元素,返回数组的长度 52 | var last = num.pop();//删除并返回数组的最后一个元素 53 | var first = num.shift();//删除并返回数组的第一个元素 54 | alert(num); 55 | alert(first); 56 | ``` 57 | 58 | slice: 59 | 60 | ```js 61 | var arr = [1,2,3,4,"aa","bb"]; 62 | /* 63 | 起始索引包括,结束索引不包括 64 | */ 65 | var re = arr.slice(0,2);//返回第一个,第二个元素组成的数组 66 | alert(re); 67 | ``` 68 | 69 | splice: 70 | 71 | ```js 72 | var arr = [1,2,3,4,"aa","bb"]; 73 | arr.splice(1,2,"xxx");//表示删除元素,并向该位置添加新的元素 74 | //参数1:起始索引位置 参数2:删除的数量 参数3:添加的新元素 75 | alert(arr); 76 | ``` 77 | 78 | 数组去重: 79 | 80 | ```js 81 | var arr = [1,2,6,"a",5,1,2,2,7,"a","a","b"]; 82 | for(var i = 0; i < arr.length; i++){ 83 | for(var j = i + 1; j < arr.length; j++){ 84 | if(arr[i] == arr[j]){ 85 | arr.splice(j,1); 86 | j--; 87 | } 88 | } 89 | } 90 | alert(arr); 91 | ``` 92 | 93 | ![image-20220529214003359](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214003359.png) 94 | 95 | 数组自定义排序方法: 96 | 97 | ```js 98 | //使用回调函数,返回值为1则为交换元素 99 | arr.sort(function(a, b) { 100 | if(a > b) return 1; 101 | else if (a < b) return -1; 102 | else return 0; 103 | }) 104 | alert(arr); 105 | ``` 106 | 107 | 函数调用![image-20220529214037466](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529214037466.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/Service_Computing/Ch01_Web_as_a_platform.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Web as a platform 3 | date: 2021-10-28 4 | tags: 5 | - Service 6 | - Service Computing 7 | categories: 8 | - Service Computing 9 | 10 | --- 11 | 12 | # Web as a platform 13 | 14 | + Browser-->network-->Web server-->Data source 15 | + TP-Monitor (Transaction Processing Monitor) 16 | + Presentation server: 获取输入,生成请求 17 | + Control flow server 18 | + Transaction server 19 | + Security![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/a75b2832-bf78-4a98-90a9-073ee53fff26-14899999.jpg) 20 | + Reliable:要把请求写在一个事务中,这样事务回滚的时候请求不会丢失,可以再执行一次![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/9a150e10-60d7-4d27-9c83-db24f5df9a8a-14899999.jpg) 21 | + Service:是一个web address提供的功能,是24小时运行的 22 | + Service Oriented Computing (SOC):The compute paradigm behind services 23 | + E.g. “distributed computing” is such another paradigm 24 | + Service Oriented Architecture (SOA):An architectural style to realize SOC 25 | + E.g. “client/server” 26 | + Web Service Technology (WS* and REST):A standard- and technology stack supporting SOA 27 | + E.g. “stored procedures”, “Web browser/server”,… support the client/server style 28 | + 请求者先发起一个请求,服务发现组件会发现所有可用的服务,再选出一个服务给请求者提供服务![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/6019e968-5f99-4ceb-b4c7-3ce087ee4a4e-14899999.jpg) 29 | + 服务先注册,然后用户可以发现服务,然后用户可以绑定服务 30 | + Service bus![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/bce2faa9-7377-4c81-9cfb-56ffcc4d9e55-14899999.jpg) 31 | + Manageable resource提供两个接口:img 32 | + manageability interface 可以用来管理,监视资源,并且可以接入管理系统 33 | + Resource Interface 用来提供可用的资源 34 | + sensor是用来监视属性的,effector是用来改变属性的![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/569e3a0d-161a-4fa6-8718-92bc1fe95049-14899999.jpg) 35 | + MAPE loop自主计算的核心,对资源的监视,分析,计划和执行,以保证资源不会崩,比如自动负载均衡img 36 | + 通过work flow描述了service的调用顺序![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/markdown/87149fdd-ddc9-47b6-9579-0643b54794dc-14899999.jpg) 37 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Flink/Ch19_WaterMark.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch19_Watermark 3 | date: 2021-10-21 4 | tags: 5 | - Flink 6 | - Java 7 | - BigData 8 | categories: 9 | - Flink 10 | --- 11 | 12 | # Watermark 13 | 14 | ![image-20220529111901673](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529111901673.png) 15 | 16 | ![image-20220529111919730](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529111919730.png)![image-20220529111933287](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529111933287.png)![image-20220529111943851](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529111943851.png) 17 | 18 | **Flink处理乱序数据的三个保证:** 19 | 20 | **1. watermark水位线,使得整体的数据变慢(结束之后先输出一个结果)** 21 | 22 | **2.window设置允许数据迟到(来一个迟到数据聚合一次,输出结果)** 23 | 24 | **3.侧输出流** 25 | 26 | ![image-20220529112016937](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112016937.png) 27 | 28 | **数据来了之后,放到对应的桶中,并计算插入的waterMark来判断窗口需不需要关闭,如果需要关闭,则触发计算,关闭窗口和桶** 29 | 30 | **比如如下图,5秒(时间戳)的数据来了之后,系统认为现在的时间进行到了5-3=2秒,所以把三秒的时间窗口关闭了,等8秒的数据来了之后才关闭5秒的窗口。** 31 | 32 | ![image-20220529112036016](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112036016.png) 33 | 34 | ![image-20220529112048572](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112048572.png) 35 | 36 | 37 | 38 | --- 39 | 40 | ## **应用** 41 | 42 | 如果数据没有带时间戳,则时间戳默认为Long.MIN_VALUE 43 | 44 | 前提是规定好事件语义: 45 | 46 | ```java 47 | env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); 48 | ``` 49 | 50 | 提取时间戳+设定waterMark【一般都是周期性生成】 51 | 52 | 53 | 54 | **乱序数据:** 55 | 56 | 参数为设定waterMark的延迟为999毫秒,重写的方法的返回值是从数据中提取时间戳 57 | 58 | ![image-20220529112127238](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112127238.png) 59 | 60 | 原理为周期性生成waterMark,第一个waterMark为了防止数据溢出(由于数据溢出【小于最小值】之后会变成一个超大的值)为Long.MIN_VALUE+waterMark延迟时间 61 | 62 | 63 | 64 | **非乱序数据**:不用设置延迟时间:【也是周期性生成】![image-20220529112149521](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112149521.png) 65 | 66 | 也可以自定义函数设置waterMark 67 | 68 | 69 | 70 | **周期:** 71 | 72 | ![image-20220529112214657](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112214657.png) 73 | 74 | 75 | 76 | --- 77 | 78 | 易错:![image-20220529112233587](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220529112233587.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/SSM/Ch01_Mybatis.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Mybatis 3 | date: 2019-12-09 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Spring Cloud 9 | --- 10 | 11 | # Mybatis 12 | 13 | 14 | 15 | mybatis层配置 16 | 17 | **mybatis.xml** 18 | 19 | ```xml 20 | 21 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 44 | 45 | 46 | 47 | 48 | 49 | 53 | 54 | 55 | 56 | 57 | ``` 58 | 59 | 60 | 61 | **database.properties** 62 | 63 | ```properties 64 | jdbc.driver=com.mysql.cj.jdbc.Driver 65 | jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false 66 | jdbc.username=root 67 | jdbc.password=123456 68 | ``` 69 | 70 | 71 | 72 | mapper文件:![image-20230425185003551](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425185003551.png) 73 | 74 | 75 | 76 | dao接口: 77 | 78 | image-20230425185015574 79 | 80 | 81 | 82 | service层组合dao: 83 | 84 | image-20230425185028908 -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Ch13_IO.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch13 IO 3 | date: 2022-05-12 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | 9 | 10 | --- 11 | 12 | # IO 13 | 14 | - common concepts![img](https://api2.mubu.com/v3/document_image/6abbb756-4510-407b-8c18-c5b6b75d422e-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/8932a1ed-9d2b-4340-8594-60f2c4c3a626-14899999.jpg) 15 | 16 | - 结构图:![img](https://api2.mubu.com/v3/document_image/5d2b568f-0bff-4b4a-b650-6024ce22e5f3-14899999.jpg) 17 | 18 | - 轮询![img](https://api2.mubu.com/v3/document_image/fa62b2b6-3868-4a07-a15d-61fecf70729c-14899999.jpg) 19 | 20 | - 中断 21 | 22 | 23 | 24 | 25 | 26 | - 中断的用处:![img](https://api2.mubu.com/v3/document_image/a9738706-c95f-4b8f-a8c0-8305b0a1bc22-14899999.jpg) 27 | 28 | - DMA:![img](https://api2.mubu.com/v3/document_image/582091c9-a190-470e-877a-605bad1271da-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/f35951ef-1ce3-4490-a794-78b51ff5b04b-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/9963cfe2-abc3-409f-8c51-b67ec46ecc6a-14899999.jpg) 29 | 30 | - 非阻塞调用和异步调用:![img](https://api2.mubu.com/v3/document_image/c1447e9a-3452-41cd-928b-958dc5b493c2-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/eedbbb6e-3502-47fc-b932-f22e7a35d441-14899999.jpg) 31 | 32 | - vectored IO![img](https://api2.mubu.com/v3/document_image/0a4faf09-759a-4544-ae89-3aff60863e88-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/5f983cd9-9d8a-498f-801e-ece2adf4388e-14899999.jpg) 33 | 34 | - device status table![img](https://api2.mubu.com/v3/document_image/20ea48e0-543d-4bf8-9c55-c9cfb91f360a-14899999.jpg) 35 | 36 | - buffer 37 | 38 | 39 | 40 | - 双缓冲:![img](https://api2.mubu.com/v3/document_image/75b3cbbe-e5a7-41e5-a64b-742c8aac49b0-14899999.jpg) 41 | 42 | - 复制语义:![img](https://api2.mubu.com/v3/document_image/ad689606-bd40-4c16-8160-20766e380329-14899999.jpg) 43 | 44 | - I/O生命周期:![img](https://api2.mubu.com/v3/document_image/795a230c-2b76-4250-b0ad-313943689c1a-14899999.jpg) 45 | 46 | - 流:全双工通信,一端是流头接口连接用户进程,一端是用驱动接口连接设备, 外部异步,内部同步 47 | 48 | 49 | 50 | - 每个模块都有读写队列![img](https://api2.mubu.com/v3/document_image/fda69522-0ebc-4a12-b670-704843a43a00-14899999.jpg) 51 | 52 | - IO是系统性能的主要问题:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/62311f3c-db40-47db-9065-0a90ef7d5886-14899999.jpg)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/b14f3be2-18b3-47ae-a10d-a4ee6c433e41-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/HuaweiCloud/Ch02_Concept.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02_Concept 3 | date: 2024-10-10 4 | tags: 5 | - HuaweiCloud 6 | categories: 7 | - HuaweiCloud 8 | --- 9 | 10 | 11 | 12 | ref:https://edu.huaweicloud.com/roadmap/cloudnative1.html 13 | 14 | # 概述 15 | 16 | ![image-20241011192041170](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011192041170.png) 17 | 18 | ![image-20241011192112728](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011192112728.png) 19 | 20 | ![image-20241011192308303](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011192308303.png) 21 | 22 | ![image-20241011192520610](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011192520610.png) 23 | 24 | ![image-20241011193418822](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011193418822.png) 25 | 26 | 27 | 28 | ## 工作负载 29 | 30 | ![image-20241011190604283](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011190604283.png) 31 | 32 | 33 | 34 | ### Deployment 35 | 36 | ![image-20241011190713981](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011190713981.png) 37 | 38 | image-20241011192450861 39 | 40 | ### Job 41 | 42 | ![image-20241011190745660](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011190745660.png) 43 | 44 | 45 | 46 | ### DaemonSet 47 | 48 | ![image-20241011190828549](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011190828549.png) 49 | 50 | 51 | 52 | ### StatefulSet 53 | 54 | ![](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011193630913.png) 55 | 56 | 57 | 58 | ### PV/PVC/SC 59 | 60 | ![](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011193824924.png) 61 | 62 | ![image-20241011194000965](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011194000965.png) 63 | 64 | ### Service 65 | 66 | 67 | 68 | ![image-20241011194142274](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011194142274.png) 69 | 70 | ![image-20241011194504047](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011194504047.png) 71 | 72 | ![image-20241011194510012](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20241011194510012.png) 73 | 74 | -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Ch14_Protection.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch14 Protection 3 | date: 2022-05-18 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | --- 9 | 10 | # Protection 11 | 12 | - principle:![img](https://api2.mubu.com/v3/document_image/ac2c82b7-69aa-4d24-a94d-a4d56ebf87c3-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/e77f2dc6-7548-4892-8e2d-93d5f55c9043-14899999.jpg) 13 | 14 | - Domain structure:![img](https://api2.mubu.com/v3/document_image/d951f0fd-b9e1-48f5-a0e4-3db38b9198d1-14899999.jpg) 15 | 16 | - 域的实现:![img](https://api2.mubu.com/v3/document_image/59aba8a5-bf1c-4ff3-9796-cae7914cf604-14899999.jpg) 17 | 18 | - 访问矩阵 19 | 20 | 21 | 22 | 23 | 24 | - 域切换![img](https://api2.mubu.com/v3/document_image/0f025963-1243-4470-a948-408afd076965-14899999.jpg) 25 | 26 | - 复制权限:![img](https://api2.mubu.com/v3/document_image/4fa25c6b-1867-405d-851b-f2710cc33b8c-14899999.jpg) 27 | 28 | - 权限所有者更改其他权限:修改列内权限![img](https://api2.mubu.com/v3/document_image/5d7cf73c-ddbb-4b3a-a956-6a226763974f-14899999.jpg) 29 | 30 | - 修改行内权限:![img](https://api2.mubu.com/v3/document_image/3ee60d36-d007-49c3-ac6d-50d434d1a3db-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/0d44e6d2-6980-414c-b9b4-c280ca1cb4c6-14899999.jpg) 31 | 32 | - 访问矩阵的实现:一般都是稀疏矩阵 33 | 34 | - 三元组的表:缺点:太大![img](https://api2.mubu.com/v3/document_image/e871b06b-f314-4b47-8550-bf12ad52b371-14899999.jpg) 35 | 36 | - 为每个访问对象建立一张表:每次访问都要搜索,太慢,确定域的访问权限集合太困难![img](https://api2.mubu.com/v3/document_image/ffbd50d0-6939-4a15-8668-edae939d6248-14899999.jpg) 37 | 38 | - 为每个域建立一张表:撤销能力的效率不高![img](https://api2.mubu.com/v3/document_image/8d2ef791-a461-4928-a60f-ea22ba6b6436-14899999.jpg) 39 | 40 | - lock-key:![img](https://api2.mubu.com/v3/document_image/557078d3-2509-4831-9dc0-7af58506aef5-14899999.jpg)![img](https://api2.mubu.com/v3/document_image/7e534372-9891-4efc-8cb6-c874c0b38367-14899999.jpg) 41 | 42 | - 比较:![img](https://api2.mubu.com/v3/document_image/977f2c09-5e21-47cd-9622-1fc8fbd1b424-14899999.jpg) 43 | 44 | - 应用:第一次访问的时候搜索access list,允许访问的话把capabilities创建并添加到process中![img](https://api2.mubu.com/v3/document_image/230e4d3a-f97a-469c-9d93-d09002696d02-14899999.jpg) 45 | 46 | - 权限控制:Privilege 47 | 48 | 49 | 50 | - 权限的撤回:![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/2dca1f04-5659-48d9-a6b5-c6585b29495b-14899999.jpg)![img](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/690aee34-a93c-4794-8cff-488e88fa2702-14899999.jpg) -------------------------------------------------------------------------------- /Blog/blogs/2022/SpringBoot/Ch00_HelloWorld.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch00 HelloWorld 3 | date: 2021-04-16 4 | tags: 5 | - Java 6 | - Spring 7 | categories: 8 | - Springboot 9 | --- 10 | 11 | # Hello World 12 | 13 | 尚硅谷笔记:https://www.yuque.com/atguigu/springboot 14 | 15 | + SpringBoot2 必须 java8以上,maven3.3以上 16 | 17 | **新建项目:** 18 | 19 | + 导入依赖: 20 | 21 | + 父工程为springboot 22 | 23 | + 依赖为web开发 24 | 25 | ```xml 26 | 27 | org.springframework.boot 28 | spring-boot-starter-parent 29 | 2.3.4.RELEASE 30 | 31 | 32 | 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-web 37 | 38 | 39 | 40 | ``` 41 | 42 | 43 | 44 | 创建主方法: 45 | 46 | ![image-20230425170228688](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170228688.png) 47 | 48 | 49 | 50 | 编写一个controller,接收/hello请求,并返回一个字符串(类似 springMVC) 51 | 52 | ![image-20230425170244335](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170244335.png) 53 | 54 | 55 | 56 | **(专门用来返回字符串的controller可以用@RestController注解来修饰)** 57 | 58 | **springboot简化配置,所有的配置都可以写在一个配置文件中:resource文件夹下的application.properties,可以参考官方文档** 59 | 60 | **例如修改端口:** 61 | 62 | ![image-20230425170259047](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170259047.png) 63 | 64 | 65 | 66 | **springboot简化部署,不用像以前一样打包成war包,再部署到tomcat上,可以直接打包成jar包,并使用cmd运行:** 67 | 68 | **在maven依赖中加入:** 69 | 70 | ![image-20230425170321700](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170321700.png) 71 | 72 | ```xml 73 | 74 | 75 | 76 | org.springframework.boot 77 | spring-boot-maven-plugin 78 | 79 | 80 | 81 | ``` 82 | 83 | **如果起不来,记得取消掉cmd的快速编辑模式** 84 | 85 | ![image-20230425170349576](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170349576.png) 86 | 87 | 88 | 89 | 运行: 90 | 91 | ![image-20230425170405409](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170405409.png) 92 | 93 | 94 | 95 | linux运行项目: 96 | 97 | ![image-20230425170416423](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425170416423.png) -------------------------------------------------------------------------------- /Blog/blogs/2022/OS/Lab_00.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Lab 00 3 | date: 2022-03-28 4 | tags: 5 | - OS 6 | categories: 7 | - OS 8 | --- 9 | 10 | # Lab 00 11 | 12 | - Two types of system bounds 13 | 14 | - I/O-bound: 大部分时间在等I/O,比如GUI 15 | 16 | - Processor-bound (CPU-bound):大部分时间在执行 17 | 18 | - Linux追求高响应速度,喜欢IO bound进程 19 | 20 | - 线程优先级定义: 21 | 22 | - Nice value: Range -20 (higher priority) to +19 (lower priority) 23 | 24 | - Real-time priority: Range 0 (lower priority) to 99 (higher priority) 25 | 26 | - 用户看见的是两个,但是内核中会统一起来![img](https://api2.mubu.com/v3/document_image/1f3ed7b5-1c89-4fbe-8550-1f5fd609de9a-14899999.jpg) 27 | 28 | - 五种调度类(schedule class),以及对应的调度策略: 29 | 30 | - 运行队列中有许多task![img](https://api2.mubu.com/v3/document_image/215af026-48dd-4d9c-91cd-d17eb301d2f4-14899999.jpg) 31 | 32 | - 这些task分别属于不同的调度类:Real-time 和CFS 是有优先级的 33 | 34 | 35 | 36 | - stop:只要有,就马上运行,是优先级最高的![img](https://api2.mubu.com/v3/document_image/1bcd1d2f-2563-47ef-9c28-653e8e8fb485-14899999.jpg) 37 | 38 | - Deadline:deadline越早越先运行![img](https://api2.mubu.com/v3/document_image/5c83bb26-74f0-4f3b-84d5-21dba1c0cc22-14899999.jpg) 39 | 40 | - Realtime:有两种调度算法,根据优先级运行 41 | 42 | 43 | 44 | - RR:时间片轮换,时间片耗尽的时候,会自动到优先级队尾,重新调度 45 | 46 | - FIFO:只要高优先级进程在运行,低优先级的进程是轮不上的,除非高优先级的自动放弃cpu 47 | 48 | - CFS: 49 | 50 | 51 | 52 | - 如果一个进程得以执行,随着执行时间的不断增长,其vruntime也将不断增大,没有得到执行的进程vruntime将保持不变。而调度器将会选择最小的vruntime那个进程来执行。这就是所谓的“完全公平”。不同优先级的进程其vruntime增长速度不同,优先级高的进程vruntime增长得慢,所以它可能得到更多的运行机会。 53 | - 默认优先级的进程vruntime和真实的runtime是相等的 54 | 55 | - Minimum Granularity:为了防止进程过多,导致每个进程平均分到的时间太短,上下文切换频繁,规定最小一个线程会运行多久 56 | 57 | - minimum Targeted Latency :在这段时间内,至少所有的process都运行一次 58 | 59 | - 三种调度算法![img](https://api2.mubu.com/v3/document_image/1f4dc8fe-25e8-4a91-9f51-cd11bbcb7dd8-14899999.jpg) 60 | 61 | - IDLE: 当没有进程在跑的时候会运行这个进程![img](https://api2.mubu.com/v3/document_image/1deeb702-f6aa-4a1d-b805-b0bdd9e66171-14899999.jpg) 62 | 63 | - schedule(): 64 | 65 | - 内核的调度操作分为触发和执行两个部分,触发时仅仅设置一下当前进程的TIF_NEED_RESCHED标志,执行的时候则是通过schedule()函数来完成进程的选择和切换。当前进程的thread_info->flags中TIF_NEED_RESCHED位表示需要调用schedule()函数进行调度。内核在两种情况下会设置该标志,一个是在时钟中断进行周期性的检查时,另一个是在被唤醒进程的优先级比正在运行的进程的优先级高时。 66 | 67 | - 会调用优先级最高的调度类,调度类再根据设置的调度策略决定哪个进程被调度 68 | 69 | - 什么出发了scheduler?3种情况 70 | 71 | 72 | 73 | - Task_tick(): 74 | 75 | 76 | 77 | - scheduler_tick()是所有调度子函数的父函数,而其是由Linux时间子系统的tick_device调用。tick_device是一个周期性定时器,定时时间为1个tick,当触发中断后,会在中断处理函数中,调用scheduler_tick()。 -------------------------------------------------------------------------------- /Blog/blogs/2022/Docker/Ch01_Docker.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch01 Docker 3 | date: 2022-04-18 4 | tags: 5 | - Docker 6 | categories: 7 | - Docker 8 | --- 9 | 10 | # Ch01 Docker 11 | 12 | 13 | 14 | ## 1.1.Docker作用 15 | 16 | Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? 17 | 18 | - Docker允许开发中将应用、依赖、函数库、配置一起**打包**,形成可移植镜像 19 | - Docker应用运行在容器中,使用沙箱机制,相互**隔离** 20 | 21 | 22 | 23 | Docker如何解决开发、测试、生产环境有差异的问题? 24 | 25 | - Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行 26 | 27 | 28 | 29 | Docker是一个快速交付应用、运行应用的技术,具备下列优势: 30 | 31 | - 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统 32 | - 运行时利用沙箱机制形成隔离容器,各个应用互不干扰 33 | - 启动、移除都可以通过一行命令完成,方便快捷 34 | 35 | 36 | 37 | ![image-20210731145914960](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210731145914960.png) 38 | 39 | 40 | 41 | ## 1.2.Docker架构 42 | 43 | ### 1.2.1.镜像和容器 44 | 45 | Docker中有几个重要的概念: 46 | 47 | **镜像(Image)**:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。 48 | 49 | **容器(Container)**:镜像中的应用程序运行后形成的进程就是**容器**,只是Docker会给容器进程做隔离,对外不可见。 50 | 51 | 52 | 53 | 一切应用最终都是代码组成,都是硬盘中的一个个的字节形成的**文件**。只有运行时,才会加载到内存,形成进程。 54 | 55 | 56 | 57 | 而**镜像**,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。 58 | 59 | **容器**呢,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。 60 | 61 | 62 | 63 | ![image-20210731153059464](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210731153059464.png) 64 | 65 | 66 | 67 | ### 1.2.2.DockerHub 68 | 69 | 开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。 70 | 71 | - DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。 72 | 73 | - 国内也有类似于DockerHub 的公开服务,比如 [网易云镜像服务](https://c.163yun.com/hub)、[阿里云镜像库](https://cr.console.aliyun.com/)等。 74 | 75 | 76 | 77 | 我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像: 78 | 79 | ![image-20210731153743354](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210731153743354.png) 80 | 81 | 82 | 83 | ### 1.2.3.Docker架构 84 | 85 | 我们要使用Docker来操作镜像、容器,就必须要安装Docker。 86 | 87 | Docker是一个CS架构的程序,由两部分组成: 88 | 89 | - 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等 90 | 91 | - 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。 92 | 93 | 94 | 95 | 如图: 96 | 97 | ![image-20210731154257653](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20210731154257653.png) 98 | 99 | ![image-20220418115558700](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20220418115558700.png) 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /Blog/blogs/2022/Redis/Ch02_Application.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ch02 Application 3 | date: 2019-09-30 4 | tags: 5 | - redis 6 | categories: 7 | - Redis 8 | 9 | --- 10 | 11 | # Application 12 | 13 | ![image-20230502124145469](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502124145469.png) 14 | 15 | 16 | 17 | 18 | 19 | ![image-20230425114616438](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114616438.png) 20 | 21 | ![image-20230502124543363](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502124543363.png) 22 | 23 | 解决方案: 24 | 25 | 1. 布隆过滤器(先对数据进行几次哈希,再以此来匹配新的请求,来判断库内是否存在) 26 | 2. 缓存空对象(即使返回空对象(查询失败)也进行缓存) 27 | 28 | + 但是布隆过滤器的删除也是难点,比如数据库删除的数据怎么在布隆过滤器也删除,有可能有别的key值也占用了这个hash值 29 | 30 | ![image-20230502125759140](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502125759140.png) 31 | 32 | ![image-20230502125813556](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502125813556.png) 33 | 34 | ![image-20230502125835847](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502125835847.png) 35 | 36 | ![image-20230502125954238](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502125954238.png) 37 | 38 | ![image-20230502130044997](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502130044997.png) 39 | 40 | ![image-20230502130113447](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502130113447.png) 41 | 42 | ![image-20230502130704988](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502130704988.png) 43 | 44 | ![image-20230502130710770](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502130710770.png) 45 | 46 | 47 | 48 | 49 | 50 | ![image-20230425114706111](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114706111.png) 51 | 52 | + 比如设置了超时时间(为了避免缓存和数据库长期保持不一致) 53 | + 但是在系统第一次部署的时候,缓存预热,把很多key设置了一样的超时时间,就会造成缓存雪崩(解决办法:使用固定值+随机值作为失效时间) 54 | + 目前分布式缓存解决方案都很难做到和数据库强一致 55 | 56 | ![image-20230425114715561](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230425114715561.png) 57 | 58 | 59 | 60 | ## 缓存击穿 61 | 62 | 63 | 64 | 解决方案 65 | 66 | + 把db的执行当作一个临界资源 67 | 68 | + 单机加锁 69 | 70 | + 分布式锁![image-20230502125237983](https://markdown-1301334775.cos.eu-frankfurt.myqcloud.com/image-20230502125237983.png) 71 | 72 | + 没抢到锁就阻塞等待,但是有问题会阻塞很久,可能把rpc的连接池打爆 73 | 74 | + 返回一个默认值,在key-value的value里面加上逻辑过期时间,每次判断一下,如果时间过期再抢分布式锁,查询数据库并更新缓存。如果没抢到分布式锁,就直接返回逻辑上过期的数据(弱一致性) 75 | 76 | 77 | 78 | 79 | 80 | --------------------------------------------------------------------------------