├── .gitattributes
├── .gitignore
├── Ai
├── DevPlatform.md
├── KnowledgeGraph.md
├── Prompt.md
├── Rag.md
├── Readme.md
├── Voice.md
└── img
│ ├── 001-kg-arch.webp
│ └── 002-rag-map.png
├── Algorithm
├── Algorithm.md
├── Cryptography.md
├── DS
│ ├── Graph.md
│ ├── LinearList.md
│ ├── Readme.md
│ ├── Tree.md
│ └── img
│ │ ├── b_tree_index.excalidraw.svg
│ │ └── skiplist.drawio.svg
├── Sort.md
└── img
│ └── 001-algorithm-base.km.svg
├── BSD
├── FreeBSD.md
├── OpenBSD.md
└── Readme.md
├── BigData
├── DataAnalysis.md
├── DataIntegration.md
├── DataOrchestration.md
├── DataProcessingEngine
│ ├── Flink.md
│ └── Readme.md
├── DataQuality.md
├── DataSecurity.md
├── Readme.md
└── img
│ └── datax-main-process.webp
├── C
└── CBase.md
├── Database
├── DataBase.md
├── Graph.md
├── Memcached.md
├── MongoDB.md
├── MongoDBAdvance.md
├── MySQL.md
├── MySQLAdvance.md
├── MySQLIndex.md
├── MySQLInnodb.md
├── Neo4j.md
├── OLAP
│ ├── Clickhouse.md
│ ├── ClickhouseAdvance.md
│ ├── Doris.md
│ ├── Readme.md
│ └── img
│ │ ├── 001-dis-send-query.webp
│ │ └── 002-dis-merge-result.webp
├── Oracle.md
├── OraclePerformances.md
├── PostgreSQL.md
├── PostgreSQLAdvance.md
├── Readme.md
├── Redis.md
├── RedisAdvance.md
├── SQL.md
├── SQLServer.md
└── img
│ └── redis-store-rule.drawio.svg
├── Distributed
├── CloudNative.md
├── ConfigCenter
│ ├── Apollo.md
│ ├── Nacos.md
│ ├── Readme.md
│ └── ZooKeeper.md
├── HA
│ ├── RateLimit.md
│ └── Readme.md
├── MQ
│ ├── Kafka.md
│ ├── MQ.md
│ └── MQTheory.md
├── README.md
├── RPC.md
├── ServiceDiscovery
│ └── Readme.md
└── Transaction
│ └── Readme.md
├── DotNet
└── Readme.md
├── FrontEnd
├── Font.md
├── Frame
│ ├── README.md
│ └── Vue.md
├── HTML5.md
├── HTTPStatusCode.md
├── JavaScript.md
├── LearnPS.md
├── Node
│ └── NodeJS.md
├── SVG.md
└── ViewSolution.md
├── Functional
├── Clojure.md
├── FPBase.md
└── Kotlin.md
├── Game
├── GameEngine.md
└── MC.md
├── Go
├── GoBase.md
├── GoDatabase.md
├── GoRestful.md
├── Map
│ └── GoMap.md
├── Readme.md
└── img
│ └── gmp.drawio.svg
├── Groovy
└── Groovy.md
├── Hardware
├── BIOS.md
├── Disk.md
└── Interface.md
├── Java
├── AdvancedLearning
│ ├── Cache
│ │ ├── Caffeine.md
│ │ ├── EhCache.md
│ │ ├── GuavaCache.md
│ │ └── Readme.md
│ ├── Concurrency
│ │ ├── AQS.md
│ │ ├── Atomic.md
│ │ ├── ExecutorAndPool.md
│ │ ├── ForkAndJoin.md
│ │ ├── Lock.md
│ │ └── img
│ │ │ └── 001-concurrency-base.km.svg
│ ├── JDBC.md
│ ├── JMX.md
│ ├── JVM.md
│ ├── JavaClass.md
│ ├── JavaConcurrency.md
│ ├── JavaDebug.md
│ ├── JavaGenerics.md
│ ├── JavaIO.md
│ ├── JavaNetwork.md
│ ├── JavaProxy.md
│ ├── JavaReflection.md
│ ├── JavaSPI.md
│ ├── JavaSerialize.md
│ ├── JavaThread.md
│ ├── JvmGC.md
│ ├── JvmTool.md
│ ├── Release
│ │ ├── JDKAndJRE.md
│ │ ├── Java11.md
│ │ ├── Java7.md
│ │ ├── Java8.md
│ │ ├── JavaReleaseVersion.md
│ │ └── img
│ │ │ └── 001-jdk-release.km.svg
│ ├── Security
│ │ └── Readme.md
│ ├── Tuning
│ │ ├── JavaOOM.md
│ │ ├── JavaPGO.md
│ │ ├── JavaTroubleshoot.md
│ │ ├── Practice.md
│ │ ├── Readme.md
│ │ └── img
│ │ │ └── mind.drawio.svg
│ └── img
│ │ ├── 001-jvm-runtime-memory.drawio.svg
│ │ ├── 002-method-stack.drawio.svg
│ │ ├── 003-jvm-generation-design.drawio.svg
│ │ ├── 004-jvm-structure.drawio.svg
│ │ ├── 005-java-main.km.svg
│ │ ├── 006-jvm-memory.drawio.svg
│ │ ├── 007-jvm-memory.webp
│ │ └── 008-jvm-run-memory-area.webp
├── AlibabaJavaStandard.md
├── Android
│ └── AndroidBase.md
├── Basic
│ ├── JavaAnnotation.md
│ ├── JavaBasicSyntax.md
│ ├── JavaDeploy.md
│ ├── JavaException.md
│ ├── JavaInheritedAndInterface.md
│ └── StringConcat.md
├── Blog
│ ├── Java-ClassLoad-Confuse.md
│ ├── WebSocket-demo.md
│ ├── instantiation-object.md
│ └── reduce-if-else-for-java.md
├── Collection
│ ├── JavaCollection.md
│ ├── List.md
│ └── Map
│ │ ├── ConcurrentHashMap.md
│ │ ├── HashMap.md
│ │ ├── LinkedHashMap.md
│ │ ├── Readme.md
│ │ └── TreeMap.md
├── Ecosystem
│ ├── Activiti.md
│ ├── Dubbo
│ │ ├── Dubbo.md
│ │ └── MulticaseRegistry.md
│ ├── Guava.md
│ ├── Hibernate.md
│ ├── JPA.md
│ ├── JavaBoot.md
│ ├── JavaRedis.md
│ ├── MultipleLanguageInJVM.md
│ ├── Mybatis.md
│ ├── Netty
│ │ ├── Netty.md
│ │ ├── NettyDesign.md
│ │ ├── Readme.md
│ │ └── img
│ │ │ └── 001-reactor-netty.drawio.svg
│ ├── POI.md
│ ├── QueryDSL.md
│ ├── README.md
│ ├── Scheduler
│ │ ├── Quartz.md
│ │ └── Readme.md
│ ├── Servlet
│ │ ├── Jetty.md
│ │ ├── JettyDesign.md
│ │ ├── Readme.md
│ │ ├── Servlet.md
│ │ ├── Tomcat.md
│ │ ├── TomcatDesign.md
│ │ └── img
│ │ │ └── 001-jetty-selector.drawio.svg
│ ├── Solr.md
│ ├── Vertx.md
│ ├── WebFramework.md
│ └── http
│ │ └── OKHTTP.md
├── GUI
│ └── JavaFX.md
├── JavaReadme.md
├── Log.md
├── MSA
│ ├── Quarkus.md
│ └── README.md
├── README.md
├── Spring
│ ├── Cloud
│ │ ├── Readme.md
│ │ └── SpringCloud-Gateway.md
│ ├── Flux
│ │ ├── FluxConcept.md
│ │ └── WebFlux.md
│ ├── README.md
│ ├── Spring.md
│ ├── SpringAOP.md
│ ├── SpringBoot.md
│ ├── SpringBoot2.md
│ ├── SpringBoot3.md
│ ├── SpringMVC.md
│ ├── SpringSecurity.md
│ ├── SpringTest.md
│ ├── SpringbootDatabase.md
│ ├── Transactional.md
│ ├── Why
│ │ └── Readme.md
│ └── img
│ │ ├── 001-druid.webp
│ │ ├── 002-druid.webp
│ │ └── 003-druid.webp
├── Test
│ ├── JMH.md
│ ├── JavaCucumber.md
│ ├── JavaHamcreset.md
│ ├── JavaTest.md
│ ├── Junit.md
│ └── TestNG.md
├── Tool
│ ├── Eclipse.md
│ ├── Gradle.md
│ ├── GradleAdvance.md
│ ├── IDEA.md
│ ├── Jacoco.md
│ ├── Lombok.md
│ ├── MapStruct.md
│ ├── Maven.md
│ ├── MavenAdvance.md
│ └── img
│ │ └── image.webp
└── img
│ └── 001-design-pattern.km.svg
├── LICENSE
├── Linux
├── Arch
│ ├── Arch.md
│ └── Manjaro.md
├── Base
│ ├── LinuxBase.md
│ ├── LinuxCommand.md
│ ├── LinuxCompressFile.md
│ ├── LinuxDebug.md
│ ├── LinuxDirectoryStructure.md
│ ├── LinuxEffective.md
│ ├── LinuxFile.md
│ ├── LinuxManual.md
│ ├── LinuxNetwork.md
│ ├── LinuxPerformance.md
│ ├── LinuxProblem.md
│ ├── LinuxStreamEditor.md
│ ├── LinuxUI.md
│ ├── ReleaseExperience.md
│ ├── SSH.md
│ └── img
│ │ └── 001-linux-base-cmd.km.svg
├── Container
│ ├── Docker.md
│ ├── DockerAdvance.md
│ ├── DockerFiles.md
│ ├── DockerSoft.md
│ ├── Helm.md
│ ├── K3s.md
│ ├── Kubernetes.md
│ ├── Podman.md
│ ├── Readme.md
│ ├── Vagrant.md
│ └── img
│ │ ├── 001-oci-k8s-docker.webp
│ │ └── 002-docker-run-arch.webp
├── DE
│ ├── Gnome.md
│ ├── KDE.md
│ └── Xfce.md
├── Debian
│ ├── Debian.md
│ ├── Deepin.md
│ └── Ubuntu.md
├── JavaDevInit.md
├── Light
│ ├── Alpaquita.md
│ ├── Alpine.md
│ └── Readme.md
├── LinuxReadme.md
├── Readme.md
├── RedHat
│ ├── CentosBase.md
│ └── Readme.md
└── Tool
│ ├── IME.md
│ ├── Nginx.md
│ ├── NginxAdvance.md
│ ├── NginxIngress.md
│ ├── Tmux.md
│ ├── Vim.md
│ └── img
│ └── nginx.drawio.svg
├── ML
├── Platform.md
├── Readme.md
├── Tree
│ ├── DecisionTree.md
│ └── Readme.md
└── img
│ ├── h2o-glm.excalidraw.svg
│ └── h2o-structure.excalidraw.svg
├── MyBlog
├── 12306.md
├── 2018-3-15-install-deepin.md
├── 2020-05-16-install-manjaro.md
├── Flink-with-batch.md
├── Readme.md
├── how-to-design-notice-unread.md
├── server-push.md
└── twenty-years-of-weak-japan.md
├── Python
├── Python.md
├── PythonConcurrency.md
├── PythonGUI.md
├── PythonGame.md
├── PythonOffices.md
├── PythonWeb.md
├── Readme.md
└── Tool
│ ├── PyCharm.md
│ └── Selenium.md
├── Reactive
├── ProjectReactor.md
└── README.md
├── Readme.md
├── Repository.md
├── Rust
├── Readme.md
└── RustBase.md
├── SUMMARY.md
├── Scala
├── SBT.md
└── Scala.md
├── Script
├── Bash.md
├── Bat.md
├── Lua.md
├── ShellLearn.md
└── Zsh.md
├── Skills
├── Application
│ ├── Android.md
│ ├── AppManual.md
│ ├── Dict.md
│ ├── Editor.md
│ ├── Offices.md
│ ├── VirtualBox.md
│ └── WebBrowser.md
├── Blog.md
├── CS
│ ├── BasicOperator.md
│ ├── CharacterEncoding.md
│ ├── CompilingPrinciple.md
│ ├── Computer.md
│ ├── FloatingPoint.md
│ ├── Generics.md
│ ├── IO.md
│ ├── OperatingSystem
│ │ └── Readme.md
│ ├── Profile.md
│ ├── README.md
│ ├── Time.md
│ ├── Virtualization.md
│ └── img
│ │ ├── 001-reactor-multiple.drawio.svg
│ │ ├── char-error-decode-situation.webp
│ │ ├── compile.drawio.svg
│ │ └── generic_and_meta.webp
├── Cache
│ └── Cache.md
├── Councurrency
│ └── Concurrency.md
├── DevOps
│ ├── ContinuousIntegration.md
│ ├── ELK.md
│ ├── Jenkins.md
│ ├── PrivateDeploy.md
│ └── README.md
├── Document
│ ├── DslGraph.md
│ ├── License.md
│ ├── MarkDown.md
│ ├── Process.md
│ ├── Readme.md
│ ├── RequirementsDocument.md
│ ├── UML.md
│ └── img
│ │ └── 001-dev-process.km.svg
├── Ecology
│ ├── APM.md
│ ├── Gateway.md
│ ├── HA
│ │ └── Readme.md
│ ├── MinIO.md
│ ├── OSS.md
│ ├── PGO.md
│ └── WebPerformance.md
├── GUI
│ └── GTK.md
├── Media
│ ├── AudioProcessing.md
│ ├── ImageFormat.md
│ ├── Readme.md
│ └── VideoFormat.md
├── Network
│ ├── CDN.md
│ ├── HTTP.md
│ ├── MITM.md
│ ├── Network.md
│ ├── Readme.md
│ ├── Security.md
│ ├── TCP.md
│ ├── WebSecurity.md
│ └── img
│ │ └── 001-network-base.km.svg
├── OpenCV
│ └── Readme.md
├── Problem.md
├── Product
│ └── User.md
├── README.md
├── RegularExpression.md
├── Search
│ ├── Elasticsearch.md
│ ├── ElasticsearchAdvance.md
│ └── Readme.md
├── Serialization
│ ├── Protobuf.md
│ └── Serialization.md
├── SoftwareEngineering
│ ├── CelebrityQuotes.md
│ ├── CodeExcellentCode.md
│ ├── DesignPattern.md
│ ├── MIS.md
│ ├── ProgramThinking.md
│ ├── ProgrammingParadigm.md
│ ├── README.md
│ ├── Situation.md
│ ├── SoftwareDesignEngineer.md
│ └── img
│ │ └── auth-and-store.drawio.svg
├── Spider
│ └── SpiderBase.md
├── Test
│ ├── Benchmark.md
│ ├── Cucumber.md
│ ├── Hamcrest.md
│ ├── Readme.md
│ └── TestTheory.md
├── Vcs
│ ├── GitAction.md
│ ├── GitAdvance.md
│ ├── GitBase.md
│ ├── GitTeam.md
│ ├── Readme.md
│ ├── Svn.md
│ └── img
│ │ └── git-merge-situation.drawio.svg
├── Web
│ ├── GraphQL.md
│ ├── RESTful.md
│ └── WebAssembly.md
├── Website.md
└── Work
│ ├── Cooperation.md
│ ├── EffectiveWork.md
│ └── img
│ └── 001-effective-learn.km.svg
├── Windows
├── README.md
├── WindowsWithHibernate.md
└── Wsl.md
├── create_tree.py
└── wordRecord.sh
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 | *.sh linguist-language=java
4 | *.py linguist-language=java
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.bak
2 | .vscode/
3 | *.log
4 | *.code-workspace
5 |
6 | ignore.ini
7 | refresh_catalog.py
8 | refresh_md.sh
9 |
10 | git-report/
11 |
--------------------------------------------------------------------------------
/Ai/DevPlatform.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DevPlatform
3 | date: 2025-01-10 16:30:07
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [开发平台](#开发平台)
11 | - 2. [RAG](#rag)
12 | - 2.1. [QAnything](#qanything)
13 | - 3. [综合平台](#综合平台)
14 | - 3.1. [FastGPT](#fastgpt)
15 | - 3.2. [Dify](#dify)
16 | - 3.3. [RagFlow](#ragflow)
17 | - 3.3.1. [Tips](#tips)
18 |
19 | 💠 2025-05-30 16:46:34
20 | ****************************************
21 | # 开发平台
22 |
23 | # RAG
24 |
25 | ## QAnything
26 | > [netease-youdao/QAnything: Question and Answer based on Anything.](https://github.com/netease-youdao/QAnything)
27 | > [来自工业界的 RAG 服务,有道 QAnything 源码全流程深度解析 - 知乎](https://zhuanlan.zhihu.com/p/697031773)
28 |
29 | > [为RAG而生-BCE embedding技术报告 - 知乎](https://zhuanlan.zhihu.com/p/681370855)
30 |
31 | 更新频率低,可作为学习参考
32 |
33 | ************************
34 |
35 | # 综合平台
36 | ## FastGPT
37 | > [labring/FastGPT](https://github.com/labring/FastGPT)
38 |
39 | 知识库平台
40 |
41 | > [一款纯 js 实现的大模型应用服务 FastGPT 解读 - 易迟的博客 | Bryan Blog](https://hustyichi.github.io/2024/07/04/fastgpt/)
42 | > [FastGPT解密 - cumber的专栏 - 掘金](https://juejin.cn/column/7350107540326236169)
43 |
44 | ## Dify
45 | > [Dify | Dify](https://docs.dify.ai/zh-hans)
46 |
47 |
48 | > Api方式调用 实质是一个HTTP SSE请求,在response中推事件给客户端
49 |
50 | 通常是 node_started text_chunk node_finished workflow_finished。 流式回复通过text_chunk实现,但是目前存在bug在复杂的if流程中 chunk可能会被合并输出,达不到流效果。
51 |
52 | ## RagFlow
53 | > [infiniflow/ragflow: RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.](https://github.com/infiniflow/ragflow?tab=readme-ov-file)
54 |
55 | ### Tips
56 | > [IF ELSE can cause the Stream output of LLM nodes to fail](https://github.com/langgenius/dify/issues/12068) if else连接的流式LLM输出变非流了
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Ai/Prompt.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Prompt
3 | date: 2025-04-30 11:30:51
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Prompt](#prompt)
11 |
12 | 💠 2025-04-30 11:30:56
13 | ****************************************
14 | # Prompt
15 |
16 | > [Text generation and prompting - OpenAI API](https://platform.openai.com/docs/guides/text?api-mode=responses)
17 | > [[GenAI][RAG] Prompt Engineering for Multimodal Model - HackMD](https://hackmd.io/@YungHuiHsu/rJzaU3LSC)
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Ai/Readme.md:
--------------------------------------------------------------------------------
1 | # Local Ai
2 | > [The 6 Best LLM Tools To Run Models Locally](https://getstream.io/blog/best-local-llm-tools/)
3 |
4 | > [Docs | LocalAI documentation](https://localai.io/docs/)
5 |
6 | ## Ollama
7 | > [Ollama](https://ollama.com/)
8 | > [ollama/ollama](https://github.com/ollama/ollama/tree/main)
9 |
10 | 可以像Docker一样一层层自定义模型
11 |
--------------------------------------------------------------------------------
/Ai/Voice.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Voice
3 | date: 2025-03-29 12:06:38
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [语音大模型](#语音大模型)
12 |
13 | 💠 2025-03-29 12:06:38
14 | ****************************************
15 | # 语音大模型
16 | 传统路径为 ASR和TTS
17 |
18 | > [语音大模型概述(持续更新中2025.03) - 知乎](https://zhuanlan.zhihu.com/p/14831605089)
19 |
20 |
--------------------------------------------------------------------------------
/Ai/img/001-kg-arch.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Ai/img/001-kg-arch.webp
--------------------------------------------------------------------------------
/Ai/img/002-rag-map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Ai/img/002-rag-map.png
--------------------------------------------------------------------------------
/Algorithm/DS/Graph.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Graph
3 | date: 2024-11-18 14:46:29
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Graph](#graph)
12 | - 1.1. [最小生成树](#最小生成树)
13 |
14 | 💠 2024-11-18 14:46:29
15 | ****************************************
16 |
17 | # Graph
18 |
19 |
20 | **「树」和「图」的根本区别:树不会包含环,图可以包含环** 。
21 |
22 |
23 | ## 最小生成树
24 |
--------------------------------------------------------------------------------
/Algorithm/DS/LinearList.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: LinearList
3 | date: 2023-10-03 22:50:59
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [线性表](#线性表)
11 | - 1.1. [顺序表](#顺序表)
12 | - 1.2. [链表](#链表)
13 | - 1.2.1. [跳表](#跳表)
14 |
15 | 💠 2024-03-30 11:43:28
16 | ****************************************
17 | # 线性表
18 |
19 | ## 顺序表
20 | 数组 内存连续
21 |
22 | ## 链表
23 |
24 | ### 跳表
25 | > [参考: 跳表SkipList ](http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html)
26 | > [Skip lists: a probabilistic alternative to balanced trees](https://www.epaperpress.com/sortsearch/download/skiplist.pdf)
27 |
28 | 有序链表变化而来, 在部分节点上存储跨越了多个节点距离的节点指针(索引)
29 |
30 | > 例如: 同节点不同的跨度,可以理解为不同的索引层
31 | 
32 |
33 | 优势:
34 | - 结构简单,操作成本低, Redis中Zset有使用到
35 |
36 | 劣势:
37 | - 更新时,节点会随机成为多层索引节点, 指针修改成本高, 索引层是一个不稳定的数据结构
38 | - 不适合做磁盘层索引,对IO不友好,存储太零散没法批量读,所以MySQL索引会选用B+
39 |
40 |
--------------------------------------------------------------------------------
/Algorithm/DS/Readme.md:
--------------------------------------------------------------------------------
1 | 数据结构
2 |
3 | # TODO
4 | 跳表
5 |
--------------------------------------------------------------------------------
/Algorithm/DS/Tree.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Tree
3 | date: 2023-10-03 20:23:41
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [树](#树)
11 | - 1.1. [二叉树](#二叉树)
12 | - 1.2. [二叉搜索树](#二叉搜索树)
13 | - 1.3. [AVL树](#avl树)
14 | - 1.4. [红黑树](#红黑树)
15 | - 1.5. [多叉树](#多叉树)
16 | - 1.6. [BTree](#btree)
17 | - 1.7. [B+Tree](#b+tree)
18 |
19 | 💠 2024-01-24 18:24:52
20 | ****************************************
21 | ---
22 |
23 | # 树
24 |
25 | - [一文搞懂二叉搜索树、B树、B+树、AVL树、红黑树](https://zhuanlan.zhihu.com/p/258078863)
26 |
27 | 树是一种特殊的无环连通图
28 |
29 |
30 | ## 二叉树
31 |
32 | ## 二叉搜索树
33 |
34 | AVL,红黑树都是基于二叉搜索树做了不同的限制而来
35 |
36 | 特点
37 |
38 | - 任意节点左子树不为空,则左子树的值均小于根节点的值.
39 | - 任意节点右子树不为空,则右子树的值均大于于根节点的值.
40 | - 任意节点的左右子树也分别是二叉查找树.
41 | - 没有键值相等的节点.
42 |
43 | 在查找数据时, 最优情况是 O(logn) 最坏是O(n) 即树退化成了链表
44 |
45 | ## AVL树
46 | > 平衡二叉搜索树
47 |
48 | 最早提出的平衡树, 应用不甚广泛, Windows对进程地址空间的管理有使用到 AVL 树
49 |
50 | 特点:
51 | - 二叉搜索树的前提增加平衡性条件约束:任意节点的左子树和右子树的高度差小于2
52 |
53 | ## 红黑树
54 |
55 | > 对称二叉 B 树
56 |
57 | 平衡二叉树, 广泛使用在各种语言的基本容器中, Java 的 TreeSet TreeMap HashMap, C++ 的 map set
58 |
59 | 红黑树具有以下5种性质:
60 |
61 | 1. 节点是红色或黑色。
62 | 2. 根节点是黑色。
63 | 3. 每个叶节点(NIL节点,空节点)是黑色的。
64 | 4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
65 | 5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
66 |
67 | 红黑树的时间复杂度为O(log n),与树的高度成正比。
68 | 红黑树每次的插入、删除操作都需要做平衡,平衡时有可能会改变根节点的位置,颜色转换,左旋,右旋等。
69 |
70 | ## 多叉树
71 |
72 | 每个节点下可以有多个子节点, 实际上二叉树是多叉树的特例(子节点只有两个)
73 |
74 | - 多叉树转二叉树: 左节点是孩子节点 右节点是兄弟节点
75 |
76 | ## BTree
77 | - [B Tree](https://en.wikipedia.org/wiki/B-tree)
78 |
79 |
80 |
81 | 用在磁盘文件索引和数据库索引等
82 |
83 | ## B+Tree
84 | > [B+ tree](https://en.wikipedia.org/wiki/B%2B_tree)
85 |
86 |
--------------------------------------------------------------------------------
/BSD/FreeBSD.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: FreeBSD
3 | date: 2020-02-18 21:06:01
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [FreeBSD](#freebsd)
11 |
12 | **目录 end**|_2020-05-28 16:05_|
13 | ****************************************
14 | # FreeBSD
15 | > [Official Site](https://www.freebsd.org/)
16 |
17 | > [软件安装预览](https://www.freebsd.org/doc/zh_CN/books/handbook/ports.html#ports-synopsis)
18 |
--------------------------------------------------------------------------------
/BSD/OpenBSD.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: OpenBSD
3 | date: 2020-02-18 21:06:01
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [OpenBSD](#openbsd)
11 | 1. [安装](#安装)
12 |
13 | **目录 end**|_2020-04-27 23:42_|
14 | ****************************************
15 | # OpenBSD
16 | > [Official Site](http://www.openbsd.org/)
17 |
18 | ## 安装
19 | > [How to install openBSD](http://blog.up-link.ro/openbsd-how-to-install-openbsd-openbsd-4-7-installation-guide/)
20 | > [How to install XFCE Desktop in OpenBSD](https://www.linuxhelp.com/how-to-install-xfce-desktop)
21 |
22 |
--------------------------------------------------------------------------------
/BSD/Readme.md:
--------------------------------------------------------------------------------
1 | # BSD
2 |
3 | > [Difference between FreeBSD and OpenBSD ](http://www.differencebetween.info/difference-between-freebsd-and-openbsd)`简单说就是OpenBSD重安全 FreeBSD重性能`
4 |
5 |
--------------------------------------------------------------------------------
/BigData/DataAnalysis.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DataAnalysis
3 | date: 2024-06-04 00:06:44
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [数据分析](#数据分析)
11 | - 2. [数据统计](#数据统计)
12 |
13 | 💠 2024-12-04 16:30:24
14 | ****************************************
15 | # 数据分析
16 | [Wikipedia: Data analysis](https://en.wikipedia.org/wiki/Data_analysis)
17 |
18 | > [OLAP 数据库](/Database/OLAP/Readme.md)
19 |
20 | > [RoaringBitmap](https://github.com/RoaringBitmap/RoaringBitmap)更好用的 Java 压缩位图数据结构, Spark,Hive,Clickhouse 都有使用
21 |
22 | > [Downloads | Synthea](https://synthea.mitre.org/downloads)`医疗数据集`
23 |
24 | # 数据统计
25 | - TF-IDF(词频-逆文档频率)算法
26 |
--------------------------------------------------------------------------------
/BigData/DataOrchestration.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DataOrchestration
3 | date: 2024-04-17 15:18:45
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [数据协作](#数据协作)
11 | - 1.1. [DolphinScheduler](#dolphinscheduler)
12 | - 1.2. [Argo](#argo)
13 | - 1.3. [Airflow](#airflow)
14 | - 2. [其他](#其他)
15 | - 2.1. [Azkaban](#azkaban)
16 | - 2.2. [nifi](#nifi)
17 |
18 | 💠 2024-10-21 15:37:17
19 | ****************************************
20 | # 数据协作
21 | > [What is Data Orchestration & Why It’s Essential for Analysis](https://segment.com/resources/data-strategy/what-is-data-orchestration/)
22 |
23 | > [orchestration · GitHub Topics](https://github.com/topics/orchestration)
24 | > [data-orchestration · GitHub Topics](https://github.com/topics/data-orchestration)
25 |
26 | > [kestra-io/kestra](https://github.com/kestra-io/kestra)
27 |
28 | ## DolphinScheduler
29 | > [Github](https://github.com/apache/dolphinscheduler)
30 | > [Youtube](https://www.youtube.com/@apachedolphinscheduler)
31 |
32 | DolphinScheduler 是国内易观数据公司在2018年开源,2019年进入Apache项目的分布式调度工具,
33 |
34 | 思考:Job实例的执行交由K8S,避免Worker出现资源瓶颈,甚至去掉Worker只保留master,实例执行全部用K8S
35 |
36 | > [DolphinScheduler | 任务类型](https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E5%8A%9F%E8%83%BD%E4%BB%8B%E7%BB%8D_menu/%E4%BB%BB%E5%8A%A1%E7%B1%BB%E5%9E%8B_menu)
37 | - conditions 可以 conditions 通过对上游节点执行成功/失败, 走向下游不同流程,例如全局参数来控制全量或增量执行不同的SQL
38 |
39 | ## Argo
40 | > [Github](https://github.com/argoproj/argo-workflows)
41 |
42 | 云原生工作流引擎
43 |
44 | ## Airflow
45 | > [Github](https://github.com/apache/airflow)
46 |
47 | 强代码实现的工作流引擎
48 |
49 | ************************
50 |
51 | # 其他
52 | ## Azkaban
53 | > [Github](https://github.com/azkaban/azkaban)
54 |
55 | 主要用于管理Hadoop工作流程
56 |
57 | ## nifi
58 | > [Github](https://github.com/apache/nifi)
59 |
60 | 处理和分发数据, 组件也只针对数据处理,功能比较单一
61 |
--------------------------------------------------------------------------------
/BigData/DataProcessingEngine/Flink.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Flink
3 | date: 2019-05-31 09:30:43
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Flink](#flink)
11 |
12 | **目录 end**|_2020-05-17 16:13_|
13 | ****************************************
14 | # Flink
15 | > [Official Site](https://flink.apache.org/) | [Github](https://github.com/apache/flink)
16 | > [https://training.ververica.com/](https://training.ververica.com/)
17 |
18 | > [flink-learning](https://github.com/zhisheng17/flink-learning)
19 |
--------------------------------------------------------------------------------
/BigData/DataProcessingEngine/Readme.md:
--------------------------------------------------------------------------------
1 | # 数据处理引擎
2 |
3 | Flink
4 | Spark
5 | Storm
6 |
7 |
--------------------------------------------------------------------------------
/BigData/DataQuality.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DataQuality
3 | date: 2024-05-07 19:32:22
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Data Quality](#data-quality)
11 | - 1.1. [数据清洗](#数据清洗)
12 | - 2. [Topic](#topic)
13 | - 2.1. [大宽表周期滚动更新时 不同版本间的数据质量分析](#大宽表周期滚动更新时-不同版本间的数据质量分析)
14 |
15 | 💠 2024-11-13 17:32:20
16 | ****************************************
17 | # Data Quality
18 |
19 | ## 数据清洗
20 | > [whyhow-ai/knowledge-table](https://github.com/whyhow-ai/knowledge-table)`非结构化提取结构化的工具`
21 | > [数据清洗概念,方法及流程等等要点初探](https://mp.weixin.qq.com/s?__biz=MzI1MjQ2OTQ3Ng==&mid=2247626203&idx=1&sn=2b5805256285d28b81c042533f4e8881)
22 |
23 | ************************
24 |
25 | # Topic
26 |
27 | > [数据一致性比对(番外)](https://developer.aliyun.com/article/1204687)
28 |
29 | ## 大宽表周期滚动更新时 不同版本间的数据质量分析
30 | 背景: A1表 A2表 表结构一致,内容数据有区别,例如A1包含1月的销售数据 A2包含1-2月销售数据。
31 | 诉求: 由于A1 A2表都是经过ETL过程产生的数据表,需要检查确认A2表中1月的数据是否存在较大程度的偏离,以及SKU变化情况(新增,删除,变更,一致)需要生成A1A2所有列加差异状态列拼接的结果大宽表。
32 |
33 | 注意前提:业务主键所标识的数据不能重复
34 | 实现方案:
35 |
36 | A:
37 | 1. 依据业务主键做两个表之间的集合差运算先找出 新增和删除
38 | 1. 选择A1表作为驱动表, 分批找出 not in 新增和删除的主键, 即变更或一致的主键数据, 依据A1表数据拎出A2表数据,Java应用层计算得到差异细节,写入到结果表
39 |
40 | B:
41 | 1. `A1 LEFT JOIN A2` 一步得到结果大宽表, 强依赖底层数据引擎的大宽表JOIN能力,像CK就不适合。
42 | 1. 扫描结果大宽表,应用层计算差异,更新到差异状态列
43 |
--------------------------------------------------------------------------------
/BigData/DataSecurity.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DataSecurity
3 | date: 2024-01-24 18:24:52
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [数据安全](#数据安全)
12 | - 1.1. [数据溯源](#数据溯源)
13 |
14 | 💠 2024-01-24 18:24:52
15 | ****************************************
16 | # 数据安全
17 |
18 | ## 数据溯源
19 | > 云服务商
20 | https://www.alibabacloud.com/help/zh/dataworks/user-guide/trace-leak-sources
21 | https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1022.html
22 |
23 |
24 | > 政府招标
25 | https://topics.gmw.cn/2023-02/02/content_36340223.htm
26 |
27 |
28 |
29 | https://www.esensoft.com/industry-news/dx-5149.html
30 |
31 | https://www.h3c.com/cn/pub/2023_Event/Training/WebHelp_H3C_LZPT/help/datasecurity/watermarkextraction.html
32 | https://www.secrss.com/articles/29189
33 |
34 | > 商业化公司
35 | https://www.ankki.com/productServer/93
36 |
37 |
38 | > 数据水印
39 |
40 | 文件水印:[朝鲜“红星”操作系统解析,给插入电脑的U盘内文件打水印](https://www.thepaper.cn/newsDetail_forward_1414238)`在文件上加上24位的机器识别码,理论上可以通过查看这部分的二进制数据倒推出打开过文件的操作系统链路`
41 |
--------------------------------------------------------------------------------
/BigData/Readme.md:
--------------------------------------------------------------------------------
1 | # 数据科学和大数据
2 | - [Jetbrains: data tools](https://www.jetbrains.com/data-tools/)
3 | - [datalore](https://www.jetbrains.com/datalore/) `数据,代码,BI报表 工作流整合工具`
4 |
5 |
6 | - [zeppelin](https://zeppelin.apache.org/)
7 | - [jupyter](https://jupyter.org/)
8 |
9 | [数据集成](/BigData/DataIntegration.md)
10 | [数据分析](/BigData/DataAnalysis.md)
11 | [数据质量](/BigData/DataQuality.md)
12 | [数据协作](/BigData/DataOrchestration.md)
13 | [数据安全](/BigData/DataSecurity.md)
14 |
15 | # Guide
16 | > [Mrkuhuo/data-warehouse-learning: 【2024最新版】 大数据 数据分析 电商系统 实时数仓 离线数仓 数据湖 建设方案及实战代码](https://github.com/Mrkuhuo/data-warehouse-learning)
17 |
18 | # Tips
19 | > [如何做好长尾关键词SEO优化 - 广告流程自动化](https://geek.digiasset.org/pages/affiliate/long-tail-keywords-in-article/)
20 |
--------------------------------------------------------------------------------
/BigData/img/datax-main-process.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/BigData/img/datax-main-process.webp
--------------------------------------------------------------------------------
/Database/Memcached.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Memcache
3 | date: 2019-05-13 11:15:40
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Memcache](#memcache)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # Memcached
15 | > [memcached.org](https://memcached.org/) | [Github](https://github.com/memcached/memcached)
16 |
--------------------------------------------------------------------------------
/Database/MongoDB.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MangoDB
3 | date: 2018-12-16 17:26:05
4 | tags:
5 | - MongoDB
6 | - 基础
7 | categories:
8 | - 数据库
9 | ---
10 |
11 | 💠
12 |
13 | - 1. [MongoDB](#mongodb)
14 | - 1.1. [安装](#安装)
15 | - 1.1.1. [服务端](#服务端)
16 | - 1.1.2. [客户端](#客户端)
17 | - 1.2. [使用](#使用)
18 |
19 | 💠 2024-11-20 19:35:19
20 | ****************************************
21 | # MongoDB
22 | > 非关系型和关系型混合文档型数据库
23 |
24 | > [双刃剑MongoDB的学习和避坑](https://segmentfault.com/a/1190000013589617)
25 |
26 | > [release-notes](https://docs.mongodb.com/manual/release-notes/)
27 |
28 | > [参考: 数据存储设计](http://source.wiredtiger.com/10.0.0/tune_page_size_and_comp.html)`Mongo同样使用B+Tree`
29 |
30 | ## 安装
31 | ### 服务端
32 | 1. [Docker 安装](https://hub.docker.com/_/mongo/)
33 |
34 | ### 客户端
35 | > [参考: 最佳的MongoDB客户端管理工具](https://blog.csdn.net/chszs/article/details/51348248)
36 |
37 | 1. MongoDB自带的Shell
38 | 1. [Robo 3T](https://robomongo.org/)
39 |
40 | ## 使用
41 | > [Mongodb 课程](https://github.com/tapdata/geektime-mongodb-course)
42 |
--------------------------------------------------------------------------------
/Database/MongoDBAdvance.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MongoDBAdvance
3 | date: 2025-01-07 09:56:23
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [MongoDB](#mongodb)
12 | - 1.1. [Storage](#storage)
13 |
14 | 💠 2025-01-07 09:56:23
15 | ****************************************
16 | # MongoDB
17 |
18 | ## Storage
19 | > [Official Doc](https://docs.mongodb.com/manual/storage/)
20 |
21 | - [WiredTiger data engine](http://source.wiredtiger.com)
22 |
23 |
--------------------------------------------------------------------------------
/Database/OLAP/Doris.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Doris
3 | date: 2024-10-21 15:37:41
4 | tags:
5 | - Clickhouse
6 | - OLAP
7 | categories:
8 | - 数据库
9 | ---
10 |
11 |
12 | 💠
13 |
14 | - 1. [Doris](#doris)
15 |
16 | 💠 2024-10-21 15:37:41
17 | ****************************************
18 | # Doris
19 | > [Apache Doris](https://doris.apache.org/zh-CN/docs/dev/gettingStarted/what-is-new/)
20 |
21 | > [存算一体 VS 存算分离 - Apache Doris](https://doris.apache.org/zh-CN/docs/dev/compute-storage-decoupled/overview/)
22 |
23 |
--------------------------------------------------------------------------------
/Database/OLAP/Readme.md:
--------------------------------------------------------------------------------
1 |
2 | [Clickhouse](/Database/OLAP/Clickhouse.md)
3 | Doris
4 | Starrocks
5 | Greenplum
6 |
7 | > [awesome-olap](https://github.com/samber/awesome-olap)
8 |
--------------------------------------------------------------------------------
/Database/OLAP/img/001-dis-send-query.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Database/OLAP/img/001-dis-send-query.webp
--------------------------------------------------------------------------------
/Database/OLAP/img/002-dis-merge-result.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Database/OLAP/img/002-dis-merge-result.webp
--------------------------------------------------------------------------------
/Database/Oracle.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Oracle
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - Oracle
6 | categories:
7 | - 数据库
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Oracle](#oracle)
13 | 1. [安装](#安装)
14 | 1. [Linux](#linux)
15 | 1. [Docker安装](#docker安装)
16 | 1. [Windows](#windows)
17 | 1. [使用](#使用)
18 |
19 | **目录 end**|_2020-04-27 23:42_|
20 | ****************************************
21 | # Oracle
22 | > 强大的数据库, 稍微理解一下他的设计都觉得精妙
23 |
24 | ## 安装
25 | ### Linux
26 |
27 | #### Docker安装
28 | > [Docker: Oracle](/Linux/Container/DockerSoft.md#安装oracle)
29 |
30 | ### Windows
31 |
32 | ## 使用
33 |
34 |
--------------------------------------------------------------------------------
/Database/Readme.md:
--------------------------------------------------------------------------------
1 | # 数据库
2 | > [Readme](/Database/DataBase.md)
3 |
4 | # TODO
5 | Greenplumn
6 | StarRocks
7 | Doris
8 |
9 |
10 | ## 自然语言转SQL
11 | > [vanna](https://github.com/vanna-ai/vanna)
12 | > [supersonic](https://github.com/tencentmusic/supersonic)
13 |
--------------------------------------------------------------------------------
/Database/SQL.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SQL基础
3 | date: 2018-12-16 17:29:28
4 | tags:
5 | - SQL
6 | categories:
7 | - 数据库
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [SQL](#sql)
13 | - 1.1. [条件语句](#条件语句)
14 | - 1.2. [聚合函数](#聚合函数)
15 | - 1.3. [分析函数](#分析函数)
16 | - 1.3.1. [窗口函数](#窗口函数)
17 | - 2. [安全](#安全)
18 | - 3. [Tips](#tips)
19 |
20 | 💠 2024-09-20 11:10:09
21 | ****************************************
22 | # SQL
23 | > [Wiki: SQL](https://en.wikipedia.org/wiki/SQL)
24 |
25 | > [database language SQL](https://archive.org/details/federalinformati127nati/page/n8/mode/1up)
26 |
27 | - SQL语言共分为四大类:
28 | - 数据查询语言DQL: SELECT
29 | - 数据操纵语言DML: UPDATE、INSERT、DELETE
30 | - 数据定义语言DDL: CREATE、ALTER、DROP
31 | - 数据控制语言DCL: GRANT,DENY,REVOKE
32 |
33 | > [sqlglot](https://github.com/tobymao/sqlglot) `Python SQL Parser and Transpiler `
34 |
35 | ## 条件语句
36 | `case when then else end `
37 | ```sql
38 | update table_test set mark =
39 | case
40 | when id = 2 then '2'
41 | when id = 5 then '5'
42 | else ''
43 | end
44 | where id in (2,5);
45 | ```
46 |
47 | ## 聚合函数
48 |
49 |
50 |
51 | ## 分析函数
52 |
53 | ### 窗口函数
54 | 统计不止发生一次,而是发生多次。统计不止发生在记录集形成后,而是发生在记录集形成的过程中
55 |
56 | > [窗口函数](https://blog.csdn.net/huozhicheng/article/details/5843782/)
57 |
58 | ************************
59 |
60 | # 安全
61 | > [SQL Injection Payload List](https://github.com/payloadbox/sql-injection-payload-list)
62 |
63 | ************************
64 |
65 | # Tips
66 | > [soar](https://github.com/XiaoMi/soar)`SQL Optimizer And Rewriter `
--------------------------------------------------------------------------------
/Database/SQLServer.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SQLServer
3 | date: 2018-12-16 17:29:45
4 | tags:
5 | - SQLServer
6 | categories:
7 | - 数据库
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [SQLServer](#sqlserver)
13 | 1. [安装配置](#安装配置)
14 | 1. [Docker安装2017硬是不成功](#docker安装2017硬是不成功)
15 | 1. [2000版本](#2000版本)
16 |
17 | **目录 end**|_2020-04-27 23:42_|
18 | ****************************************
19 | # SQLServer
20 |
21 | ## 安装配置
22 | ### Docker安装2017硬是不成功
23 | - [dockerhub网址](https://hub.docker.com/r/exoplatform/sqlserver/)
24 |
25 | ```sh
26 | docker run -d -e SA_PASSWORD= -e SQLSERVER_DATABASE= -e SQLSERVER_USER= -e
27 | SQLSERVER_PASSWORD= -p :1433 exoplatform/sqlserver:ctp2-1-1
28 |
29 | docker run -d -e SA_PASSWORD=ad -e SQLSERVER_DATABASE=mythos -e SQLSERVER_USER=myth -e SQLSERVER_PASSWORD=jiushi -p 1433:1433 mssql
30 |
31 |
32 | docker run --name mssql -e ACCEPT_EULA=Y -e SA_PASSWORD=docker888 -e SQLSERVER_USER=myth -e SQLSERVER_PASSWORD=jiushi -p 1433:1433 -d microsoft/mssql-server-linux:latest
33 |
34 | docker run -e 'SA_PASSWORD=docker888' -p 1433:1433 -it --rm microsoft/mssql-server-linux:latest /opt/mssql/bin/sqlservr --accept-eula
35 |
36 |
37 | # 查看控制台输出
38 | docker run --name mssql -e ACCEPT_EULA=Y -e SA_PASSWORD=docker888 -e SQLSERVER_USER=myth -e SQLSERVER_PASSWORD=jiushi -p 1433:1433 -it microsoft/mssql-server-linux:2017-GA
39 |
40 |
41 | docker run -d -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=ad' -e 'SQLSERVER_PASSWORD=jiushi' -p 1433:1433 microsoft/mssql-server-linux:2017-GA
42 |
43 | ```
44 | #### 2000版本
45 | - [docker别人做的镜像](https://hub.docker.com/r/rsmoorthy/mssql/)
46 |
--------------------------------------------------------------------------------
/Distributed/CloudNative.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: CloudNative
3 | date: 2019-06-04 19:44:41
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [云原生](#云原生)
11 |
12 | 💠 2024-09-05 11:52:54
13 | ****************************************
14 | # 云原生
15 | > [Pivotal对云原声的定义](https://pivotal.io/cn/cloud-native)
16 |
17 | > [faas](https://github.com/openfaas/faas)
18 |
--------------------------------------------------------------------------------
/Distributed/ConfigCenter/Apollo.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Apollo
3 | date: 2018-12-16 17:30:10
4 | tags:
5 | - 中间件
6 | categories:
7 | - 分布式
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Apollo](#apollo)
13 |
14 | 💠 2024-10-02 22:33:00
15 | ****************************************
16 | # Apollo
17 | > [Github:Apollo](https://github.com/ctripcorp/apollo)
18 |
19 | [assembly实现 ./xx.jar 直接执行](https://github.com/ctripcorp/apollo/blob/master/apollo-adminservice/pom.xml)
20 |
21 |
22 |
--------------------------------------------------------------------------------
/Distributed/ConfigCenter/Nacos.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Nacos
3 | date: 2024-01-11 23:00:53
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Nacos](#nacos)
11 | - 1.1. [Design](#design)
12 | - 2. [Tips](#tips)
13 |
14 | 💠 2025-05-06 11:19:53
15 | ****************************************
16 | # Nacos
17 | > [Nacos](https://nacos.io/en-us/)
18 |
19 | ## Design
20 |
21 | > 配置加载
22 |
23 | spring.cloud.config.override-none 默认false 设置true后,会优先使用本地配置(本地环境变量,本地properties文件等)覆盖远程配置(此配置需要配置在远程Nacos上)
24 | - org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration#insertPropertySources 处理逻辑
25 |
26 | org.springframework.util.PropertyPlaceholderHelper#parseStringValue
27 | org.springframework.core.env.PropertySourcesPropertyResolver#logKeyFound 按顺序从 source 列表加载到第一个配置值就return
28 | - logging.level.org.springframework.core.env=DEBUG 开启日志查看加载情况
29 |
30 |
31 | # Tips
32 | > 集群模式出现节点数据不一致的情况
33 | - 检查日志看是否网络中断或超时导致
34 | - 重启集群
35 |
36 | > Nacos 客户端 SocketTimeOut 异常
37 | - 检查网络问题
38 | - 检查应用端GC问题
39 |
--------------------------------------------------------------------------------
/Distributed/ConfigCenter/Readme.md:
--------------------------------------------------------------------------------
1 | # 配置中心
2 | Apollo
3 | disconf
4 | Spring Cloud Config
5 |
6 | > [开源配置中心对比矩阵](https://github.com/ctripcorp/apollo/files/983064/default.pdf)
7 |
--------------------------------------------------------------------------------
/Distributed/HA/Readme.md:
--------------------------------------------------------------------------------
1 | 高可用
2 |
3 | 限流
4 | 熔断
5 | 降级
6 | 请求合并
7 | 自动扩缩容
8 |
9 | Hystrix `Resilience4j` 限流 熔断 降级
10 | Sentinel
11 |
12 |
--------------------------------------------------------------------------------
/Distributed/MQ/MQ.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 消息队列
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - MQ
6 | categories:
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [MQ](#mq)
12 | - 1.1. [为何需要使用](#为何需要使用)
13 | - 1.2. [风险分析](#风险分析)
14 | - 1.3. [JMS](#jms)
15 | - 2. [MQ中间件](#mq中间件)
16 | - 2.1. [RocketMQ](#rocketmq)
17 | - 2.2. [ActiveMQ](#activemq)
18 | - 2.3. [Kafka](#kafka)
19 | - 2.4. [RabbitMQ](#rabbitmq)
20 | - 2.5. [Pulsar](#pulsar)
21 | - 2.6. [nsq](#nsq)
22 |
23 | 💠 2024-09-28 11:21:46
24 | ****************************************
25 | # MQ
26 |
27 | > [参考: MQ消息中间件](https://blog.csdn.net/qq_29676623/article/details/85108070)
28 |
29 | ## 为何需要使用
30 | 解耦、异步、削峰
31 |
32 | ## 风险分析
33 | - 引入新系统, 增加了故障的风险
34 |
35 | ## JMS
36 | > Java Message Service 规范而已,和JDBC一样, 具体实现由厂商来实现
37 |
38 | [码农翻身:Java帝国之JMS的诞生](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513515&idx=1&sn=380bb1cb56d4151fd3acc5aa86f1da9a&chksm=80d67a68b7a1f37e3d98fe4495eab4db097eedd695c99fbd8704cc0464595842c4da598b99e3&scene=21#wechat_redirect)
39 |
40 | ************************
41 |
42 | # MQ中间件
43 | > [Kafka vs. Pulsar vs. RabbitMQ](https://www.confluent.io/kafka-vs-pulsar/)
44 |
45 | ## RocketMQ
46 | > [有关demo](https://github.com/lirenzuo/rocketmq-rocketmq-all-4.1.0-incubating)
47 |
48 | 4.3 开始支持[事务消息](https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/)
49 | - [RocketMQ是如何实现事务消息的](https://github.com/Cicizz/binary/blob/master/RocketMQ/RocketMQ%E4%BA%8B%E5%8A%A1%E6%B6%88%E6%81%AF/RocketMQ%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E4%BA%8B%E5%8A%A1%E6%B6%88%E6%81%AF%E7%9A%84.md)
50 |
51 | ## ActiveMQ
52 | > [Official Site](http://activemq.apache.org/)
53 |
54 | ## Kafka
55 | [Kafka](./Kafka.md)
56 | [Redpanda](https://github.com/redpanda-data/redpanda)
57 |
58 | ## RabbitMQ
59 | 采用 Erlang 开发
60 |
61 | > [参考: 我为什么要选择RabbitMQ ](https://www.sojson.com/blog/48.html)
62 |
63 | ## Pulsar
64 |
65 | ## nsq
66 |
--------------------------------------------------------------------------------
/Distributed/MQ/MQTheory.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MQ理论基础
3 | date: 2022-08-03 10:03:18
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [MQ理论](#mq理论)
11 | 1. [问题和方案](#问题和方案)
12 | 1. [消息丢失](#消息丢失)
13 | 1. [生产端](#生产端)
14 | 1. [MQ自身](#mq自身)
15 | 1. [消费端](#消费端)
16 | 1. [消息重复](#消息重复)
17 | 1. [消费顺序](#消费顺序)
18 |
19 | **目录 end**|_2022-08-03 10:03_|
20 | ****************************************
21 | # MQ设计理论
22 |
23 | # 问题和方案
24 | ## 消息丢失
25 | ### 生产端
26 | 原因:异步发送 mq在生产端的client和MQ通信出现故障, 或者 上线时生产端未执行完就被重启了
27 |
28 | 发送消息的ack机制,规避掉MQ中的异步发送机制,生产端发送消息时,同步等待MQ确认收到消息后才返回
29 |
30 | ### MQ自身
31 |
32 | ### 消费端
33 |
34 | 原因: 自动确认消息机制,消费到消息就通知MQ消费完成,实际上消费者可能消费到消息正准备处理业务,节点突然down了。
35 | 调整为消息消费完成才提交确认。消息的消费实现幂等利于重试
36 |
37 | ## 消息重复
38 | 原因: MQ未收到消费端的消费确认消息,消费端宕机等
39 |
40 | 消费端实现幂等。
41 | - 构造业务id利用持久层(Redis MySQL等)来判断是否重复
42 |
43 | ## 消费顺序
44 | 扩展高可用性和顺序消费是一个取舍的问题
45 |
46 | 每个MQ的特性会不一样,实现思路大体相似,让MQ的消息控制于一个物理队列或者逻辑队列中,并将消费端限制为一个。
47 | 消费端改为多个就需要应用层自身实现消息的消费是并行,但是提交是有序的。
48 |
49 | ## 消息积压
50 | 原因:生产端TPS异常升高、消费端TPS下降或故障
51 |
52 |
53 |
--------------------------------------------------------------------------------
/Distributed/README.md:
--------------------------------------------------------------------------------
1 | # 分布式
2 | > [系统设计入门](https://github.com/donnemartin/system-design-primer)
3 | > [分布式系统核心技术](https://yeasy.gitbook.io/blockchain_guide/04_distributed_system)
4 | > [分布式系统 - 知识体系详解](https://pdai.tech/md/arch/arch-z-overview.html)
5 | > [分布式系统学习资料汇总 - Golang编程语言知识介绍](http://shanks.link/blog/2024/01/24/%e5%88%86%e5%b8%83%e5%bc%8f%e7%b3%bb%e7%bb%9f%e5%ad%a6%e4%b9%a0%e8%b5%84%e6%96%99%e6%b1%87%e6%80%bb/)
6 |
7 | 要考虑采用该种方式后带来的技术复杂度的问题, 当前的问题需不需要上升到分布式的体量上
8 |
9 | 书籍
10 | 《构建数据密集型应用》
11 | 《分布式系统》
12 |
13 | ## 共识算法
14 | > [learn_blockchain/consensus.md](https://github.com/chaseSpace/learn_blockchain/blob/main/consensus.md)
15 |
16 | - [ ] CAP Paxos Zab Raft Gossip Billy
17 |
18 | [Paxos](https://en.wikipedia.org/wiki/Paxos_%28computer_science%29)
19 | [Paxos H2O实现](https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/water/Paxos.java)
20 |
21 | ************************
22 |
23 | ### Raft
24 | > [Wikipedia](https://en.wikipedia.org/wiki/Raft_(algorithm)) | [Github Raft](https://raft.github.io/)
25 |
26 | 快速理解:基于状态复制机模式,所有节点从相同的状态开始通过一系列log达到一致的状态,例如Redis的RDS一样将数据变化日志化
27 | 通过其中的选举算法实现集群里始终只有一个leader多follower的状态
28 | 客户端发起的所有修改动作都会交由leader完成并复制给其他节点(当集群内N/2+1的节点确认复制成功后给客户端响应操作成功),如果请求到了follwer节点也会转发给leader节点处理
29 |
30 | - 解决的问题: 实现分布式系统的数据一致性和高可用。例如 Etcd、Consul、Zookeeper 组件中用到
31 |
32 |
33 | [Raft 实战系列,日志复制是什么?怎么实现?日志不一致怎么办?](https://blog.51cto.com/u_15009384/2568224)
34 |
35 | https://zhuanlan.zhihu.com/p/28560167
36 | https://www.cnblogs.com/mindwind/p/5231986.html
37 | [Raft](https://zhuanlan.zhihu.com/p/32052223)
38 |
39 |
40 | [动态变更节点](https://segmentfault.com/a/1190000022796386)
41 |
42 | ### CAP定理
43 | CAP: Consistency Availability Partition tolerance
44 |
45 | > [码农翻身:张大胖和CAP定理](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513560&idx=1&sn=ba861726537c57bd34253cbce010b5f)
46 |
47 | https://github.com/aliyun/alibabacloud-microservice-demo.git
48 |
49 | ### BASE
50 |
--------------------------------------------------------------------------------
/Distributed/RPC.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 远程调用
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - RPC
6 | categories:
7 | - 分布式
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [RPC](#rpc)
13 | - 1.1. [架构设计](#架构设计)
14 | - 1.2. [HTTP](#http)
15 | - 1.3. [RPC vs MQ](#rpc-vs-mq)
16 | - 2. [实践](#实践)
17 |
18 | 💠 2024-09-20 17:30:23
19 | ****************************************
20 | # RPC
21 | > Remote Procedure Calls
22 |
23 | - 进程间通信(IPC)是在多任务操作系统或联网的计算机之间运行的程序和进程所用的通信技术。分为两种
24 | - 本地过程调用LPC,用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。
25 | - 远程过程调用RPC,类似于LPC,只是调用方和被调用方中间隔了网络这一层
26 |
27 | - 通常使用 IDL(Interface Definition) 建立接口定义, 达成约束, 一般指一种开发方式和规范, 具体的实现可以多样
28 |
29 | > [Github rpc-framework ](https://github.com/topics/rpc-framework?l=java)`常用为Dubbo,SpringCloud,gRPC`
30 |
31 | > [motan](https://github.com/weibocom/motan)`微博Java`
32 |
33 | gRPC 和 Thrift 虽然支持跨语言的 RPC 调用,但是它们只提供了最基本的 RPC 框架功能,缺乏一系列配套的服务化组件和服务治理功能的支撑。Dubbo 和 SpringCloud就有完善的服务治理(注册中心、熔断、限流、监控、分布式追踪等)。
34 |
35 | ## 架构设计
36 | > [如何手撸一个较为完整的RPC框架 ](https://juejin.cn/post/6992867064952127524)
37 |
38 | RPC 框架一般有这些组件:服务治理(注册发现)、负载均衡、容错、序列化/反序列化、编解码、网络传输、线程池、动态代理等,当然有的RPC框架还会有连接池、日志、安全等。
39 |
40 | > [序列化](/Skills/Serialization/Serialization.md)
41 |
42 | ## HTTP
43 | 可以将常见的http的web请求,看作是前端调用服务端的方,服务端之间自然也是可以用HTTP实现RPC
44 |
45 | 针对RPC优化:长连接,HTTP2二进制协议
46 |
47 | ## RPC vs MQ
48 |
49 | ************************
50 |
51 | # 实践
52 |
53 | > [参考: 良好的RPC接口设计,需要注意这些方面](https://www.jianshu.com/p/dca5b00e72e4)
--------------------------------------------------------------------------------
/Distributed/ServiceDiscovery/Readme.md:
--------------------------------------------------------------------------------
1 | # 服务发现
2 | Zookeeper
3 | Nacos
4 | Eureka
5 |
6 | > [参考: ZooKeeper、Eureka对比](https://www.cnblogs.com/jieqing/p/8394001.html)
7 | > [Consul vs. Zookeeper vs. Eureka ](https://stackshare.io/stackups/consul-vs-eureka-vs-zookeeper)
8 |
9 |
--------------------------------------------------------------------------------
/Distributed/Transaction/Readme.md:
--------------------------------------------------------------------------------
1 | # 分布式事务
2 | > [凤凰架构: 分布式事务](https://icyfenix.cn/architect-perspective/general-architecture/transaction/distributed.html)
3 |
4 | TODO 实现方式 场景
5 |
6 | Seata
7 | LCN做分布式事务
8 | 柔性事务
9 |
10 | 在业务、范式、性能、维护发生冲突时,各自如何解决,其中有很多折中的思想
11 |
12 | > [Seata AT 模式](https://seata.apache.org/zh-cn/docs/dev/mode/at-mode)
13 | > [DTM](https://dtm.pub/guide/start.html)
14 |
15 | > 2PC
16 | CanCommit、DoCommit
17 |
18 | 单个协调者,多个参与者
19 | 过程:
20 | 1. 所有参与者开始上报可处理
21 | 1. 所有参与者确认能处理后,协调者通知参与者本地提交
22 |
23 | 规则:
24 |
25 | 1. 协调者单点故障
26 | 1. 出现参与者响应为不能处理或者事务提交失败,协调者通知所有参与者回滚
27 |
28 | 问题:
29 | 1. 性能问题。参与者越多,事务越复杂,提交过程就越耗时,对数据库性能影响大
30 | 1. 协调者单点问题。
31 | 1. 数据不一致。 第二阶段协调者通知参与者时,消息或调用丢失
32 |
33 | > 3PC
34 |
35 | CanCommit、PreCommit、DoCommit
36 |
37 | 三阶段提交又称3PC,其在两阶段提交的基础上增加了CanCommit阶段,并引入了超时机制。一旦事务参与者迟迟没有收到协调者的Commit请求,就会自动进行本地commit
38 |
39 | > TCC
40 |
41 | try confirm commit
42 |
43 | 补偿式事务 针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)
44 | - Try阶段:主要是对业务系统做检测及资源预留。
45 | - Confirm阶段:确认执行业务操作。
46 | - Cancel阶段:取消执行业务操作。
47 |
48 |
49 | TCC事务的处理流程与2PC两阶段提交类似,不过2PC通常都是在跨库的DB层面,而TCC本质上就是一个应用层面的2PC,需要通过业务逻辑来实现。
50 | 这种分布式事务的实现方式的优势在于,可以让应用自己定义数据库操作的粒度,使得降低锁冲突、提高吞吐量成为可能。
51 |
52 | 而不足之处则在于对应用的侵入性非常强,业务逻辑的每个分支都需要实现try、confirm、cancel三个操作。
53 | 此外,其实现难度也比较大,需要按照网络状态、系统故障等不同的失败原因实现不同的回滚策略。为了满足一致性的要求,confirm和cancel接口还必须实现幂等。
54 |
--------------------------------------------------------------------------------
/DotNet/Readme.md:
--------------------------------------------------------------------------------
1 | # .NET
2 |
3 | - [linux install script](https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual#scripted-install)
4 |
5 | > first start
6 | 1. install dotnet `./dotnet-install.sh --version latest`
7 | 1. ./dotnet-install.sh --channel 6.0
8 | 1. [install avaloniaui](https://docs.avaloniaui.net/docs/next/get-started/install)
9 | 1. dotnet new install Avalonia.Templates
10 | 1. dotnet new avalonia.app -o GetStartedApp
11 | 1. dotnet run
12 |
--------------------------------------------------------------------------------
/FrontEnd/Frame/README.md:
--------------------------------------------------------------------------------
1 | # 前端框架和组件库
2 |
3 | ## 组件库
4 | ### Bootstrap
5 | > [中文网](http://www.bootcss.com/)
6 |
7 | ### Materializecss
8 | > [中文网](http://www.materializecss.cn/about.html)
--------------------------------------------------------------------------------
/FrontEnd/Frame/Vue.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Vue
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - Vue
6 | categories:
7 | - 前端框架
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Vue](#vue)
13 | 1. [构建前后端分离的应用](#构建前后端分离的应用)
14 |
15 | **目录 end**|_2020-06-24 02:06_|
16 | ****************************************
17 | # Vue
18 | > [vue.js guide](https://cn.vuejs.org/v2/guide/) | [iview](https://www.iviewui.com/)
19 |
20 | [手摸手,带你用vue撸后台 系列一(基础篇)](https://segmentfault.com/a/1190000009275424)
21 |
22 |
23 | ### 构建前后端分离的应用
24 | [springboot+gradle+vue+webpack 组合使用](https://segmentfault.com/a/1190000007021883)
25 | [使用Gradle整合SpringBoot+Vue.js-开发调试与打包](https://segmentfault.com/a/1190000008968295)
26 |
--------------------------------------------------------------------------------
/FrontEnd/HTML5.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: HTML5
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | - 前端
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [HTML5](#html5)
12 | 1. [参考资料](#参考资料)
13 | 1. [特殊字符](#特殊字符)
14 | 1. [数据存储](#数据存储)
15 | 1. [Cookie](#cookie)
16 | 1. [LocalStorage和SessionStorage](#localstorage和sessionstorage)
17 | 1. [清除](#清除)
18 | 1. [IndexDB](#indexdb)
19 | 1. [Notification](#notification)
20 |
21 | **目录 end**|_2020-11-09 22:52_|
22 | ****************************************
23 | # HTML5
24 | ## 参考资料
25 | > [HTML5 教程 | 菜鸟教程](http://www.runoob.com/html/html5-intro.html)
26 | > [HTML5 教程 | W3School](http://www.w3school.com.cn/html5/)
27 |
28 | ## 特殊字符
29 |
30 | ```html
31 | 空格: 代表一个半角空格
32 | < :<
33 | > :>
34 | & :&
35 | ¥ :¥
36 | × :×
37 | ÷ :÷
38 | ```
39 |
40 | ## 数据存储
41 |
42 | ### Cookie
43 |
44 | ### LocalStorage和SessionStorage
45 | > [基础详细的一篇博客](http://www.cnblogs.com/st-leslie/p/5617130.html)
46 |
47 | #### 清除
48 | > [HTML5中的localStorage什么时候会被清空?](https://segmentfault.com/q/1010000000123500)
49 | > [翻译:清除各个浏览器中的数据研究](http://www.zhangxinxu.com/wordpress/2012/09/%E7%BF%BB%E8%AF%91%EF%BC%9A%E6%B8%85%E9%99%A4%E5%90%84%E4%B8%AA%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E7%A0%94%E7%A9%B6/)
50 |
51 | - 在火狐中 清除 网络内容缓存 对localStorage没有影响
52 |
53 | ### IndexDB
54 |
55 | ************************
56 |
57 | # Notification
58 | > [MDN](https://developer.mozilla.org/en-US/docs/Web/API/notification)
59 |
--------------------------------------------------------------------------------
/FrontEnd/LearnPS.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: PS学习
3 | date: 2018-12-14 09:22:56
4 | tags:
5 | - PS
6 | categories:
7 | - 工具
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [PS](#ps)
13 | 1. [在线工具](#在线工具)
14 | 1. [快捷键](#快捷键)
15 | 1. [钢笔抠图技巧](#钢笔抠图技巧)
16 | 1. [Banner案例](#banner案例)
17 | 1. [形状和路径](#形状和路径)
18 | 1. [形状层编辑:](#形状层编辑)
19 |
20 | **目录 end**|_2020-06-24 02:06_|
21 | ****************************************
22 | # PS
23 | ## 在线工具
24 | - [www.uupoop.com](https://www.uupoop.com/)`在线PS`
25 | - [PS在线工具](https://www.photoshop.com/tools?wf=editor)`官方在线版`
26 |
27 | ## 快捷键
28 |
29 | | Ctrl | Shift | Alt | Key | Action |
30 | |:----: |:----:|:----:|:----:|:----|
31 | |C| | | `H` | 隐藏辅助线 视图菜单栏有清除所有辅助线 |
32 | |C| | | `D` | 取消选框
33 | |C| |A| `Z` | 一直撤销
34 | |C| | | `Z` | 只撤销上一步
35 | |C| | | `T` | 拖放选框大小,若锁定当前比例 加上shift
36 | |C| | | `R` | 标尺
37 | |C| | | `J` | 通过拷贝的图层
38 | |C| | | `X` | 剪切当前选择框
39 | |C|S| | `N` | 新建图层
40 | |C| | | `Del` | 填充背景
41 | |C| | | `Enter` | 路径变选框
42 | | | |A| | 移动当前选择框
43 | | | |A| `Del` | 填充前景
44 | | | |A| `鼠标左键` | 去掉钢笔的手柄
45 |
46 | * 使用时间轴可以制作gif动图
47 | * 先羽化再抠图或者填充
48 | * 渐变工具的使用
49 |
50 | ## 钢笔抠图技巧
51 | ***一定要选择路径状态***
52 | 1. 钢笔定点要向对象轮廓内定1-2像素;
53 | 2. 钢笔拖动方向,沿着弧度方向相切;
54 | 3. 抠图出现错误时按撤销键 不能按Delete键,会删除锚点断开路径;
55 | 4. 抠图要放大图像;
56 | 5. 路径变选框 Ctrl+Delete;
57 | 6. 钢笔的手柄不能太长,图片会乱窜;
58 |
59 | ## Banner案例
60 | * 标尺
61 | * 扩展画布 Ctrl+Alt+C
62 | * 存储路径: 扣好图像后,双击工作路径 就会保存路径了
63 | * 使用文案 :
64 | - 复制粘贴过来 再提交就行了
65 | - 修改文字(新建图层才能做一些美化操作)
66 |
67 | ## 形状和路径
68 | * 路径: 只是回执一个路径(辅助功能) 需要后期制作(变选框,填充,描边等)
69 | * 形状:会自动建立图层 (形状图层) 填充前景色;(UI构型)
70 |
71 | ## 形状层编辑:
72 | 1. 双击形状图缩略图,快速换色
73 | 2. 属性栏 ,填色属性,描边属性,可以修改尺寸
74 |
--------------------------------------------------------------------------------
/FrontEnd/Node/NodeJS.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: NodeJS
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - NodeJS
6 | categories:
7 | - JavaScript
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [NodeJs](#nodejs)
13 | 1. [安装](#安装)
14 | 1. [配置](#配置)
15 | 1. [镜像](#镜像)
16 |
17 | **目录 end**|_2020-12-18 15:50_|
18 | ****************************************
19 | # NodeJs
20 |
21 | ## 安装
22 | 1. [官网下载](https://nodejs.org/en/)
23 | 2. 进入解压的 `bin/node 和 npm ` 建立软链接到 `/usr/local/bin/` 目录下
24 | 3. 执行 node --version 和 npm -v 查看是否配置成功
25 | 4. 添加node的真正解压目录到环境变量中, 之后安装的模块才能被找到
26 | ```sh
27 | NODE_HOME=/home/kcp/Application/sdk/node-v8.11.1-linux-x64
28 | export PATH=$PATH:$NODE_HOME/bin
29 | ```
30 |
31 | ## 配置
32 | ### 镜像
33 | > [镜像地址](http://npm.taobao.org/) `还包括各种常用软件`
34 |
35 | 可使用 nrm 管理 `npm instal -g nrm`
36 |
--------------------------------------------------------------------------------
/FrontEnd/SVG.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SVG
3 | date: 2018-12-14 09:24:04
4 | tags:
5 | - 基础
6 | categories:
7 | - Web
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [SVG](#svg)
13 |
14 | 💠 2024-01-10 17:28:37
15 | ****************************************
16 | # SVG
17 | > [MDN:SVG ](https://developer.mozilla.org/zh-CN/docs/Web/SVG)
18 |
19 | > 可缩放矢量图形(Scalable Vector Graphics,SVG),是一种用来描述二维矢量图形的 XML 标记语言。 简单地说,SVG 面向图形,HTML 面向文本。
20 |
--------------------------------------------------------------------------------
/FrontEnd/ViewSolution.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ViewSolution
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | - WIKI
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [与前端有关的问题](#与前端有关的问题)
12 | - 1.1. [资源文件](#资源文件)
13 | - 1.1.1. [图片](#图片)
14 | - 1.1.1.1. [使用图片还是BASE64](#使用图片还是base64)
15 | - 1.2. [HTML调用exe程序](#html调用exe程序)
16 |
17 | 💠 2024-11-18 14:23:50
18 | ****************************************
19 | # 与前端有关的问题
20 |
21 | ## 资源文件
22 | > [普通人的网页配色方案](https://www.ruanyifeng.com/blog/2019/03/coloring-scheme.html)
23 |
24 |
25 | ### 图片
26 | #### 使用图片还是BASE64
27 | - [知乎提问 前端开发中,使用base64图片的弊端是什么?](https://www.zhihu.com/question/31155574?sort=created)
28 |
29 | ## HTML调用exe程序
30 | > [前端网页如何打开一个PC本地应用](https://juejin.im/post/5dc396bbe51d453809085cb4)
31 | > [URL protocol handlers in basic Ubuntu Desktop](https://askubuntu.com/questions/514125/url-protocol-handlers-in-basic-ubuntu-desktop)
32 |
33 | 1. 注册表写入自定义协议,自定义协议的逻辑
34 | 1. HTML a 标签地址为自定义协议
35 |
36 | 如果是 IE 可以使用 ActiveXObject 方式打开 [How to launch an EXE from Web page (asp.net)](https://stackoverflow.com/questions/916925/how-to-launch-an-exe-from-web-page-asp-net)
37 |
--------------------------------------------------------------------------------
/Functional/Clojure.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Clojure
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - 基础
6 | - 函数式编程
7 | categories:
8 | - Clojure
9 | ---
10 |
11 | **目录 start**
12 |
13 | 1. [Clojure](#clojure)
14 | 1. [安装](#安装)
15 | 1. [基础](#基础)
16 |
17 | **目录 end**|_2020-12-18 15:50_|
18 | ****************************************
19 | # Clojure
20 | > Lisp的方言 [参考博客 Clojure 学习笔记 :0 零基础教程](https://www.jianshu.com/p/32b7ef3659db)
21 |
22 | ## 安装
23 | - [Clojure官网下载地址](https://clojure.org/community/downloads)
24 | - 解压后运行jar包进入REPL `java -cp clojure-1.8.0.jar clojure.main`
25 | - Linux 下推荐 [leiningen](https://leiningen.org/)
26 | - Arch `yay -S leiningen`
27 |
28 | ## 基础
29 |
30 | Clojure的设计原则可以概括成5个词汇:简单、专注、实用、一致和清晰。这不是我概括的,而是《The joy of clojure》概括的。
31 | (1)简单: 鼓励纯函数,极简的语法(少数special form),个人也认为clojure不能算是多范式的语言(有部分OO特性),为了支持多范式引入的复杂度,我们在C++和Scala身上都看到了。
32 | (2)专注:前缀运算符不需要去考虑优先级,也没有什么菱形继承的问题,动态类型系统(有利有弊),REPL提供的探索式编程方法(告别修改/编译/运行的死循环,所见即所得)。
33 | (3)实用:前面提到,构建在JVM之上,跟Java语言的互操作非常容易。直接调用Java方法,不去发明一套新的调用语法,努力规避Java语言中繁琐的地方(doto,箭头宏等等)。
34 | (4)清晰:纯函数(前面提到),immutable var,immutable数据结构,STM避免锁问题。不可变减少了心智的负担,降低了多线程编程的难度,纯函数也更利于测试和调试。
35 | (5)一致:语法的一致性:例如doseq和for宏类似,都支持destructring,支持相同的guard语句(when,while)。数据结构的一致性:sequence抽象之上的各种高阶函数。
36 |
37 | - 命令式语言 Java Groovy Scala都是用一个内存和状态模型,把变量映射到一个内存位置
38 | - Clojure是将值作为重点,Clojure的值一旦创建就不能修改。变量和值建立映射关系,如果再次赋值,不是修改变量,而是映射到新的值上
39 | - (def <名称> <值>)
40 |
41 | ************************
42 |
43 | > Hello World
44 |
45 | `java -cp clojure-1.8.0.jar clojure.main`进入REPL终端
46 | ```clojure
47 | user => (def hello(fn [] "hello"))
48 | user => (hello)
49 | ```
50 |
51 |
--------------------------------------------------------------------------------
/Functional/FPBase.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 函数式编程基础
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - 函数式编程
6 | categories:
7 | - 基础
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [函数式编程思想](#函数式编程思想)
13 | - 1.1. [函数式特性](#函数式特性)
14 | - 1.2. [Lambda表达式](#lambda表达式)
15 |
16 | 💠 2024-02-02 14:22:14
17 | ****************************************
18 | # 函数式编程思想
19 | > [码农翻身:函数式编程圣经](http://mp.weixin.qq.com/s/0gErQ3tjDLZuD1bYOhi0mQ)
20 | > [解道: 面向函数范式编程](https://www.jdon.com/functional.html)
21 |
22 | - 面向对象的主要限制是不能在现有方法上增加额外的逻辑,函数式就能将方法(函数)作为参数传入然后再扩展逻辑
23 | - 和AOP的区别:AOP是重型的基于动态代理类去封装扩展原方法
24 |
25 | _关于递归_
26 | - 非函数式语言中尽量是使用循环而不是递归, 函数式语言就要使用递归而不是循环
27 | - 还有尾递归的概念,尾递归是将当前运行栈覆盖上一个运行栈而不是新增一个,减少栈的占用
28 | - [码农翻身:张大胖学递归](http://mp.weixin.qq.com/s/YpG9TvTCBus2FK6LbArvvw)
29 | - [深入了解尾递归](https://segmentfault.com/a/1190000007641519)
30 | - [面试题关于递归的层层优化](https://zhuanlan.zhihu.com/p/24283256)
31 | - [递归化循环](http://www.cnblogs.com/JeffreyZhao/archive/2009/04/01/tail-recursion-explanation.html)
32 |
33 | ## 函数式特性
34 | - `map 映射`
35 | - `filter 过滤`
36 |
37 | > [函数式编程实现设计模式](https://klose911.github.io/html/fdp/fdp.html)`从某种意义上说,GOF的设计模式是语言表达能力的缺陷`
38 |
39 | ## Lambda表达式
40 | > [Lambda 演算](https://klose911.github.io/html/theory/lambda.html)
41 |
42 | λ 演算 可看做是一个简单的语义清楚的 形式语言 ,用来解释复杂的 程序设计语言 或者 计算模型
43 | λ 演算通常包含两部分
44 | - 语法: 合法表达式 (λ表达式)的形式系统
45 | - 语义: 变换规则 的形式系统
46 |
47 |
--------------------------------------------------------------------------------
/Functional/Kotlin.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Kotlin
3 | date: 2018-12-21 10:56:52
4 | tags:
5 | - 基础
6 | - 函数式编程
7 | categories:
8 | - Kotlin
9 | ---
10 |
11 | 💠
12 |
13 | - 1. [Kotlin](#kotlin)
14 |
15 | 💠 2024-12-25 22:33:48
16 | ****************************************
17 | # Kotlin
18 | > [Kotlin官网](https://kotlinlang.org/)
19 | > 一个能够跨越多个平台和领域的语言
20 |
21 | **实践项目**
22 | > [mirai](https://github.com/mamoe/mirai)`Kotlin写的QQ客户端`
23 | > [square/okhttp](https://github.com/square/okhttp)
24 |
25 | **教程资源**
26 | - [Learn Kotlin by Example](https://play.kotlinlang.org/byExample/overview)
27 | - [Kotlin For Android](https://github.com/wangjiegulu/kotlin-for-android-developers-zh)`中文教程`
28 | - [EasyKotlin组织](https://github.com/EasyKotlin)
29 | - [《Kotlin极简教程》书籍第一章](https://github.com/EasyKotlin/easy_kotlin_chapter_1)
30 |
31 | > [Why Kotlin isn't becoming mainstream on server side ](https://www.reddit.com/r/Kotlin/comments/12o03tu/why_kotlin_isnt_becoming_mainstream_on_server_side/)
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Game/GameEngine.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GameEngine
3 | date: 2024-11-23 16:11:04
4 | tags:
5 | categories:
6 | - Game
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [游戏引擎](#游戏引擎)
12 |
13 | 💠 2024-11-23 17:27:52
14 | ****************************************
15 | # 游戏引擎
16 | > [2024最佳游戏引擎排行 - Incredibuild](https://www.incredibuild.cn/blog/top-gaming-engines-you-should-consider)
17 | > [What is a good engine to make 2D games in? : r/gamedev](https://www.reddit.com/r/gamedev/comments/rrg0z4/what_is_a_good_engine_to_make_2d_games_in/)
18 |
19 | Unity Unreal Godot Cocos2d
20 |
21 | > [hajimehoshi/ebiten: Ebitengine - A dead simple 2D game engine for Go](https://github.com/hajimehoshi/ebiten)
22 | > [sedyh/awesome-ebitengine: A curated list of awesome Ebitengine frameworks, libraries and software](https://github.com/sedyh/awesome-ebitengine)
23 |
--------------------------------------------------------------------------------
/Game/MC.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Minecraft
3 | date: 2020-06-24 16:50:25
4 | tags:
5 | categories:
6 | - Game
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [Minecraft](#minecraft)
12 | 1. [Server](#server)
13 |
14 | **目录 end**|_2020-06-24 16:51_|
15 | ****************************************
16 | # Minecraft
17 | > [HMCL: A Minecraft Launcher](https://github.com/huanghongxun/HMCL)
18 |
19 | ## Server
20 | > [Minecraft Server](https://github.com/itzg/docker-minecraft-server)
21 |
22 | 1. 修改 `/data/server.properties` online-mode=false
23 |
--------------------------------------------------------------------------------
/Go/GoDatabase.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Go操作数据库
3 | date: 2018-12-15 12:14:19
4 | tags:
5 | categories:
6 | - Go
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [Go的数据库操作](#go的数据库操作)
12 | - 1.1. [Redis](#redis)
13 | - 1.2. [MySQL](#mysql)
14 | - 1.2.1. [gorm](#gorm)
15 | - 1.2.2. [xorm](#xorm)
16 | - 1.3. [LevelDB](#leveldb)
17 |
18 | 💠 2024-02-02 14:22:14
19 | ****************************************
20 | # Go的数据库操作
21 |
22 |
23 | ## Redis
24 | > [Github: go-redis](https://github.com/go-redis/redis)
25 | > [Github: radix](https://github.com/mediocregopher/radix)
26 |
27 | ************************
28 |
29 | ## MySQL
30 | ### gorm
31 | ### xorm
32 |
33 | ************************
34 |
35 | ## LevelDB
36 | > [Github: goleveldb](https://github.com/syndtr/goleveldb)
37 |
38 |
39 | ************************
40 |
41 | > 搜索
42 |
43 | gofound
44 | zincsearch
--------------------------------------------------------------------------------
/Go/GoRestful.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GoRestful
3 | date: 2018-12-14 09:26:23
4 | tags:
5 | - Web
6 | - Restful
7 | categories:
8 | - Go
9 | ---
10 |
11 | 💠
12 |
13 | - 1. [Go-microservices](#go-microservices)
14 | - 1.1. [Gin](#gin)
15 | - 1.2. [Hertz](#hertz)
16 | - 1.3. [Iris](#iris)
17 | - 1.4. [go-kit](#go-kit)
18 | - 1.5. [go-zero](#go-zero)
19 |
20 | 💠 2025-05-09 18:34:05
21 | ****************************************
22 | # Go-microservices
23 | > Go 的 web框架 `microservices`
24 |
25 |
26 | > [参考: Building a REST Service with Golang - Part 2 (Basic Webserver)](https://stevenwhite.com/building-a-rest-service-with-golang-2/)
27 |
28 | > [参考: Making a RESTful JSON API in Go](https://thenewstack.io/make-a-restful-json-api-go/)
29 |
30 | [Github:go-restful](https://github.com/emicklei/go-restful)
31 |
32 | > [Implementing hexagonal architecture in Go | by Andy Beak | Medium](https://medium.com/@andy.beak/implementing-hexagonal-architecture-in-go-50ef96f93b45)
33 | > [andybeak/hexagonal-demo](https://github.com/andybeak/hexagonal-demo)
34 |
35 | ## Gin
36 | > [Github](https://github.com/gin-gonic/gin)
37 |
38 | > [gin-example](https://github.com/EDDYCJY/go-gin-example)
39 | > [demo: mybook](https://github.com/Kuangcp/GoBase/tree/master/mybook)
40 |
41 | ## Hertz
42 | > [cloudwego/hertz: Go HTTP framework with high-performance and strong-extensibility for building micro-services.](https://github.com/cloudwego/hertz)
43 |
44 | ## Iris
45 | > [iris](https://github.com/kataras/iris)
46 |
47 | ## go-kit
48 | [go-kit](https://github.com/go-kit/kit)
49 |
50 | ## go-zero
51 | [doc](https://go-zero.dev/docs/concepts/overview)
52 |
--------------------------------------------------------------------------------
/Go/Map/GoMap.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GoMap
3 | date: 2025-01-07 09:56:23
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Golang map](#golang-map)
12 | - 1.1. [sync.map](#syncmap)
13 |
14 | 💠 2025-01-07 09:56:23
15 | ****************************************
16 | # Golang map
17 |
18 | > [参考: Java HashMap和Go map源码对比](https://juejin.im/post/5c020b145188250e8601f2a2)
19 |
20 | ## sync.map
21 | 适合读多写少
22 |
23 |
--------------------------------------------------------------------------------
/Hardware/BIOS.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: BIOS
3 | date: 2020-05-17 16:51:49
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [BIOS](#bios)
11 | 1. [UEFI](#uefi)
12 |
13 | **目录 end**|_2020-05-17 16:51_|
14 | ****************************************
15 | # BIOS
16 | > Basic Input Output System
17 |
18 | 主板上的ROM软件,电脑启动时最先加载运行 ,各主板厂商提供的都有所不同但是大同小异 通常个人会用到的就是 引导方式和菜单,加锁,虚拟化 等功能
19 |
20 | ## UEFI
21 | > [BIOS and UEFI](https://wiki.manjaro.org/index.php?title=BIOS_and_UEFI)
22 |
23 |
--------------------------------------------------------------------------------
/Hardware/Disk.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Disk
3 | date: 2025-01-07 09:56:23
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Disk](#disk)
12 | - 1.1. [SSD](#ssd)
13 |
14 | 💠 2025-01-07 09:56:23
15 | ****************************************
16 | # Disk
17 |
18 | ## SSD
19 | SLC MLC TLC QLC PLC ... 单个存储单元能存储的位数 Single Multiple ...
20 |
21 | 左至右 性能更低,容量更大,可靠性更低
22 |
23 |
24 |
--------------------------------------------------------------------------------
/Hardware/Interface.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 硬件接口
3 | date: 2019-12-10 13:32:10
4 | tags:
5 | categories:
6 | - 硬件
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [接口](#接口)
12 | 1. [显示器接口](#显示器接口)
13 | 1. [VGA](#vga)
14 | 1. [DVI](#dvi)
15 | 1. [HDMI](#hdmi)
16 | 1. [DP DisplayPort](#dp-displayport)
17 |
18 | **目录 end**|_2020-04-27 23:42_|
19 | ****************************************
20 | # 接口
21 |
22 | ## 显示器接口
23 | > [HDMI vs DisplayPort vs DVI vs VGA](https://gadgetsenthusiast.com/hdmi-vs-displayport-vs-dvi-vs-vga/)
24 |
25 | ### VGA
26 |
27 | ### DVI
28 |
29 | ### HDMI
30 | - 按行传输图像可传输音频 如需 HDR需扩展线材 更适用于 电视
31 |
32 | ### DP DisplayPort
33 | - 按自定义包传输 扩展性高(HDR ) 可传输音频 更适用于PC
34 |
35 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Cache/EhCache.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: EhCache
3 | date: 2024-05-04 22:06:19
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [EhCache](#ehcache)
11 |
12 | 💠 2024-05-04 23:18:27
13 | ****************************************
14 | # EhCache
15 | [Ehcache](https://www.ehcache.org/)被Hibernate选中的默认缓存实现框架
16 |
17 | 特性:
18 | - 多级缓存,相较于GuavaCache Caffeine纯内存框架,Ehcache支持内存,堆外内存,磁盘
19 | - 堆外内存是为了`规避GC扫描成本`,但是相较于堆内存可以通过引用直接读取值,堆外内存则需要`序列化反序列化`来读写
20 | - 支持集群
21 | - 支持持久化
22 | - 支持分布式缓存
23 | - RMI 组播
24 | - JMS 消息
25 | - JGroups
26 | - Terracotta
27 | - 支持 `JSR107标准`以及使用非常广泛的`Spring Cache标准`
28 |
29 | > [JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来](https://juejin.cn/post/7167259989826863112)
30 |
31 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Cache/GuavaCache.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GuavaCache
3 | date: 2019-05-13 11:15:40
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [GuavaCache](#guavacache)
11 |
12 | 💠 2024-02-04 15:34:54
13 | ****************************************
14 | # GuavaCache
15 | > [Guava Cache](https://www.baeldung.com/guava-cache)
16 |
17 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Cache/Readme.md:
--------------------------------------------------------------------------------
1 | # Java相关缓存框架
2 |
3 | > [缓存系列专栏](https://github.com/veezean/JavaBasicSkills?tab=readme-ov-file#%E7%BC%93%E5%AD%98%E7%B3%BB%E5%88%97%E4%B8%93%E6%A0%8F)
4 |
5 |
6 | 如果只是本地简单、少量缓存数据使用的,选择Caffeine;
7 | 如果本地缓存数据量较大、内存不足需要使用磁盘缓存的,选择EhCache;
8 | 如果是大型分布式多节点系统,业务对缓存使用较为重度,且各个节点需要依赖并频繁操作同一个缓存,选择Redis。
9 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Concurrency/AQS.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: AQS
3 | date: 2024-11-10 14:31:25
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [AQS AbstractQueuedSynchronizer](#aqs-abstractqueuedsynchronizer)
12 |
13 | 💠 2024-11-10 14:31:25
14 | ****************************************
15 | # AQS AbstractQueuedSynchronizer
16 |
17 | [The java.util.concurrent Synchronizer Framework: Doug Lea](https://gee.cs.oswego.edu/dl/papers/aqs.pdf)`AQS`
18 | [The j.u.c Synchronizer Framework中文翻译版](http://ifeve.com/aqs/)
19 |
20 | > [【深入AQS原理】我画了35张图就是为了让你深入 AQS - 一枝花算不算浪漫 - 博客园](https://www.cnblogs.com/wang-meng/p/12816829.html)
21 |
22 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Concurrency/Atomic.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java中的原子类
3 | date: 2019-06-04 19:44:41
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [UnSafe](#unsafe)
11 | - 2. [CAS](#cas)
12 | - 3. [原子类](#原子类)
13 |
14 | 💠 2024-09-24 16:47:51
15 | ****************************************
16 |
17 | > [CAS, Unsafe和原子类详解](https://pdai.tech/md/java/thread/java-thread-x-juc-AtomicInteger.html)
18 |
19 | # UnSafe
20 |
21 | Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力, 也随之带来了指针相关问题的风险。
22 |
23 | ************************
24 |
25 | # CAS
26 | CAS的全称为Compare-And-Swap,直译就是对比后交换,是一条CPU的原子指令。
27 | 其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,其实现方式是基于硬件平台的汇编指令,JVM只是封装了汇编调用,这便是原子类的核心基础。
28 | CAS方式为乐观锁,synchronized 为悲观锁。
29 |
30 |
31 | > ABA问题
32 | 如果一个值原来是A,变成了B,又变成了A,那么使用CAS操作时会直接执行Swap。
33 |
34 | 解决思路:
35 | 1. 可以加版本号, 1A->2B->3A
36 | 1. Java 1.5开始,JDK的Atomic包里提供了一个类 `AtomicStampedReference` 来解决ABA问题, compare值时并比较对象内存引用
37 |
38 | > 竞争高时CPU高负载
39 | 当并发激烈时 compare操作 大部分情况会失败,无休止的循环将导致CPU使用率飙升。类似的,Disruptor队列核心使用CAS,也有这个问题
40 |
41 | 如果JVM能支持处理器提供的pause指令,那么效率会有一定的提升,但是目前JVM无法避免该问题。pause指令有两个作用:
42 | 第一,它可以延迟流水线执行命令(de-pipeline),使CPU不会消耗过多的执行资源,延迟的时间取决于具体实现的版本,在一些处理器上延迟时间是零;
43 | 第二,它可以避免在退出循环的时候因内存顺序冲突(Memory Order Violation)而引起CPU流水线被清空(CPU Pipeline Flush),从而提高CPU的执行效率。
44 |
45 | > 只能保证一个共享变量的原子操作
46 |
47 | 解决思路:从Java 1.5开始,JDK提供了AtomicReference类来保证引用对象之间的原子性,就可以把多个变量打包为一个对象 来进行CAS操作。
48 |
49 | ************************
50 |
51 | # 原子类
52 |
53 | > `java.util.concurrent.atomic` 提供适当的原子方法 避免在共享数据上出现竞争危害的方法
54 | > 使用Java自带的原子类, 可以避免同步锁带来的并发访问性能降低的问题, 减少犯错的机会. 对于 int, long, boolean 等成员变量大量使用原子类
55 | >> 但是使用者必须通过类似 compareAndSet或者set或者与这些操作等价的`原子操作`来保证更新的原子性.
56 |
57 | - 常见的操作系统的支持, 他们是非阻塞的(无需线程锁), 常见的方法是实现序列号机制(和数据库里的序列号机制类似),在`AtomicInteger`或`AtomicLong`上用原子
58 | - 操作`getAndIncrement()`方法, 并且提供了nextId 方法得到唯一的完全增长的数值
59 | - 注意: 原子类不是相似的类继承而来,所以 AtomicBoolean不能当Boolean用
60 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Concurrency/Lock.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java中的锁
3 | date: 2019-04-22 15:49:53
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [Lock](#lock)
12 | 1. [队列同步器](#队列同步器)
13 |
14 | **目录 end**|_2020-04-27 23:42_|
15 | ****************************************
16 | # Lock
17 |
18 | ```java
19 | Lock lock = new ReentrantLock();
20 | // 不能放在 try中, 防止 获取锁失败, 并执行了释放锁
21 | lock.lock();
22 | try {
23 |
24 | } finally {
25 | lock.lock();
26 | }
27 | ```
28 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/JavaDebug.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java中的Debug
3 | date: 2019-07-21 18:08:40
4 | tags:
5 | categories:
6 | - Java
7 | - Troubleshoot
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Debug](#debug)
13 | - 1.1. [技巧](#技巧)
14 | - 1.2. [方案](#方案)
15 | - 1.2.1. [应用方法CPU耗时或线程异常](#应用方法cpu耗时或线程异常)
16 | - 1.3. [远程调试](#远程调试)
17 |
18 | 💠 2024-11-18 14:31:55
19 | ****************************************
20 | # Debug
21 |
22 | > [参考: 深入 Java 调试体系](https://www.ibm.com/developerworks/cn/views/java/libraryview.jsp?search_by=%E6%B7%B1%E5%85%A5%20Java%20%E8%B0%83%E8%AF%95%E4%BD%93%E7%B3%BB)
23 |
24 | 1. [jdb](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jdb.html)
25 |
26 | > IDEA 的 debug 实现方式: JVM应用的启动命令追加 -javaagent: . `可查看JVM的完整启动命令找到`
27 |
28 | ## 技巧
29 | 1. 需要尝试不停机去修改代码去寻找问题踪迹
30 | - 可通过Arthas动态替换class
31 | 1. 业务代码复杂,寻找资源泄漏点难以找到业务上的触发点
32 | - 可在创建资源的最底层入口实例化一个异常,但是不抛出,仅打印日志,观察每次资源被创建时的调用栈,辅助分析出是哪个业务入口导致
33 |
34 | > 阅读和分析代码的思路
35 | - 数据导向,基于问题的字段按业务流程,找不同阶段该字段值的变化情况,定位到局部的代码片段。
36 | - 小黄鸭调试法
37 |
38 | ## 方案
39 | ### 应用方法CPU耗时或线程异常
40 | 表现: 应用启动慢,业务方法运行慢等等
41 |
42 | 思路:
43 |
44 | 1. jstack 分析方法 在业务进入前,执行中,执行完毕后 等若干个节点上的线程差别,找出可能异常的线程和方法栈
45 | 1. profile 查看CPU火焰图,找出耗时高的栈
46 | 1. arthas 的 monitor 指令进行分析方法栈耗时监控,找出异常方法
47 |
48 | > 项目启动慢
49 |
50 | 1. 场景: Linux系统 hostname 没有配置到 /etc/hosts 文件中, 启动过程中频繁jstack能看出某线程被 getLocalHost 方法所阻塞
51 | - 方案: hostname配置到 /etc/hosts
52 |
53 | ## 远程调试
54 | - 服务端开启远程调试端口 8000
55 | - JDK9及以上 `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000`
56 | - JDK5-8 `-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000`
57 | - If you want to debug from start of application use `suspend=y` , this will keep remote application suspended until you connect from eclipse.
58 | - IDE中新增Remote运行配置填入IP端口,选择启动类所在模块即可远程Debug
59 | - 注意尽量不要Debug所有线程从而导致K8S健康检查无响应下的pod重启
60 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/JavaNetwork.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java网络编程
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - 网络
6 | categories:
7 | - Java
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Java网络编程](#java网络编程)
13 | - 1.1. [基础](#基础)
14 | - 1.2. [Socket](#socket)
15 | - 1.2.1. [Tuning](#tuning)
16 | - 1.3. [Tips](#tips)
17 |
18 | 💠 2025-03-13 10:41:25
19 | ****************************************
20 | # Java网络编程
21 |
22 | > [参考: Java网络教程](http://ifeve.com/java-network/)
23 | > [java proxy](https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html)
24 |
25 | ## 基础
26 | > 获取主机网络信息
27 |
28 | - [获取本地ip](https://github.com/looly/hutool/issues/428)
29 | - [Getting the IP address of the current machine using Java](http://stackoverflow.com/questions/9481865/getting-the-ip-address-of-the-current-machine-using-java)
30 |
31 | ## Socket
32 | > [码农翻身:张大胖的socket ](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513387&idx=1&sn=99665948d0b968cf15c5e7a01ffe166c&chksm=80d679e8b7a1f0febad077b57e8ad73bfb4b08de74814c45e1b1bd61ab4017b5041942403afb&scene=21#wechat_redirect)
33 |
34 |
35 | ### Tuning
36 | > Connection reset
37 | 服务器关闭了Connection会返回“RST”而不是返回“FIN”标志。原因在于Socket.close()方法的语义和TCP的“FIN”标志语义不一样:
38 | - 发送TCP的“FIN” 标志表示 我不再发送数据了
39 | - Socket.close() 表示我不再发送也不接受数据了。
40 | 问题就出在“我不接受数据” 上,如果此时客户端还往服务器发送数据,服务器内核接收到数据,但是发现此时Socket已经close了,则会返回“RST”标志给客户端。
41 | 此时客户端就会提示:“Connection reset”。
42 |
43 | > [Orderly (and Abortive) Connection Release in Java](https://docs.oracle.com/javase/1.5.0/docs/guide/net/articles/connection_release.html)
44 |
45 | ************************
46 |
47 | ## Tips
48 |
49 | - 得到URL指向文件的输入流
50 | - `new URL(url).openStream()`
51 |
52 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/JavaSPI.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SPI
3 | date: 2019-05-19 16:53:19
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [Java中的SPI](#java中的spi)
12 | - 2. [实践项目](#实践项目)
13 | - 2.1. [JDBC](#jdbc)
14 | - 2.2. [Lombok](#lombok)
15 | - 2.3. [SLF4J](#slf4j)
16 | - 2.4. [Dubbo](#dubbo)
17 | - 2.5. [Jigsaw](#jigsaw)
18 |
19 | 💠 2024-11-11 13:59:04
20 | ****************************************
21 | # Java中的SPI
22 | > Service Provider Interface
23 |
24 | > [Offcial Tutorials](https://docs.oracle.com/javase/tutorial/ext/basics/spi.html)
25 | > [参考: Java SPI思想梳理](https://zhuanlan.zhihu.com/p/28909673)
26 | > [参考: SPI 概述](https://zhoukaibo.com/2019/03/16/java-spi/)
27 |
28 | Java spi的具体约定如下:
29 |
30 | 当服务的提供者,提供了服务接口的一种实现之后,在jar包的`META-INF/services/`目录里同时创建一个**以服务接口命名**的文件。
31 | 该文件的内容是实现该服务接口的具体实现类(一行一个类)。而当外部程序装配这个模块的时候,就能通过模块内`META-INF/services/`的配置文件找到具体的实现类名
32 | 并装载实例化,完成模块的注入, 基于这样一个约定就能很好的找到服务接口的实现类,而不需要再代码里显式指定,完成解耦。
33 |
34 | JDK提供服务查找的工具类:java.util.ServiceLoader
35 |
36 | # 实践项目
37 | 例如一个对加密算法封装的工具类,为支持的加密算法写了代理类,然后引入支持的加密算法依赖,但是配置为 `true`
38 | 然后配置 SPI文件 为所有支持的算法库,应用使用该工具类时,可按需加载实际选择的算法库。
39 |
40 | > 例如:[表达式引擎封装-ExpressionUtil | Hutool](https://doc.hutool.cn/pages/ExpressionUtil/#%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%95%E6%93%8E%E6%89%A7%E8%A1%8C)
41 |
42 | ## JDBC
43 | 我们在入门的时候都学过用jdbc包,用的时候我们都被要求写这行代码, 加载驱动类 `Class.forName("com.mysql.cj.jdbc.Driver");`
44 | 但是从JDBC4.0后,就不用显式加载了,因为 DriverManager 自动加载了该驱动类,有个特例:Tomcat的原生Servlet模式(打破了委派机制)需要手动加载驱动类。
45 |
46 | 我们去查 mysql-connector-java 这个包就会发现,SPI定义 将 com.mysql.cj.jdbc.Driver 这个类注册给了 java.sql.Driver 这个接口。加载的时候用的其实也是 ServiceLoader 。
47 |
48 | ## Lombok
49 | lombok的原理也是类似,他用自己写的 AnnotationProcessor 去实现 javax.annotation.processing.Processor ,从而做到在编译期进行注解处理。
50 |
51 | ## SLF4J
52 | > [参考: Slf4j框架理解与分析 ](https://blog.mythsman.com/2018/02/04/1/)
53 |
54 | ## Dubbo
55 | > [参考: SPI Loading](http://dubbo.apache.org/zh-cn/docs/dev/SPI.html)
56 |
57 | ## Jigsaw
58 | Java9推出的模块化系统 JPMS Java Platform Module System
59 |
60 | 通过改进的SPI机制来实现模块的依赖注入
61 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Release/Java11.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java11
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [Java11](#java11)
12 | 1. [安装配置](#安装配置)
13 | 1. [Linux](#linux)
14 | 1. [新特性](#新特性)
15 | 1. [ZGC](#zgc)
16 | 1. [部分API转为内部API](#部分api转为内部api)
17 |
18 | **目录 end**|_2021-05-17 00:15_|
19 | ****************************************
20 | # Java11
21 | > [Official: JDK 11 Documentation](https://docs.oracle.com/en/java/javase/11/) | [Official:api](https://docs.oracle.com/en/java/javase/11/docs/api/index.html)
22 |
23 | > [Tool reference](https://docs.oracle.com/en/java/javase/11/tools/tools-and-command-reference.html)
24 |
25 | 应该就是真正意义上的 Java9 了, 原先发布的 9 和 10 都不是 LTS, 并且很多原先属于9的特性也是推迟到了这个版本
26 |
27 | ## 安装配置
28 | > [Official site](https://www.oracle.com/technetwork/java/javase/downloads/index.html)
29 |
30 | > [ZGC](https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#JDK-8197831)
31 |
32 | 通过 JVM 参数启用 ZGC
33 | ```
34 | -XX:+UnlockExperimentalVMOptions
35 | -XX:+UseZGC
36 | ```
37 |
38 | ### Linux
39 | ```sh
40 | JAVA_HOME=/path/to/java11
41 | export CLASSPATH=.:${JAVA_HOME}/lib
42 | export PATH=${JAVA_HOME}/bin:$PATH
43 | ```
44 |
45 | ## 新特性
46 | > [Official: migrate guide](https://docs.oracle.com/en/java/javase/11/migrate/index.html)
47 | > [JDK 11 Release Notes](https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#JDK-8197831)
48 |
49 | ### ZGC
50 | > [ZGC](/Java/AdvancedLearning/JvmGC.md#ZGC)
51 |
52 | *******************************
53 | > [参考: Java 11 Tutorial](https://winterbe.com/posts/2018/09/24/java-11-tutorial/)
54 |
55 | > [参考: Java 11 正式发布,带来ZGC、Http Client等重要特性! ](https://mp.weixin.qq.com/s/CA_snRZ0kw9i-p1YCnHRKA)
56 |
57 | > [Java11](https://blog.csdn.net/weixin_38055381/article/details/82865385)
58 |
59 |
60 | ### 部分API转为内部API
61 | > [Compile Your Application if Needed](https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-77874D97-46F3-4DB5-85E4-2ACB5F8D760B)
62 |
63 | 例如 sun.misc.Unsafe , 如果应用有引用, 在 JDK11 中编译会报错 加 `--add-exports` 可避免报错
64 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Security/Readme.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java加密
3 | date: 2023-09-22 19:03:18
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Security](#security)
11 | 1. [伪随机数生成器](#伪随机数生成器)
12 |
13 | **目录 end**|_2023-09-22 19:03_|
14 | ****************************************
15 | # Security
16 | > [Java Cryptography Architecture Standard Algorithm Name Documentation for JDK 8](https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html)`列出各种用途的算法,以及加密模式,信息摘要算法`
17 |
18 | 1. Provider 类 提供DSA,RSA,MD5算法
19 | 1. Security 类 管理Provider
20 | 1. MessageDigest 类 提供了信息摘要算法:MD2 MD5 SHA-1(SHA) SHA-256 SHA-384 SHA-512.
21 |
22 | ************************
23 |
24 | ## 伪随机数生成器
25 | Random
26 | - 依据设置的seed作为初始值,随机序列采用[线性同余法](/Algorithm/Cryptography.md#伪随机数生成器)生成,特点是当前值需要依赖上一个随机数值更新seed。
27 | - 因此Random用了一个AtomicLong来保存当前seed,在并发高的时候会出现忙等待
28 |
29 | ThreadLocalRandom
30 | - 不将seed作为共享内存,而是跟随线程绑定,Java7在ThreadLocal中,Java8则内置在了Thread类上
31 |
32 | SecureRandom
33 | - 不使用构造的seed,而是从操作系统的 /dev/random 和 /dev/urandom 特殊设备获取字节序列作为seed `注意如果操作系统刚启动设备内熵值不够,这个类获取随机数的话会报错`
34 |
35 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Tuning/JavaPGO.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JavaPGO
3 | date: 2024-04-30 22:26:23
4 | tags:
5 | categories:
6 | - Troubleshoot
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [Java 中的 PGO](#java-中的-pgo)
12 | - 1.1. [HotSpot](#hotspot)
13 |
14 | 💠 2024-11-18 14:31:55
15 | ****************************************
16 | # Java 中的 PGO
17 |
18 | > [Note: PGO base](/Skills/Councurrency/PGO.md)
19 |
20 | - HotSpot 虚拟机默认会在运行期启用PGO。
21 | - GraalVM 企业版本的NativeImage中才能应用PGO技术 `社区版不支持`
22 | - [Profile-Guided Optimizations ](https://www.graalvm.org/22.0/reference-manual/native-image/PGO/)
23 | - [Optimize a Native Executable with Profile-Guided Optimizations](https://www.graalvm.org/latest/reference-manual/native-image/guides/optimize-native-executable-with-pgo/)`样例`
24 |
25 | > [在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述](https://www.51cto.com/article/783879.html) [原文](https://dzone.com/articles/unleash-peak-performance-in-java-applications-over)
26 |
27 | ## HotSpot
28 | - 方法内联
29 | - 循环展开
30 | - 内存访问模式优化 将内存访问模式与硬件功能相结合来显著提高缓存性能
31 |
32 | 虽然已经支持在运行期实时收集信息做PGO,但是预先PGO可以省去这个预热过程,但是也有弊端业务变化频繁也就意味着代码变更频繁profile是否准确是否带来负优化是比较难衡量的。
33 | 大型应用启动后做预热的话,可以避免出现应用刚启动时大量的接口或操作的延迟相较于长期运行时高出很多的问题。
34 |
35 | > 采集Profiling
36 | - VisualVM
37 | - YourKit
38 | - Java Flight Recorder
39 | - Async Profiler
40 |
41 | > 预热/训练
42 |
43 | 通过进行全面的训练运行,可以捕获应用程序可能显示广泛的运行时行为。
44 | - 模拟代表常见用户操作的用户交互和工作流。
45 | - 模拟高负载条件的压力测试。
46 | - 探索性测试以覆盖不同的代码路径。
47 | - 负载测试以评估可扩展性。
48 |
49 | > Profile文件
50 |
51 | Profiling工具从训练运行中收集数据,并将其存储在配置文件数据库或日志文件中, 配置文件数据可能包括如下指标:
52 | - 方法调用计数
53 | - 内存分配和垃圾收集统计
54 | - 线程活动和同步详细信息
55 | - 异常发生和处理
56 | - CPU和内存使用情况
57 |
58 | > JIT使用
59 |
60 | HotSpot JVM是使用最广泛的Java运行时环境,它通过“分层编译”机制支持PGO, `-XX:+UseProfiledCode` 和`-XX:ProfiledCodeGenerate`控制HotSpot中的PGO。
61 |
62 | > 分析与调优
63 | - 识别性能瓶颈:分析性能分析数据以识别性能瓶颈,例如频繁调用的方法、热代码路径或内存密集型操作。
64 | - 优化决策:基于分析数据,做出关于代码优化的明智决策。常见的优化包括方法内联、循环展开、内存访问模式改进和线程同步增强。
65 | - 优化技术:使用适当的技术和编码实践实现所选的优化。
66 | - 基准测试:在进行优化后,对应用程序进行基准测试,以衡量性能改进。使用分析工具来验证优化是否对分析期间确定的瓶颈产生了积极影响。
67 |
68 | > 定期重新分析和优化
69 | - 性能优化是一个持续的过程。随着应用程序的技术设计和业务需求的变化,定期重新分析和优化对于保持峰值性能至关重要。在应用程序生命周期的不同阶段继续收集配置文件数据,并相应地调整优化。
70 | - 一个思路便是每次需求升级时,考虑技术和业务变化的影响面,重新生成Profile文件。
71 |
72 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Tuning/Practice.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Practice
3 | date: 2024-03-06 14:10:23
4 | tags:
5 | categories:
6 | - Troubleshoot
7 | - WIKI
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [问题实践](#问题实践)
13 | - 1.1. [IDEA调优](#idea调优)
14 | - 1.2. [FD泄漏: Unable to Open Socket File](#fd泄漏-unable-to-open-socket-file)
15 | - 1.2.1. [查找JVMSocket泄漏](#查找jvmsocket泄漏)
16 |
17 | 💠 2024-11-18 14:31:55
18 | ****************************************
19 | # 问题实践
20 | ## IDEA调优
21 | ```conf
22 | -server
23 | -Xms1700m # 最小堆
24 | -Xmx1700m # 最大堆 配成一样是为了避免扩容
25 | -XX:MetaspaceSize=350m # 只是一个阈值, 达到该阈值才进行 GC
26 | -XX:MaxMetaspaceSize=350m # 最大值
27 |
28 | -Xnoclassgc
29 | -Xverify:none # 不进行字节码校验
30 | -XX:+AggressiveOpts # 激进式优化
31 |
32 | -XX:ReservedCodeCacheSize=320m # IDEA JIT 缓存
33 | ```
34 |
35 | > [参考: Java’s -XX:+AggressiveOpts: Can it slow you down?](https://www.opsian.com/blog/aggressive-opts/)
36 | > [参考: JVM参数MetaspaceSize的误解 ](https://mp.weixin.qq.com/s/jqfppqqd98DfAJHZhFbmxA?)
37 |
38 | ************************
39 |
40 | ## FD泄漏: Unable to Open Socket File
41 | > [jmap Error “Unable to Open Socket File”](https://www.baeldung.com/linux/jmap-unable-to-open-socket-file-heap-dump)
42 | - 不是同用户及用户组 uid和gid
43 | - 目标JVM不健康
44 | - 目标JVM使用了`-XX:+DisableAttachMechanism`JVM参数
45 | - 执行工具的JVM和目标JVM不是同一个版本(最好保持一致,如果版本相差过大,内存布局设计不一样,就会无法正常解析结果)
46 | - /tmp 目录下无法创建命令使用的临时文件,或是来不及使用就被`systemd-tmpfiles`清理了 `/tmp/.java_pidXXX`
47 |
48 | ### 查找JVMSocket泄漏
49 | - [一次由于网络套接字文件描述符泄露导致线上服务事故原因的排查经历](https://www.wangbo.im/posts/a-production-bug-leaking-sockets-fd-reproducing-practice/)
50 | - `strace -t -T -f -p pid -e trace=network,close -o strace.out`
51 | - 尝试找到创建socket并没有关闭socket的线程号, 然后进制转换后查看jstack找到线程持有栈关联到相关代码
52 |
53 | - 处理过的案例: [Apache DolphinScheduler V1.3.6 channel 未关闭导致socket泄漏](https://github.com/apache/dolphinscheduler/blob/d21eb7b1809aa513ced920d5d08575502bde8911/dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java#L156)
54 | - 单纯从服务器现场看只能看到worker对master建立了大量socket,而且fd的特殊性无法判断socket真实建立时间
55 | - 从worker和master的内存Dump入手,查看大量的socket(出问题时已4w+)会和哪些对象数量异常增多有关
56 | - 排查可能异常的对象(优先看Netty和Socket有关的对象),对比上下文代码(优先关注对象创建和销毁处代码),最终定位到泄漏对象为NettyRemoteChannel,以及上述泄漏点
57 | - 处理方式: remove前先关闭Channel
58 |
59 |
--------------------------------------------------------------------------------
/Java/AdvancedLearning/Tuning/Readme.md:
--------------------------------------------------------------------------------
1 | JavaTroubleshoot.md
--------------------------------------------------------------------------------
/Java/AdvancedLearning/img/006-jvm-memory.drawio.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/AdvancedLearning/img/006-jvm-memory.drawio.svg
--------------------------------------------------------------------------------
/Java/AdvancedLearning/img/007-jvm-memory.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/AdvancedLearning/img/007-jvm-memory.webp
--------------------------------------------------------------------------------
/Java/AdvancedLearning/img/008-jvm-run-memory-area.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/AdvancedLearning/img/008-jvm-run-memory-area.webp
--------------------------------------------------------------------------------
/Java/Android/AndroidBase.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Android基础
3 | date: 2023-12-19 15:01:26
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Android](#android)
11 | - 1.1. [adb](#adb)
12 | - 2. [Tips](#tips)
13 | - 2.1. [Android和Linux传输文件](#android和linux传输文件)
14 |
15 | 💠 2023-12-19 15:01:38
16 | ****************************************
17 | # Android
18 | > [developer.android.google.cn](https://developer.android.google.cn/)
19 |
20 | 1. [apktool](https://bitbucket.org/iBotPeaches/apktool/overview)
21 |
22 | ## adb
23 | > Android Debug Bridge
24 |
25 | > [Android 调试桥 (adb)](https://developer.android.com/studio/command-line/adb) | [Arch Wiki: Android Debug Bridge](https://wiki.archlinux.org/title/Android_Debug_Bridge)
26 |
27 | - adb version
28 | - adb devices 查看连接的设备 `前提安卓要开启开发者adb调试 和 确认授权的弹窗提示`
29 | - adb pull 手机存储绝对路径 电脑绝对路径 `从手机拉文件到pc`
30 | - adb push 电脑绝对路径 手机存储绝对路径
31 |
32 |
33 | # Tips
34 | ## Android和Linux传输文件
35 | - Termux 安装ssh
36 | - adb
37 | - ftp webdav 协议互访问
38 |
--------------------------------------------------------------------------------
/Java/Basic/JavaAnnotation.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java中的注解
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - 注解
6 | categories:
7 | - Java
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [注解](#注解)
13 | 1. [自定义Annotation](#自定义annotation)
14 | 1. [读取](#读取)
15 |
16 | **目录 end**|_2021-05-17 00:15_|
17 | ****************************************
18 | # 注解
19 |
20 | > 参考博客 [全面解析Java注解](http://blog.csdn.net/chenxiang0207/article/details/8193980) | [Java注解(2)-运行时框架](http://blog.csdn.net/duo2005duo/article/details/50511476)
21 |
22 | > 参考项目 [AnnotationDemo](https://github.com/zhuifengshen/AnnotationDemo)
23 |
24 | - 注解定义包含四个元注解,分别为@Target,@Retention,@Documented, @Inherited。各元注解的作用如下:
25 | 1. **@Target** 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
26 | - `ElemenetType.CONSTRUCTOR` 构造器声明。
27 | - `ElemenetType.FIELD` 域声明(包括 enum 实例)。
28 | - `ElemenetType.LOCAL_VARIABLE` 局部变量声明。
29 | - `ElemenetType.METHOD` 方法声明。
30 | - `ElemenetType.PACKAGE` 包声明。
31 | - `ElemenetType.PARAMETER` 参数声明。
32 | - `ElemenetType.TYPE` 类,接口(包括注解类型)或enum声明。
33 |
34 | 1. **@Retention** 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
35 | - `RetentionPolicy.SOURCE` java
36 | - `RetentionPolicy.CLASS` java + class
37 | - `RetentionPolicy.RUNTIME` java + class + jvm, 因此可以通过反射机制读取注解的信息。
38 |
39 | > 举一个例子,如@Override里面的Retention设为SOURCE,编译成功了就不要这一些检查的信息,相反,@Deprecated里面的Retention设为RUNTIME,表示除了在编译时会警告我们使用了哪个被Deprecated的方法,在执行的时候也可以查出该方法是否被Deprecated。
40 |
41 | 1. **@Documented** 将此注解包含在 javadoc 中
42 |
43 | 1. **@Inherited** 允许子类继承父类中的注解
44 |
45 | ## 自定义Annotation
46 |
47 | ```java
48 | @Retention(value = RetentionPolicy.RUNTIME)
49 | public @interface GetItem {
50 | // 设置属性内容
51 | String name() default "hello";
52 | String value();
53 | }
54 | ```
55 |
56 | > [自定义 JSR303 Validation 注解](https://github.com/Kuangcp/JavaBase/tree/master/web/src/main/java/com/github/kuangcp/validation)
57 |
58 | ## 读取
59 | > [相关代码片段](https://gitee.com/gin9/codes/s148mbplxo06qgn25d3wc23)
60 |
61 | - 判断是否有指定注解类型的注解
62 | - 在类上的注解就是得到类对象, 然后判断 isAnnotationPresent(ExcelConfig.class)
63 | - 在方法上的注解就是得到所有方法, 属性同理
64 |
--------------------------------------------------------------------------------
/Java/Basic/JavaInheritedAndInterface.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java中的继承与接口
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - 接口
6 | categories:
7 | - Java
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [继承和接口](#继承和接口)
13 | 1. [继承](#继承)
14 | 1. [接口](#接口)
15 | 1. [常用接口](#常用接口)
16 |
17 | **目录 end**|_2020-05-17 16:13_|
18 | ****************************************
19 | # 继承和接口
20 | > 应倾向于多使用组合而不是继承
21 |
22 | - [参考: java的重载、覆盖和隐藏的区别](http://www.cnblogs.com/xiaoQLu/archive/2013/01/07/2849869.html)
23 |
24 | ## 继承
25 |
26 | ## 接口
27 |
28 | 个人理解为一个接口就表明一种协议, 实现一个接口就是实现一种协议, 表明实现方可以完成协议所规定的相关行为
29 |
30 | ### 常用接口
31 |
32 | > Comparable
33 | - 可比较的, 此接口强行对实现它的每个类的对象进行整体排序。
34 | - 此排序被称为该类的自然排序,类的`compareTo`方法被称为它的自然比较方法。实现此接口的对象列表或数组可以通过`Collections.sort` 和`Arrays.sort`进行自动排序。
35 | - 实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。强烈推荐(虽然不是必需的) 使`自然排序`与 `equals` 一致。
36 | - 所谓`与equals一致`是指对于`类C` 的每一个 `e1 和 e2` 来说,当且仅当 `(e1.compareTo((Object)e2)==0)`与 `e1.equals((Object)e2)` 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。
37 | - 接口指定实现的方法 :`int compareTo(T o)` 比较此对象与指定对象的顺序。如果该对象`小于、等于或大于`指定对象,则分别返回`负整数、零或正整数`。
38 | - 强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。
39 | - 推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”
40 |
41 | > Comparator
42 | - 比较器, 实现了此接口的类具有对某类型排序的能力
43 | - 使用Lambda表达式的匿名实现 其实也是一样的实现了 compare(o1, o2) 方法 和 Comparable 中的 compareTo 的返回值的意义是一致的,
44 | - 如果o1 `小于、等于或大于` o2,则分别返回`负整数、零或正整数`。
45 | - 默认是 Ascend 一个从小到大的有序, 为了不迷惑, 时间也应该使用相同的顺序, 从过去到未来
46 |
47 |
--------------------------------------------------------------------------------
/Java/Basic/StringConcat.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: StringConcat
3 | date: 2023-10-03 20:28:47
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | 1. [字符串拼接](#字符串拼接)
11 | 1. [StringBuffer 和 StringBuilder](#stringbuffer-和-stringbuilder)
12 |
13 | 💠 2023-10-03 20:28
14 | ****************************************
15 | # 字符串拼接
16 |
17 | 1. 当有少量连接操作时,直接使用 `+` 。
18 | - 因为如果都是字面量,编译器会直接连接,如果包含变量,编译器会自动替换为 StringBuilder append 方式
19 | 1. 当`单线程`下有大量连接操作时,使用 StringBuilder
20 | 1. 当`多线程`下有大量连接操作时,使用 StringBuffer
21 |
22 | ## StringBuffer 和 StringBuilder
23 | > [参考博客](https://blog.csdn.net/rmn190/article/details/1492013)
24 |
25 | StringBuffer 是线程安全的, StringBuilder 不是
26 |
27 | - 为何在拼接时, StringBuider 会比直接使用String更好(在循环体中)
28 | - 因为用 String 会产生大量常量, StringBuilder StringBuffer 都是使用的字符数组来存储内容, 追加仅仅是扩容字符数组(实现在抽象类 AbstractStringBuilder 中)
29 | - StringBuilder StringBuffer 都是继承于它, Buffer 和 Builder 区别仅仅是 append 方法上加了 synchronized 关键字
30 |
31 |
--------------------------------------------------------------------------------
/Java/Blog/Java-ClassLoad-Confuse.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java ClassLoad Confuse
3 | date: 2020-04-29 01:06:35
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [类加载导致的迷惑](#类加载导致的迷惑)
11 | 1. [主题](#主题)
12 | 1. [解决方案](#解决方案)
13 | 1. [场景](#场景)
14 |
15 | **目录 end**|_2020-04-29 11:57_|
16 | ****************************************
17 |
18 | # 类加载导致的迷惑
19 | > 记录一次因Jar包冲突导致的类加载问题
20 |
21 | > [参考: 为什么SpringBoot的 jar 可以直接运行?](https://blog.csdn.net/b644ROfP20z37485O35M/article/details/105671696)
22 | > [参考: 重新看待Jar包冲突问题及解决方案](https://www.jianshu.com/p/100439269148)
23 | > [参考: jar包冲突与inode](https://www.bbsmax.com/A/gVdnYM985W/)
24 |
25 | > [Maven: Introduction to the Dependency Mechanism](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)
26 |
27 | ## 主题
28 | 1. Java 类加载
29 | 1. Linux inode
30 | 1. Jenkins Maven package
31 |
32 | ## 解决方案
33 | 1. 借助 Maven Helper 插件尽量避免Maven中依赖的冲突 maven-enforcer-plugin 插件 配合extra-enforcer-rules工具
34 | 1. 或者 使用脚本等工具分析出 不同jar包里 限定名一致的类
35 |
36 | ## 场景
37 | 1. SpringBoot项目 本身已经依赖了servlet3.1 因二方依赖被动引入了 servlet 2.5 版本
38 | 1. 上线途中项目启动失败,抛出 NoSuchMethodError 可知加载了低版本的 servlet
39 | 1. 经过分析可知依赖冲突导致,但是测试在未经排除依赖冲突时又做了重新上线,项目竟正常启动,因此分析底层原因
40 |
41 | > 项目依赖 `mvn dependency:tree -Dverbose -Dincludes=javax.servlet:`
42 | ```log
43 | [INFO] --- maven-dependency-plugin:3.0.2:tree (default-cli) @ project---
44 | [INFO] Verbose not supported since maven-dependency-plugin 3.0
45 | [INFO] com.project:war:1.0.0-SNAPSHOT
46 | [INFO] +- com.xuxueli:xxl-job-core:jar:1.9.0:compile
47 | [INFO] | \- javax.servlet:javax.servlet-api:jar:3.1.0:compile
48 | [INFO] \- com.xxx2:jar:2.1.3-RELEASE:compile
49 | [INFO] \- com.xxx3:xx-api:jar:1.3:compile
50 | [INFO] \- javax.servlet:servlet-api:jar:2.5:compile
51 | ```
52 |
--------------------------------------------------------------------------------
/Java/Blog/instantiation-object.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java实例化对象的几种方式
3 | date: 2020-02-02 18:45:47
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Java 实例化对象的方式](#java-实例化对象的方式)
11 | - 1.1. [new](#new)
12 | - 1.2. [反射](#反射)
13 | - 1.3. [clone](#clone)
14 | - 1.4. [反序列化](#反序列化)
15 | - 1.5. [Unsafe](#unsafe)
16 |
17 | 💠 2024-06-02 17:50:57
18 | ****************************************
19 | # Java 实例化对象的方式
20 | > [Github: 实例代码](https://github.com/kuangcp/JavaBase/blob/master/class/src/test/java/com/github/kuangcp/instantiation/InstantiationAndConstructorTest.java)
21 |
22 | > [Java创建对象的五种方式](https://juejin.im/post/5d44530a6fb9a06aed7103bd)
23 |
24 | ## new
25 | TODO
26 |
27 | ## 反射
28 | 1. 获取Class对象
29 | 1. 反射获取构造器方法或者调用 newInstance 方法(实际上是调用空构造器方法) 进行实例化
30 |
31 | ## clone
32 | 需要规避深拷贝问题,默认只复制第一层的成员属性
33 |
34 |
35 | ## 反序列化
36 | TODO
37 |
38 | ## Unsafe
39 | **sun.misc.Unsafe** 中提供 `allocateInstance` 方法,仅通过Class对象就可以创建此类的实例对象,而且不需要调用其构造函数、初始化代码、JVM安全检查等。
40 | 它抑制修饰符检测,也就是即使构造器是private修饰的也能通过此方法实例化,只需提类对象即可创建相应的对象。
41 | 由于这种特性,allocateInstance在 java.lang.invoke、Objenesis(提供绕过类构造器的对象生成方式)、Gson(反序列化时用到)中都有相应的应用。
42 |
--------------------------------------------------------------------------------
/Java/Blog/reduce-if-else-for-java.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 减少 Java 中的 if else
3 | date: 2020-05-04 00:36:52
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [减少Java中的if else](#减少java中的if-else)
12 |
13 | **目录 end**|_2020-05-04 19:34_|
14 | ****************************************
15 | # 减少Java中的if else
16 | > [如何解决代码中if…else 过多的问题 ](https://www.cnblogs.com/eric-shao/p/10115577.html)
17 |
18 | 1. 表驱动
19 | 1. 职责链模式
20 | 1. 注解驱动
21 | 1. 事件驱动
22 | 1. 有限状态机
23 | 1. Optional
24 | 1. Assert
25 | 1. 多态
26 |
27 |
--------------------------------------------------------------------------------
/Java/Collection/List.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: List.md
3 | date: 2019-05-26 21:38:24
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [List](#list)
11 | 1. [ArrayList](#arraylist)
12 |
13 | **目录 end**|_2020-04-27 23:42_|
14 | ****************************************
15 | # List
16 | > 线性表的接口
17 |
18 | ## ArrayList
19 |
20 | ## CopyOnWriteArrayList
21 |
22 |
--------------------------------------------------------------------------------
/Java/Collection/Map/ConcurrentHashMap.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ConcurrentHashMap
3 | date: 2025-01-07 09:56:23
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [ConcurrentHashMap](#concurrenthashmap)
12 |
13 | 💠 2025-01-07 09:56:23
14 | ****************************************
15 | # ConcurrentHashMap
16 | TODO
17 |
--------------------------------------------------------------------------------
/Java/Collection/Map/LinkedHashMap.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: LinkedHashMap
3 | date: 2022-08-09 15:30:22
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [LinkedHashMap](#linkedhashmap)
12 |
13 | **目录 end**|_2022-08-09 15:46_|
14 | ****************************************
15 | # LinkedHashMap
16 | > 关键点在于 java.util.LinkedHashMap.Entry
17 |
18 | 大部分逻辑完全 继承于HashMap, 在Node上引入了两个引用,将key维护为一个双向链表,保证了遍历时key的有序性
19 |
20 | > [参考: Java集合之LinkedHashMap](https://www.cnblogs.com/xiaoxi/p/6170590.html)
21 |
22 | 利用 LinkedHashMap 实现LRU时可以让自己代码更简化,在访问key时只需要将key remove和put一次就好了,这样迭代map时靠前的元素都是可以被淘汰的。
23 |
24 |
--------------------------------------------------------------------------------
/Java/Collection/Map/Readme.md:
--------------------------------------------------------------------------------
1 | # Map
2 |
3 | AbstractMap 抽象基类,可以基于该类实现自己的Map
4 |
5 | ## 通用Map
6 |
7 | | 类型 | 特征 | key | 并发安全 |
8 | |:---|:---|:---|:---|
9 | |HashMap | 链表和红黑树 | key和value均允许为空 | 否 |
10 | |Hashtable | 单线程写入 | key和value的值均不允许为null | 是 |
11 | |Properties | Hashtable 子类 | | 是 |
12 | |LinkedHashMap | 保持了数据插入顺序 | key和value均允许为空 | 否 |
13 | |IdentityHashMap | key非equals比较而是 == 比较 | key和value均允许为空 | 否 |
14 | |TreeMap | 红黑树实现 | key不允许null | 否|
15 | |WeakHashMap | key 弱引用 | | 否 |
16 | |ThreadLocalMap | ThreadLocal, key 弱引用 | | 否 |
17 | |ConcurrentHashMap | 分段锁 | | 是 |
18 |
19 | > IdentityHashMap
20 | - java.util.HashMap#getNode `equals`
21 | - java.util.IdentityHashMap#get `==`
22 |
23 | ## 专用Map
24 |
25 | - java.util.jar.Attributes
26 | - javax.print.attribute.standard.PrinterStateReasons
27 | - java.security.Provider
28 | - java.awt.RenderingHints
29 | - javax.swing.UIDefaults
30 |
31 | ## 第三方
32 | > [NonBlockingHashMap](https://github.com/h2oai/h2o-3/blob/master/h2o-core/src/main/java/water/nbhm/NonBlockingHashMap.java)
33 |
--------------------------------------------------------------------------------
/Java/Collection/Map/TreeMap.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: TreeMap
3 | date: 2019-04-16 15:53:31
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [TreeMap](#treemap)
11 |
12 | 💠 2024-08-28 10:59:31
13 | ****************************************
14 | # TreeMap
15 | > [参考: 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现](https://www.ibm.com/developerworks/cn/java/j-lo-tree/index.html)
16 | > [参考: TreeMap详细介绍(源码解析)和使用示例](http://www.cnblogs.com/skywang12345/p/3310928.html)
17 |
18 | > [聊聊 HashMap 和 TreeMap 的内部结构](http://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247488637&idx=3&sn=ee2d6e2101368a424b6a485f0d644e1a&chksm=9bed350fac9abc1954d704d9b94edf805ef56ce82e3a99f6f316c899de1dc6f06722d7927eb5&mpshare=1&scene=1&srcid=&sharer_sharetime=1586600321631&sharer_shareid=246c4b52c1cb45eaa580c985c95107f3#rd)
19 |
20 | > [TreeMap in Java: A Must-Know Data Structure ](https://igorstechnoclub.com/java-treemap/)
21 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Dubbo/Dubbo.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dubbo
3 | date: 2019-05-09 16:47:23
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [Dubbo](#dubbo)
12 | 1. [SPI](#spi)
13 | 1. [Tips](#tips)
14 |
15 | **目录 end**|_2020-10-12 14:58_|
16 | ****************************************
17 | # Dubbo
18 | > [Official Doc](http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) | [Github](https://github.com/apache/incubator-dubbo)
19 | > [Sample](https://github.com/apache/incubator-dubbo-samples)
20 |
21 | RegistryService 通过查看 Type Hierarchy 可以看到所有 Dubbo 支持的注册中心
22 |
23 | ## SPI
24 | [META-INF 目录结构](https://docs.oracle.com/en/java/javase/11/docs/specs/jar/jar.html#the-meta-inf-directory)
25 |
26 |
27 | ## Tips
28 | > SpringBoot 整合 Dubbo 使用 XML 方式 只需在Configuration注解类上引入 dubbo 配置文件 例如 引入 dubbo目录下的配置文件 `@ImportResource({"classpath:dubbo/*.xml"})`
29 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Dubbo/MulticaseRegistry.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MulticaseRegistry
3 | date: 2019-05-09 20:31:03
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Dubbo 的 Multicast 实现](#dubbo-的-multicast-实现)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # Dubbo 的 Multicast 实现
15 | > [参考: Dubbo Multicast 注册中心即相关代码实现](http://www.cnblogs.com/ghj1976/p/5328376.html)
16 |
17 | - 通过 wireshark 抓包, 可以看到大致的流程
18 | - provider 或者 customer 都是先 register 然后 subscribe
19 |
20 | ```
21 | register dubbo://UUUU?application=first-dubbo-provider
22 |
23 | subscribe provider://UUUU?application=first-dubbo-provider&bind.ip=172.17.0.1&bind.port=20880&category=configurators&check=false
24 |
25 | * register consumer://172.17.0.1/org.apache.dubbo.samples.api.GreetingsService?application=first-dubbo-consumer&category=consumers&check=false&default.generic=false&dubbo=2.0.2&generic=false&interface=org.apache.dubbo.samples.api.GreetingsService&methods=sayHi&pid=27381&release=2.7.0&side=consumer×tamp=1557386946272
26 |
27 | * subscribe consumer://172.17.0.1/org.apache.dubbo.samples.api.GreetingsService?application=first-dubbo-consumer&category=providers,configurators,routers&default.generic=false&dubbo=2.0.2&generic=false&interface=org.apache.dubbo.samples.api.GreetingsService&methods=sayHi&pid=27381&release=2.7.0&side=consumer×tamp=1557386946272
28 |
29 | // provider 进程开始停止
30 |
31 | unregister dubbo://UUUU?application=first-dubbo-provider
32 |
33 | unregister provider://UUUU?application=first-dubbo-provider&bind.ip=172.17.0.1&bind.port=20880&category=configurators&check=false
34 |
35 | unsubscribe provider://UUUU?application=first-dubbo-provider&bind.ip=172.17.0.1&bind.port=20880&category=configurators&check=false
36 |
37 | unregister dubbo://UUUU?application=first-dubbo-provider
38 |
39 | unregister provider://UUUU?application=first-dubbo-provider&bind.ip=172.17.0.1&bind.port=20880&category=configurators&check=false
40 |
41 | unsubscribe provider://UUUU?application=first-dubbo-provider&bind.ip=172.17.0.1&bind.port=20880&category=configurators&check=false
42 | ```
43 | > UUU表示 172.17.0.1:20880/org.apache.dubbo.samples.api.GreetingsService
44 | > * 是customer, 其他的是 provider
45 |
46 |
--------------------------------------------------------------------------------
/Java/Ecosystem/JPA.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JPA
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [JPA](#jpa)
11 | 1. [JPA和Mybatis](#jpa和mybatis)
12 | 1. [配置](#配置)
13 | 1. [使用](#使用)
14 | 1. [注解](#注解)
15 |
16 | **目录 end**|_2020-06-28 02:11_|
17 | ****************************************
18 | # JPA
19 | ## JPA和Mybatis
20 | > [技术专题讨论第二期总结:如何对 JPA 或者 MyBatis 进行技术选型](http://www.spring4all.com/article/391)
21 |
22 | ## 配置
23 |
24 | ## 使用
25 |
26 | > [参考: spring boot(五):spring data jpa的使用](https://www.cnblogs.com/ityouknow/p/5891443.html)
27 | ### 注解
28 | > [Java、Hibernate(JPA)注解大全](http://www.cnblogs.com/zr520/p/5003478.html)
29 | > [jpa注解大全](http://www.cnblogs.com/cxyzl/archive/2012/12/05/2803548.html)
30 | > [Spring Data JPA 入门系列](http://www.spring4all.com/article/500)
31 |
32 |
33 |
--------------------------------------------------------------------------------
/Java/Ecosystem/JavaBoot.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java快速开发框架
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | - Java
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [关于Java的快速开发框架](#关于java的快速开发框架)
12 | - 1.1. [Springboot](#springboot)
13 | - 1.2. [Jboot](#jboot)
14 | - 1.3. [NuzBoot](#nuzboot)
15 | - 1.4. [OpenLiberty](#openliberty)
16 | - 1.5. [ActiveJ](#activej)
17 |
18 | 💠 2024-04-22 00:47:57
19 | ****************************************
20 | # 关于Java的快速开发框架
21 |
22 | ## Springboot
23 | > 基于Spring
24 |
25 | ## Jboot
26 | > 基于JFinal
27 |
28 | ## NuzBoot
29 |
30 | ## OpenLiberty
31 | [Github](https://github.com/OpenLiberty)
32 |
33 | ## ActiveJ
34 | [Github](https://github.com/activej/activej)
35 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Netty/NettyDesign.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: NettyDesign
3 | date: 2024-06-16 16:48:43
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Netty Design](#netty-design)
11 | - 1.1. [线程模型](#线程模型)
12 | - 1.2. [内存设计](#内存设计)
13 |
14 | 💠 2024-09-09 10:22:38
15 | ****************************************
16 | # Netty Design
17 | > [Netty序章之BIO NIO AIO演变](https://segmentfault.com/a/1190000012976683)
18 |
19 | > [ 大白话聊聊Netty ](https://mp.weixin.qq.com/s?__biz=MzIzOTU0NTQ0MA==&mid=2247538543&idx=1&sn=bc9d1575e21b42f215cf61e0a9da264e&scene=58&subscene=0)
20 | > [Netty 实战(精髓)](https://github.com/waylau/essential-netty-in-action)
21 |
22 | > 源码解读
23 | > [官方Demo](https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example)
24 | > [Netty实战配套源码](https://github.com/ReactivePlatform/netty-in-action-cn)
25 | > [Netty权威指南2 源码](https://github.com/Kuangcp/NettyBook2)
26 |
27 | ## 线程模型
28 | [主次Reactor多线程模型](/Skills/CS/IO.md#reactor)
29 |
30 | > Netty
31 | 
32 |
33 | > [参考: 从线程模型的角度看 Netty 为什么是高性能的? ](https://crossoverjie.top/2018/07/04/netty/Netty(2)Thread-model/)
34 |
35 |
36 | ## 内存设计
37 |
38 | > 直接内存
39 |
40 | - -Dio.netty.noPreferDirect 是否运行通过底层api直接访问直接内存,默认:允许
41 | - -Dio.netty.noUnsafe 是否允许使用sun.misc.Unsafe,默认:允许
42 | - -Dio.netty.maxDirectMemory 设置最大值
43 |
44 | ************************
45 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Netty/Readme.md:
--------------------------------------------------------------------------------
1 | # Netty
2 | > [Trustlin](https://github.com/trustin) `Netty Mina 的作者`
3 |
4 | Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
5 |
6 | > [Netty4.x官方文档](http://netty.io/wiki/user-guide-for-4.x.html)
7 | > [Netty权威指南](https://javablog.net/book/3/netty-authoritative-guide.html)
8 |
9 | > [Netty 实战(精髓)](https://klose911.github.io/html/netty/netty.html)
10 | > [《Netty 实战》 Netty In Action 中文版](https://github.com/ReactivePlatform/netty-in-action-cn)
11 |
12 | ************************
13 |
14 | > [手淘、微博一直钟情的 Netty框架是个什么鬼?](https://yq.aliyun.com/roundtable/53346)
15 | > [对于Netty的十一个疑问 ](https://news.cnblogs.com/n/205413/)
16 | > [知乎: 通俗地讲,Netty 能做什么?](https://www.zhihu.com/question/24322387)
17 | > [为什么选择Netty作为基础通信组件? ](https://my.oschina.net/zhaky/blog/760469)
18 |
19 | RocketMQ、Elasticsearch、gRPC、Apache Dubbo、Spring5、HSF、 Zookeeper、Spark、Hadoop等等 的网络层均使用到Netty。
20 |
21 | > 常见优势
22 |
23 | 开发门槛低:API 使用简单;
24 | 定制能力强:可以通过 ChannelHandler对通信框架进行灵活地扩展;
25 | Handler强大:预置了多种编解码器,支持多种主流协议,对传输中粘包和拆包有现成解决方案,有完善的断连,idle(心跳检测)等异常处理;
26 | 高性能:与其他业界主流的 NIO 框架对比,Netty 的综合性能最优;
27 | 社区活跃,版本迭代周期短,发现的 BUG 可以被及时修复,同时更多的新功能会加入;经历了大规模的商业应用考验,质量有验证;
28 |
29 | > 实践
30 |
31 | 1. Tomcat 也有web连接组件 和 Netty 做的事情是类似的,是否可以替代?
32 |
--------------------------------------------------------------------------------
/Java/Ecosystem/POI.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: POI
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [POI](#poi)
11 | - 1.1. [Excel](#excel)
12 | - 1.2. [Word](#word)
13 | - 1.3. [二次开发项目](#二次开发项目)
14 | - 1.3.1. [Easy excel](#easy-excel)
15 |
16 | 💠 2025-01-16 16:26:11
17 | ****************************************
18 |
19 | # POI
20 | > Java 操作 Excel Word
21 |
22 | > [How to Read, Write XLSX File in Java - Apache POI Example | Java67](https://www.java67.com/2014/09/how-to-read-write-xlsx-file-in-java-apache-poi-example.html#)
23 |
24 | ## Excel
25 | > [Generate Excel With POI With Most Optimized Way | by Atul Zambre | Medium](https://medium.com/@atul.zambre123/generate-excel-with-poi-with-most-optimized-way-5468fea37ad9)
26 |
27 |
28 | ## Word
29 | > [参考: POI 操作word](http://blog.csdn.net/j_a_d_e/article/details/53945288)
30 |
31 | ## 二次开发项目
32 | - [easypoi](https://gitee.com/lemur/easypoi) `虽然代码不是很规范但是开源精神要学习`
33 |
34 | ### Easy excel
35 | > [Github](https://github.com/alibaba/easyexcel)
36 |
--------------------------------------------------------------------------------
/Java/Ecosystem/QueryDSL.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Querydsl
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [QueryDSL](#querydsl)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # QueryDSL
15 | > [Github 地址](https://github.com/querydsl/querydsl) | [最新文档地址](http://www.querydsl.com/static/querydsl/latest/reference/html/)
16 |
17 | > Querydsl 是一个通用的查询框架, 专注于通过Java API构建类型安全的SQL查询。
18 | > Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句,也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架。
19 | > 借助QueryDSL可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前QueryDSL支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。
20 |
21 |
--------------------------------------------------------------------------------
/Java/Ecosystem/README.md:
--------------------------------------------------------------------------------
1 | # 生态
2 |
3 | > [参考: 除了Guava,Java开发者还值得了解的5个谷歌类库](http://www.techug.com/post/forget-guava-5-google-libraries-java-developers.html)
4 | `Guice ErrorProne Truth Kythe Protobuf`
5 |
6 | - [ ] canal
7 |
8 |
9 | - [Hibernate](/Java/Ecosystem/Hibernate.md) | [Mybatis](/Java/Ecosystem/Mybatis.md) 对比
10 | - 有些设计思想是一致的,一二级缓存, Mybatis可以灵活自定义SQL,Hibernate也是可以的,相较现在这种分布式的环境下,单表操作两者没什么区别
11 | - 在Hibernate基础之上的[JPA](/Java/Ecosystem/JPA.md)能更简化开发, 在需要写复杂SQL的时候也是可以自定义的
12 | - 而且很多功能实际上用处不大了,一二级缓存,一对一一对多这样的映射 等等功能。缓存通常会交给分布式缓存实现,不会给表配置外键(为了性能以及避免频繁的死锁)
13 | - 参考:数据库的诸多设计,账号,权限,约束,触发器,都是为 C/S 结构设计的,是以 C 端不可信做为假设前提的。B/S 模式安全边界前移到 web 服务层,应用与数据库之间是可信的,应用自行完成这些功能更加灵活。所以能不用就不用 [大家设计数据库时使用外键吗?](https://www.zhihu.com/question/19600081)
14 |
15 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Scheduler/Readme.md:
--------------------------------------------------------------------------------
1 | # Scheduler
2 |
3 | [xxl-job](https://github.com/xuxueli/xxl-job)
4 | [quartz](https://github.com/quartz-scheduler/quartz)
5 | [db-scheduler](https://github.com/kagkarlsson/db-scheduler)
6 |
7 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Servlet/Jetty.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Jetty
3 | date: 2024-06-12 10:01:19
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Jetty](#jetty)
11 | - 1.1. [配置](#配置)
12 |
13 | 💠 2024-06-12 10:01:44
14 | ****************************************
15 | # Jetty
16 |
17 | > [Jetty官网](http://www.eclipse.org/jetty/)
18 | > [jetty-examples](https://github.com/jetty/jetty-examples)
19 |
20 |
21 | [参考: Jetty使用教程(一)——开始使用Jetty ](http://www.cnblogs.com/yiwangzhibujian/p/5832597.html)
22 |
23 | ## 配置
24 | > [相关](http://zetcode.com/java/jetty/logging/) 自身log配置
25 |
26 | _resources/jetty-logging.properties_ 内容如下开启DEBUG
27 | ```conf
28 | org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StrErrLog
29 | org.eclipse.jetty.LEVEL=DEBUG
30 | jetty.logs=logs
31 | ```
32 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Servlet/JettyDesign.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JettyDesign
3 | date: 2024-06-15 11:01:15
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Jetty Design](#jetty-design)
11 | - 1.1. [宏观架构](#宏观架构)
12 | - 1.2. [线程模型](#线程模型)
13 |
14 | 💠 2024-06-15 11:05:37
15 | ****************************************
16 | # Jetty Design
17 | > [Github: Jetty](https://github.com/jetty/jetty.project)
18 |
19 | ## 宏观架构
20 |
21 | ## 线程模型
22 |
23 | 从抽象来看三者关系如下
24 |
25 | 
26 |
27 | 但是由 ExecutionStrategy接口的实现来提供三者在运行时的多种组合方式 [strategy源码](https://github.com/jetty/jetty.project/tree/jetty-12.0.x/jetty-core/jetty-util/src/main/java/org/eclipse/jetty/util/thread/strategy)
28 |
29 | > ProduceConsume
30 |
31 | 一个线程顺序读请求和执行业务,即所有IO数据处理Connector和Handler 用的是一个线程(线程池里只有一个线程),实际上缺点很明显吞吐量不高
32 |
33 | > ProduceExecuteConsume
34 |
35 | 一个线程顺序读,线程池执行业务,类似于单Reactor多线程模型。
36 |
37 | > ExecuteProduceConsume
38 |
39 | 相较于传统的[NIO Reactor](/Skills/CS/IO.md#Reactor)多Reactor多线程模型,主要的区别是 Connector和Handler在一个事件触发后是在同一个线程执行。
40 | 好处是IO接收的数据无需传递和线程上下文切换,充分利用CPU缓存,弊端是如果业务逻辑Handler阻塞或CPU计算消耗很长时间就会快速耗尽线程池线程,然后导致Connetcor没有线程资源执行,从而引发请求积压和拒绝。
41 |
42 | ************************
43 |
44 | Jetty实际运行时采用的是 EatWhatYouKill 策略, 线程池线程充足时采用ExecuteProduceConsume和低线程资源时采用ProduceExecuteConsume,为了避免低线程资源情况时的请求拒绝问题,将请求积压起来等线程池平稳的消费执行完。
45 |
46 |
47 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Servlet/Readme.md:
--------------------------------------------------------------------------------
1 | # Servlet容器
2 | > [Comparing Embedded Servlet Containers in Spring Boot](https://www.baeldung.com/spring-boot-servlet-containers)
3 |
4 | ## Tomcat
5 | > 更多查看 `Tomcat那些事儿` 公众号
6 | > [Tomcat目录部署与Context描述文件context.xml ](https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650859355&idx=1&sn=2122baf040ae337dba90201a48b4e11c&chksm=f1329888c645119eec4473e11beaf988c48ce02c52151502086595de59b65dd4bd7cf129530e&scene=21#wechat_redirect)
7 | > | [Tomcat配置文件解析与Digester](https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650859293&idx=1&sn=3c017b2675bb59fda8ae037b7a1e6cb4&chksm=f13298cec64511d8183a23f1b3110bc6b65e8742c6e76391a51c552d86c0bc81a34fab8d0a60&scene=21#wechat_redirect)
8 | > | [Servlet到底是单例还是多例你了解吗?](https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=401278436&idx=1&sn=7d28750b7cff1f706efb82c7fcaa73c5&scene=21#wechat_redirect)
9 | > | [Tomcat类加载器以及应用间class隔离与共享 ](https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650859298&idx=1&sn=8856375f2268fc33a6bb3fbc6932eca7&chksm=f13298f1c64511e77ef1d77d28272840ca56f62da6e11928c78827e8ec53f937f812a4b49aa0&scene=21#wechat_redirect)
10 | > | [啥,Tomcat里竟然还有特权应用? ](https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650859476&idx=1&sn=8be7a37b59a5d167998f6695a1606d39&chksm=f1329807c6451111d2a1c379221655dc87dd105b067f894bfb202d1f9f283bad310a5cdc2277&scene=21#wechat_redirect)
11 | > | [你了解JMX在Tomcat的应用吗?](https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=401135587&idx=1&sn=610950fda2eceb3683a9fe45078f1a83&scene=21#wechat_redirect)
12 |
13 | ************************
14 |
15 | > [参考: Jetty和Tomcat的选择:按场景而定](http://www.open-open.com/lib/view/open1322622094390.html)
16 | > [详解web容器 - Jetty与Tomcat孰强孰弱](https://developer.aliyun.com/article/441105)
17 |
18 | ```
19 | 一个简单项目, 就是index.jsp 里面放了个 Hello 字符串
20 | 经过对比 8.5.29 jetty 9.2
21 | 启动时间 jetty花费时间是Tomcat2倍
22 | 启动后内存 Jetty480M Tomcat300M
23 | 1000并发 20000总量
24 | Tomcat涨到 460M 第二次480M 连续5次后上660M了 10次900M 最长时间时而220ms 时而 70ms
25 | Jetty涨到770M 第二次压测直接上900M了 十次后也是900M 最长响应时间稳定在 220ms
26 | ```
27 |
28 | ## Undertow
29 | > [Official Site](http://undertow.io/)
30 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Servlet/Servlet.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Servlet
3 | date: 2024-06-12 09:59:36
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Servlet](#servlet)
11 | - 1.1. [Web容器和Web服务器](#web容器和web服务器)
12 |
13 | 💠 2024-06-12 10:01:44
14 | ****************************************
15 | # Servlet
16 | > [wiki: Jakarta Servlet](https://en.wikipedia.org/wiki/Jakarta_Servlet)
17 |
18 |
19 | - Servlet(Server Applet),全称 Java Servlet,未有中文译文。是用 Java 编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。
20 | - 狭义的 Servlet 是指 Java 语言实现的一个接口, 广义的 Servlet 是指任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。
21 | - Servlet 运行于支持 Java 的应用服务器中。从实现上讲,Servlet 可以响应任何类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。
22 |
23 | ## Web容器和Web服务器
24 | > Web容器
25 |
26 | `何为容器:`
27 | 容器是一种服务调用规范框架,J2EE 大量运用了容器和组件技术来构建分层的企业级应用。在 J2EE 规范中,相应的有 WEB Container 和 EJB Container 等。
28 |
29 | - WEB 容器给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET 直接跟容器中的环境变量交互,不必关注其它系统问题
30 | - (从这个角度来说,web 容器应该属于架构上的概念)。web 容器主要由 WEB 服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。
31 | - 若容器提供的接口严格遵守 J2EE 规范中的 WEB APPLICATION 标准。我们把该容器叫做 J2EE 中的 WEB 容器。
32 | - WEB 容器更多的是跟基于 HTTP 的请求打交道。而 EJB 容器不是。它是更多的跟数据库、其它服务打交道。
33 | - 容器的行为是 将其内部的应用程序组件与外界的通信协议交互进行了隔离,从而减轻内部应用程序组件的负担(实现方面的负担?)。
34 | - 例如:SERVLET 不用关心 HTTP 的细节,而是直接引用环境变量 session、request、response 就行、EJB 不用关心数据库连接速度、各种事务控制,直接由容器来完成。
35 |
36 | > Web服务器
37 | - Web 服务器(Web Server)可以处理 HTTP 协议。当 Web 服务器接收到一个 HTTP 请求,会返回一个 HTTP 响应,例如送回一个 HTML 页面。
38 | - Web 服务器可以响应针对静态页面或图片的请求, 进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序
39 | - 例如 CGI 脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端 JavaScript,或者一些其它的服务器端技术。
40 | - Web 服务器仅仅提供一个可以执行服务器端程序和返回(程序所产生的)响应的环境,而不会超出职能范围。
41 | - Web 服务器主要是处理需要向浏览器发送 HTML 的请求以供浏览。
42 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Solr.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Solr
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Solr](#solr)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # Solr
15 |
16 | > [参考: 用容器快速上手Apache Solr](http://qinghua.github.io/solr/)
17 |
--------------------------------------------------------------------------------
/Java/Ecosystem/Vertx.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Vertx
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Vert.x](#vertx)
11 |
12 | **目录 end**|_2020-06-24 02:06_|
13 | ****************************************
14 | # Vert.x
15 |
16 | > [参考: 用惯了高大上SpringBoot不妨试试小清新Vert.x](https://segmentfault.com/a/1190000011763020)
17 | [参考: 基于Vert.x和SpringBoot实现响应式开发](http://www.jdon.com/47806)
18 | [参考: Vert.x开发指南](http://blog.csdn.net/chszs/article/details/8949559)
19 | [使用Vertx构建微服务](http://www.cnblogs.com/luxiaoxun/p/7693640.html)
20 |
--------------------------------------------------------------------------------
/Java/Ecosystem/WebFramework.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: WebFramework
3 | date: 2024-09-20 11:23:07
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Web框架](#web框架)
11 | - 1.1. [Blade EOL](#blade-eol)
12 |
13 | 💠 2024-09-20 11:52:03
14 | ****************************************
15 | # Web框架
16 | > [minum](https://github.com/byronka/minum)
17 | > [bootique](https://github.com/bootique/bootique)`类似框架`
18 | > [solon](https://github.com/opensolon/solon)
19 |
20 | ## Blade EOL
21 | > [Blade项目首页](https://lets-blade.github.io/) | [Github 地址](https://github.com/lets-blade/blade) | [官方 demos](https://github.com/lets-blade/blade-demos)
22 |
23 | > [参考: Blade:一款简洁优雅、微内核设计的Java Web框架](http://hao.jobbole.com/bladejava/)
24 |
--------------------------------------------------------------------------------
/Java/Ecosystem/http/OKHTTP.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: OKHTTP
3 | date: 2024-02-02 14:22:14
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [OKHTTP](#okhttp)
11 |
12 | 💠 2024-06-17 19:57:32
13 | ****************************************
14 | # OKHTTP
15 | > [Official Site](https://square.github.io/okhttp/)
16 |
17 | https://square.github.io/okhttp/
18 | https://square.github.io/okhttp/calls/
19 | https://blog.csdn.net/sinat_36553913/article/details/104054028
20 | https://blog.csdn.net/sinat_36553913/article/details/104054160
21 | https://www.jianshu.com/p/da5c303d1df4?tdsourcetag=s_pcqq_aiomsg
22 | https://blog.csdn.net/hdu2013/article/details/109229625
23 | https://zhuanlan.zhihu.com/p/116777864
24 |
25 | https://www.jianshu.com/p/f038d2438fcf
26 | https://www.jianshu.com/p/132733115f95
27 |
28 | https://www.jianshu.com/p/d7eced552553
29 |
30 | > 核心源码流程
31 | - okhttp3.Dispatcher 异步请求调度
32 | - okhttp3.internal.connection.RealConnectionPool TCP连接池
33 | - okhttp3.ConnectionPool
34 |
--------------------------------------------------------------------------------
/Java/GUI/JavaFX.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JavaFX
3 | date: 2024-11-14 16:30:00
4 | tags:
5 | - GUI
6 | categories:
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [JavaFX](#javafx)
12 |
13 | 💠 2024-11-18 14:31:55
14 | ****************************************
15 | # JavaFX
16 | > [OpenJFX](https://wiki.openjdk.java.net/display/OpenJFX) | [official site](https://openjfx.io)
17 |
18 | > [JavaFX Tutorial](https://jenkov.com/tutorials/javafx/index.html)
19 | - [xJavaFxTool](https://gitee.com/xwintop/xJavaFxTool)`基于JavaFX的工具集`
20 | - [Adding HTML Content to JavaFX Applications](https://docs.oracle.com/javafx/2/webview/jfxpub-webview.htm)
21 |
22 | ************************
23 |
24 | > [jjenkov/javafx-examples](https://github.com/jjenkov/javafx-examples)
25 |
26 | 1. 下载对应系统的SDK,不是jmod[JavaFX - Gluon](https://gluonhq.com/products/javafx/)
27 | 1. IDE中调试时增加对应JVM参数 --module-path /path/to/javafx-sdk-17.0.13/lib/ --add-modules=javafx.controls,javafx.fxml
28 | 1. [Maven 插件配置打包单个可执行Jar](/Java/Tool/Maven.md#assembly)
29 | 1. 运行: java --module-path /path/to/javafx-sdk-17.0.13/lib/ --add-modules=javafx.controls,javafx.fxml -jar target/javafx-examples-0.0.1-SNAPSHOT.jar
30 |
--------------------------------------------------------------------------------
/Java/MSA/Quarkus.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Quarkus
3 | date: 2024-09-03 21:27:16
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Quarkus](#quarkus)
12 |
13 | 💠 2024-09-03 21:27:16
14 | ****************************************
15 | # Quarkus
16 |
17 | > [Get Started](https://quarkus.io/get-started/)
18 |
19 | > [A Guide to Micrometer in Quarkus](https://www.baeldung.com/quarkus-micrometer)
20 | > [Observability in Quarkus 3](https://quarkus.io/blog/quarkus-observability-3-3/)
21 |
22 |
--------------------------------------------------------------------------------
/Java/MSA/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Java平台的微服务
3 | date: 2020-03-27 15:27:30
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Java上的微服务](#java上的微服务)
11 |
12 | **目录 end**|_2020-03-27 15:27_|
13 | ****************************************
14 | # Java平台的微服务
15 | > Dubbo 和 SpringCloud 的选择
16 |
17 | > [在 Docker 上运行一个 RESTful 风格的微服务](https://segmentfault.com/a/1190000002930500)
18 | > [参考: 链家网房源平台微服务架构实践 ](https://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=2650999401&idx=1&sn=5fde04f1b08309fb8efa0a87696e6838&chksm=bdbef23a8ac97b2ca4f7bd757b9032aae28022e8bd75784515297fe66f63fc14d2d61a4ecd68&mpshare=1&scene=1&srcid=11276sR0AJk0tgwlJRleKuaY#rd)
19 |
20 |
21 | > [APM](/Skills/Ecology/APM.md)
22 |
--------------------------------------------------------------------------------
/Java/README.md:
--------------------------------------------------------------------------------
1 | JavaReadme.md
--------------------------------------------------------------------------------
/Java/Spring/Cloud/Readme.md:
--------------------------------------------------------------------------------
1 | # SpringCloud
2 | > [SpringCloudLearning](https://github.com/forezp/SpringCloudLearning)
3 | > [参考: Spring Cloud 入门系列](http://www.spring4all.com/article/320)
4 |
5 | ## 集成docker
6 | > [boot in Alpine Linux](https://www.huangyunkun.com/2016/04/03/spring-boot-alpine-linux/)
7 | > [SpringBoot+Docker](https://yq.aliyun.com/articles/47344)
8 |
9 |
10 | - 基于此镜像构建小于Ubuntu`frolvlad/alpine-oraclejdk8:slim`
11 | - [maven 和 gradle两种集成](https://github.com/waylau/docker-demos)
12 |
13 | ## 微服务
14 | > [《Spring Cloud实战》一书的配套示例代码](https://github.com/dyc87112/SpringCloudBook)
15 | > [《Spring Cloud与Docker微服务架构实战》1-11章配套代码](https://github.com/itmuch/spring-cloud-docker-microservice-book-code)
16 | > [使用SpringBoot开启微服务之旅](http://www.infoq.com/cn/articles/Microservices-SpringBoot)
17 |
18 | ### 通信方式
19 | - [知乎:既然有http 请求,为什么还要用rpc调用?](https://www.zhihu.com/question/41609070)
20 |
21 |
--------------------------------------------------------------------------------
/Java/Spring/Cloud/SpringCloud-Gateway.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SpringCloud-Gateway
3 | date: 2023-10-10 16:32:15
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Spring Cloud Gateway](#spring-cloud-gateway)
11 | - 2. [Tips](#tips)
12 |
13 | 💠 2023-10-10 16:32
14 | ****************************************
15 | # Spring Cloud Gateway
16 | > [Official Doc](https://spring.io/projects/spring-cloud-gateway)
17 |
18 | ************************
19 |
20 | # Tips
21 | > [Persisting Spring Cloud Gateway Routes in Database](https://stackoverflow.com/questions/50810765/persisting-spring-cloud-gateway-routes-in-database)
22 |
23 |
--------------------------------------------------------------------------------
/Java/Spring/Flux/FluxConcept.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: FluxConcept
3 | date: 2025-01-07 09:56:23
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [WebFlux 设计概念](#webflux-设计概念)
12 |
13 | 💠 2025-01-07 09:56:23
14 | ****************************************
15 | # WebFlux 设计概念
16 |
17 |
--------------------------------------------------------------------------------
/Java/Spring/Flux/WebFlux.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: WebFlux
3 | date: 2024-03-14 21:17:01
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [WebFlux](#webflux)
11 |
12 | 💠 2024-03-14 21:28:14
13 | ****************************************
14 | # WebFlux
15 | > [Official Doc](https://docs.spring.io/spring-framework/reference/web/webflux.html)
16 |
17 | 相较于传统的SpringMVC框架体系,最大的区别在于全链路的无阻塞的事件驱动`注意数据库驱动层还不够阻塞驱动成熟`
18 |
19 | 
20 |
21 | 相关博客:
22 | > [webflux的探索与实战](https://juejin.cn/column/7024464332566036517)
23 | > [参考: 译:尝试使用Spring WebFlux](http://www.spring4all.com/article/1167)
24 |
25 |
--------------------------------------------------------------------------------
/Java/Spring/README.md:
--------------------------------------------------------------------------------
1 | # Spring
2 |
3 | - Spring5.md
4 | - SpringBoot2.md
5 | - SpringbootDatabase.md
6 | - SpringbootDemoCreate.md
7 | - SpringBoot.md
8 | - SpringCloud.md
9 | - Spring.md
10 | - SpringMessageQue.md `消息队列`
11 | - SpringMVC.md
12 | - SpringSecurity.md
13 | - SpringWebFlux.md
14 | - Transactional.md `事务处理`
15 |
16 | ## Springboot
17 |
18 | - [ ] 优化该目录
19 |
--------------------------------------------------------------------------------
/Java/Spring/SpringBoot3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SpringBoot3
3 | date: 2024-11-18 14:49:27
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [SpringBoot 3](#springboot-3)
11 |
12 | 💠 2024-12-24 10:16:38
13 | ****************************************
14 | # SpringBoot 3
15 | > [Spring Boot 3.0 Release Notes · spring-projects/spring-boot Wiki](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes)
16 |
17 | 1. JDK最低支持JDK17
18 | 1. Java EE相关包名变更 javax -> jakarta
19 | 1. httpclient5, hibernate, spring security
20 |
21 |
22 | CRaC
23 |
24 | > [Effective Scaling of Hot Application Instances with OpenJDK CRaC Help in Containers | Baeldung](https://www.baeldung.com/openjdk-crac-hot-application-instances-scaling)
25 |
--------------------------------------------------------------------------------
/Java/Spring/SpringTest.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SpringTest
3 | date: 2018-12-21 10:53:35
4 | tags:
5 | - Spring
6 | categories:
7 | - Java
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Spring Test](#spring-test)
13 | 1. [注解](#注解)
14 |
15 | **目录 end**|_2020-04-27 23:42_|
16 | ****************************************
17 | # Spring Test
18 |
19 | > [参考: Getting Started with Mockito @Mock, @Spy, @Captor and @InjectMocks](https://www.baeldung.com/mockito-annotations?utm_source=tuicool&utm_medium=referral)
20 | > [参考: Mockito – Using Spies](https://www.baeldung.com/mockito-spy)
21 |
22 | ## 注解
23 | - [ ] 学习
24 | 1. @MockBean
25 |
26 |
--------------------------------------------------------------------------------
/Java/Spring/Transactional.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Spring 事务
3 | date: 2018-12-21 10:54:05
4 | tags:
5 | - Spring
6 | categories:
7 | - Java
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Spring 事务](#spring-事务)
13 | - 1.1. [propagation](#propagation)
14 | - 1.2. [isolation](#isolation)
15 | - 1.3. [失效场景](#失效场景)
16 | - 1.4. [异常场景](#异常场景)
17 | - 1.5. [可编程事务管理](#可编程事务管理)
18 |
19 | 💠 2024-01-31 11:40:19
20 | ****************************************
21 | # Spring 事务
22 | > [Doc: Transaction Management](https://docs.spring.io/spring-framework/docs/5.2.x/spring-framework-reference/data-access.html#spring-data-tier)
23 |
24 | ## propagation
25 |
26 | ## isolation
27 |
28 | ************************
29 |
30 | > 事务 和 AOP 同时使用 顺序问题
31 |
32 | [Afterreturning 和 Transactional](https://stackoverflow.com/questions/39406242/afterreturning-aspect-executes-in-same-transaction-of-pointcut-method#)
33 |
34 | ## 失效场景
35 | > [一口气说出 6种,@Transactional注解的失效场景 ](https://juejin.cn/post/6844904096747503629)
36 |
37 | 1. 数据库引擎不支持事务,例如 MyISAM
38 | 1. 注解所在类没有进入IOC容器
39 | 1. 注解所在方法没有public修饰, 从反射和代理技术角度是可以实现非public代理,只是在规范上要求public修饰
40 | 1. 该方法在当前类被调用,AOP没有生效
41 | 1. 数据源没有加载事务管理器
42 | 1. propagation 设置不正确: PROPAGATION_SUPPORTS PROPAGATION_NOT_SUPPORTED PROPAGATION_NEVER
43 | 1. 异常被catch或者 rollbackFor 指定的类型不匹配(非自身且非子类)且该异常非RuntimeException和Error 子类
44 | - org.springframework.transaction.interceptor.RuleBasedTransactionAttribute#rollbackOn
45 | - org.springframework.transaction.interceptor.DefaultTransactionAttribute#rollbackOn
46 |
47 | ## 异常场景
48 | > 事务内语句 部分未回滚 部分失败
49 |
50 | 1. 使用 MySQL DML 和 DDL 混合使用 。`PG 支持DDL事务手动管理 MySQL的DDL会使用隐含事务不提供手动管理`
51 |
52 | ## 可编程事务管理
53 |
54 | - TransactionTemplate
55 | - TransactionOperator
56 | - TransactionManager
57 | - ReactiveTransactionManager
58 |
--------------------------------------------------------------------------------
/Java/Spring/Why/Readme.md:
--------------------------------------------------------------------------------
1 | # Spring的源码分析
2 | > [Spring Analysis](https://github.com/seaswalker/spring-analysis)
3 |
--------------------------------------------------------------------------------
/Java/Spring/img/001-druid.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/Spring/img/001-druid.webp
--------------------------------------------------------------------------------
/Java/Spring/img/002-druid.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/Spring/img/002-druid.webp
--------------------------------------------------------------------------------
/Java/Spring/img/003-druid.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/Spring/img/003-druid.webp
--------------------------------------------------------------------------------
/Java/Test/JMH.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JMH
3 | date: 2020-05-06 01:44:38
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [JMH](#jmh)
11 | - 1.1. [简易Demo](#简易demo)
12 | - 1.2. [最佳实践](#最佳实践)
13 |
14 | 💠 2024-02-22 14:23:17
15 | ****************************************
16 | # JMH
17 | > [Official Site](http://openjdk.java.net/projects/code-tools/jmh/)
18 |
19 | - [JMH 官方示例代码](http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/)
20 |
21 | > [Benchmark comparing serialization libraries on the JVM ](https://github.com/eishay/jvm-serializers)
22 |
23 | ## 简易Demo
24 | ```java
25 | @BenchmarkMode(Mode.Throughput)
26 | @Warmup(iterations = 5)
27 | @Measurement(iterations = 10, time = 1)
28 | @Threads(2)
29 | @OutputTimeUnit(TimeUnit.MILLISECONDS)
30 | class Target{
31 | @Benchmark
32 | public void max(){
33 |
34 | }
35 | }
36 |
37 | // 运行 JMH
38 | new Runner(new OptionsBuilder().include(Target.class.getSimpleName()).build()).run();
39 | ```
40 |
41 | ## 最佳实践
42 |
--------------------------------------------------------------------------------
/Java/Test/JavaCucumber.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JavaCucumber
3 | date: 2019-03-01 15:38:47
4 | tags:
5 | - 测试
6 | categories:
7 | - Java
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [JavaCucumber](#javacucumber)
13 |
14 | **目录 end**|_2020-04-27 23:42_|
15 | ****************************************
16 | # JavaCucumber
17 | > [Official Tutorial](https://docs.cucumber.io/guides/10-minute-tutorial/)
18 |
--------------------------------------------------------------------------------
/Java/Test/JavaHamcreset.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: JavaHamcreset
3 | date: 2019-03-01 15:38:47
4 | tags:
5 | - 测试
6 | categories:
7 | - Java
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [JavaHamcrest](#javahamcrest)
13 |
14 | **目录 end**|_2020-04-27 23:42_|
15 | ****************************************
16 | # JavaHamcrest
17 |
18 | > [Official Doc](http://hamcrest.org/JavaHamcrest/) | [Github](https://github.com/hamcrest/JavaHamcrest)
19 |
--------------------------------------------------------------------------------
/Java/Test/TestNG.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: TestNG
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - 测试
6 | - TestNG
7 | categories:
8 | - Java
9 | ---
10 |
11 | **目录 start**
12 |
13 | 1. [TestNG](#testng)
14 | 1. [使用](#使用)
15 | 1. [基本注解](#基本注解)
16 |
17 | **目录 end**|_2020-04-27 23:42_|
18 | ****************************************
19 | # TestNG
20 | > [Official Doc](http://testng.org/doc/documentation-main.html)
21 |
22 | > [易百: TestNG教程](https://www.yiibai.com/testng/)
23 | > [TestNG 入门教程](http://www.cnblogs.com/TankXiao/p/3888070.html)
24 | > [testNG官方文档](http://testng.org/doc/index.html) | [Github:TestNG](https://github.com/cbeust/testng)
25 | > [tools](http://toolsqa.com/selenium-webdriver/testng-introduction/)
26 |
27 | ## 使用
28 | > 基本使用
29 |
30 | **Gradle使用**
31 | ```groovy
32 | testCompile group: 'org.testng', name: 'testng', version: '6.14.3'
33 | ```
34 | 然后和Junit使用是一致的, 在方法上打上 @Test 注解即可运行, 注意Test注解的包为 `import org.testng.annotations.Test;`
35 |
36 | ### 基本注解
37 | 1. @Test
38 | - threadPoolSize
39 | - invocationCount
40 | - timeOut
41 | - invocationTimeOut
42 |
43 | > 测试方法中使用多线程, 和Junit是一致的, 只要主线程退出了, 其中创建的线程也会立即退出
44 | > 但是 TestNG 并行执行测试方法会更方便
45 |
46 |
--------------------------------------------------------------------------------
/Java/Tool/Eclipse.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Eclipse
3 | date: 2018-12-17 21:30:46
4 | tags:
5 | - Eclipse
6 | categories:
7 | - Java
8 | - IDE
9 | ---
10 |
11 | **目录 start**
12 |
13 | 1. [Eclipse](#eclipse)
14 | 1. [Mars](#mars)
15 | 1. [Eclipse Che](#eclipse-che)
16 | 1. [Install](#install)
17 |
18 | **目录 end**|_2020-06-04 19:41_|
19 | ****************************************
20 | # Eclipse
21 | ## Mars
22 |
23 | * 这里的Tomcat是使用了你所导入的必要执行文件,但是运行的必要配置文件在eclipse Server项目里另有一份
24 | * 而且运行时也是使用这份配置文件,这样的结果是可以使用一份Tomcat目录,在eclipse配置运行多个Tomcat
25 | * 但是奇怪的是 访问不了Tomcat主页即:localhost:8080 所以也就不能管理Tomcat 查看运行状态
26 |
27 | 资源下载 archive.eclipse.org/eclipse/downloads/
28 |
29 | *********************
30 |
31 | ## Eclipse Che
32 | > Next Generation IDE [Github](https://github.com/eclipse/che)|[Official Site](https://www.eclipse.org/che/)
33 |
34 | > [Quick Start](https://www.eclipse.org/che/docs/quick-start.html)
35 |
36 |
37 | ### Install
38 | > [Install By Docker](https://www.eclipse.org/che/docs/docker-single-user.html)
39 |
40 | - docker pull eclipse/che
41 | - docker run -ti -v /var/run/docker.sock:/var/run/docker.sock -v /home/kcp/App/eclipse/che:/data eclipse/che start
42 |
43 |
--------------------------------------------------------------------------------
/Java/Tool/Jacoco.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Jacoco
3 | date: 2018-12-17 21:27:14
4 | tags:
5 | - CI
6 | categories:
7 | - Java
8 | - Blog
9 | ---
10 | **目录 start**
11 |
12 | 1. [Jacoco](#jacoco)
13 | 1. [安装](#安装)
14 | 1. [Maven插件方式](#maven插件方式)
15 | 1. [Jenkins集成](#jenkins集成)
16 |
17 | **目录 end**|_2020-06-04 19:41_|
18 | ****************************************
19 |
20 | # Jacoco
21 | > 一款Java平台的代码覆盖率工具
22 |
23 | ## 安装
24 |
25 | ### Maven插件方式
26 | 1. 添加插件
27 |
28 | ```xml
29 |
30 | org.jacoco
31 | jacoco-maven-plugin
32 | 0.8.2
33 |
34 |
35 | prepare-agent
36 |
37 | prepare-agent
38 |
39 |
40 |
41 | report
42 | prepare-package
43 |
44 | report
45 |
46 |
47 |
48 | post-unit-test
49 | test
50 |
51 | report
52 |
53 |
54 |
55 | target/jacoco.exec
56 |
57 | target/jacoco-ut
58 |
59 |
60 |
61 |
62 |
63 |
64 | ```
65 |
66 | 2. 执行: `mvn test`
67 |
68 | ### Jenkins集成
69 | > [Official Doc](https://wiki.jenkins.io/display/JENKINS/JaCoCo+Plugin)
70 |
--------------------------------------------------------------------------------
/Java/Tool/MapStruct.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MapStruct
3 | date: 2021-05-17 00:27:57
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [MapStruct](#mapstruct)
11 |
12 | **目录 end**|_2021-05-17 00:27_|
13 | ****************************************
14 | # MapStruct
15 | > [Official Site](https://mapstruct.org/)
16 |
17 | 实现方式为 通过注解在编译期生成对应接口的实现类(模板代码 手动 get set) 到 target/generated-sources 目录下, 并将该目录加入 class-path
18 |
19 | 优点:
20 | - 生成get set 模板代码 性能好
21 |
22 | 缺点:
23 | - 类改动需要重新清空并编译,可能造成新加字段没有正常生成对应的 get set 代码
24 | - 集合属性的null值转换为 空List,Map等需要手动注解声明。
25 | - 泛型集合会自动做类型转换可能引发问题
26 |
--------------------------------------------------------------------------------
/Java/Tool/MavenAdvance.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Maven进阶
3 | date: 2018-12-20 10:25:45
4 | tags:
5 | - Maven
6 | - Advanced
7 | categories:
8 | - Java
9 | ---
10 |
11 | 💠
12 |
13 | - 1. [Maven Advance](#maven-advance)
14 | - 1.1. [Custom Maven plugin](#custom-maven-plugin)
15 | - 2. [Error](#error)
16 |
17 | 💠 2025-01-09 15:40:40
18 | ****************************************
19 | # Maven Advance
20 |
21 | ## Custom Maven plugin
22 |
23 | > [official doc](http://maven.apache.org/guides/mini/guide-configuring-plugins.html)
24 |
25 | > [github: maven plugin](https://github.com/search?q=maven+plugin)
26 |
27 | > [参考: custom plugin](https://javabeat.net/writing-a-custom-plugin-for-maven/)
28 |
29 |
30 | # Error
31 | > [macos - java.lang.IllegalArgumentException: Malformed \uxxxx encoding while mvn install - Stack Overflow](https://stackoverflow.com/questions/68003423/java-lang-illegalargumentexception-malformed-uxxxx-encoding-while-mvn-install)`本地依赖含特殊字符或损坏,导致mvn编译打包都受影响`
32 |
--------------------------------------------------------------------------------
/Java/Tool/img/image.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Java/Tool/img/image.webp
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Kuangcp
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/Linux/Base/LinuxDebug.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Linux上的调试
3 | date: 2020-12-23 16:07:56
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Linux上的调试](#linux上的调试)
11 | - 1.1. [strace](#strace)
12 | - 1.2. [radare2](#radare2)
13 |
14 | 💠 2024-05-19 23:35:07
15 | ****************************************
16 | # Linux上的调试
17 |
18 | > [参考: Linux调试工具](https://www.cnblogs.com/lidabo/p/4377545.html)
19 | > [参考: 在 Linux 上分析二进制文件的 10 种方法 ](https://linux.cn/article-12187-1.html)
20 |
21 | ## strace
22 | > [Github strace](https://github.com/strace/strace)
23 |
24 | - strace -p PID _查看系统调用_
25 |
26 | ## radare2
27 | > [Github](https://github.com/radareorg/radare2)
28 |
--------------------------------------------------------------------------------
/Linux/Base/LinuxManual.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Linux 命令手册
3 | date: 2018-12-15 11:15:10
4 | tags:
5 | - 基础
6 | categories:
7 | - Linux
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Linux Command Manual](#linux-command-manual)
13 |
14 | 💠 2024-09-05 11:52:54
15 | ****************************************
16 | # Linux Command Manual
17 |
18 | - man
19 | - troff
20 | - [pls](https://github.com/chenjiandongx/pls) `go 实现 终端man中文手册`
21 | - tldr
22 | - `Too Long, Don't Read`
23 | - [cheat](https://github.com/cheat/cheat)
24 |
--------------------------------------------------------------------------------
/Linux/Container/Helm.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Helm
3 | date: 2019-05-19 23:30:37
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Helm](#helm)
11 |
12 | **目录 end**|_2021-02-03 17:25_|
13 | ****************************************
14 | # Helm
15 | > [Github](https://github.com/helm/helm)
16 |
17 | > [参考: 利用 Helm 简化应用部署](https://help.aliyun.com/document_detail/58587.html)
18 |
--------------------------------------------------------------------------------
/Linux/Container/K3s.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: K3s
3 | date: 2023-10-26 00:19:02
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [K3s](#k3s)
11 | - 1.1. [安装&配置](#安装&配置)
12 | - 1.1.1. [单机安装](#单机安装)
13 |
14 | 💠 2023-10-26 00:19
15 | ****************************************
16 | # K3s
17 |
18 | ## 安装&配置
19 | ### 单机安装
20 | > [单机部署k3s](https://jasonkayzk.github.io/2022/10/21/%E5%8D%95%E6%9C%BA%E9%83%A8%E7%BD%B2k3s/)
21 |
22 | ```sh
23 | curl -sfL https://get.k3s.io | sh -
24 | # 国内使用镜像源加速
25 | curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
26 | ```
27 |
28 | - k3s 安装完成后会将 kubeconfig 文件写入到/etc/rancher/k3s/k3s.yaml,对于有多个集群的来说,需要配置这个;
29 | - 同时 K3S_TOKEN 会存在你的服务器节点上的/var/lib/rancher/k3s/server/node-token路径下;
30 | - 安装后会生成卸载脚本: `/usr/local/bin/k3s-uninstall.sh`
31 |
32 | > [k3s部署kuboard面板](https://www.cnblogs.com/sstu/p/16760138.html)
33 |
34 | 添加Dockerhub作为ImagePullSecret: server字段配置为 https://docker.io
--------------------------------------------------------------------------------
/Linux/Container/Podman.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Podman
3 | date: 2024-11-20 10:28:22
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Podman](#podman)
12 |
13 | 💠 2024-11-20 10:28:22
14 | ****************************************
15 | # Podman
16 | > [Podman](https://podman.io/)
17 |
18 | > [Podman vs Docker: What are the differences?](https://www.imaginarycloud.com/blog/podman-vs-docker)
19 |
20 | 无守护进程,可直接alias替换docker进行使用(兼容Docker)
21 |
22 |
--------------------------------------------------------------------------------
/Linux/Container/Readme.md:
--------------------------------------------------------------------------------
1 | # 容器化时代
2 | Docker创造性出世,利用cgroup namespace隔离提出了容器的概念,后续才发展出了丰富的体系。
3 |
4 | ## 规范
5 | > [The differences between Docker, containerd, CRI-O and runc | by Vineet Kumar | Medium](https://vineetcic.medium.com/the-differences-between-docker-containerd-cri-o-and-runc-a93ae4c9fdac)
6 | 
7 | 
8 |
9 | K8S后来者居上,建立CNCF [Cloud Native Computing Foundation](https://www.cncf.io/) 制定了一系列规范
10 |
11 | > Linux基金会建立的 OCI:[Open Container Initiative - Open Container Initiative](https://opencontainers.org/)
12 |
13 | OCI 分为镜像和容器 [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec) [OCI Image Format](https://github.com/opencontainers/image-spec)
14 | OCI标准的实现有 Docker Podman
15 |
--------------------------------------------------------------------------------
/Linux/Container/Vagrant.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Vagrant
3 | date: 2021-02-03 17:28:18
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Vagrant](#vagrant)
11 |
12 | **目录 end**|_2021-02-03 17:28_|
13 | ****************************************
14 | # Vagrant
15 | [Official](https://www.vagrantup.com)
16 |
17 | 基于虚拟化平台和描述性文件Vagrantfile 类似于 Dockerfile 实现开发环境完全一致(内核和操作系统级别)
18 |
--------------------------------------------------------------------------------
/Linux/Container/img/001-oci-k8s-docker.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Linux/Container/img/001-oci-k8s-docker.webp
--------------------------------------------------------------------------------
/Linux/Container/img/002-docker-run-arch.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Linux/Container/img/002-docker-run-arch.webp
--------------------------------------------------------------------------------
/Linux/DE/Gnome.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Gnome
3 | date: 2019-10-19 16:47:01
4 | tags:
5 | - 桌面环境
6 | categories:
7 | - Linux
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Gnome](#gnome)
13 |
14 | **目录 end**|_2022-09-14 13:34_|
15 | ****************************************
16 | # Gnome
17 | > [www.gnome-look.org](https://www.gnome-look.org/)
18 |
--------------------------------------------------------------------------------
/Linux/DE/KDE.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: KDE
3 | date: 2019-10-19 16:47:01
4 | tags:
5 | - 桌面环境
6 | categories:
7 | - Linux
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [KDE](#kde)
13 |
14 | **目录 end**|_2022-09-14 13:34_|
15 | ****************************************
16 | # KDE
17 |
--------------------------------------------------------------------------------
/Linux/DE/Xfce.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Xfce
3 | date: 2019-10-19 16:47:01
4 | tags:
5 | - 桌面环境
6 | categories:
7 | - Linux
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Xfce](#xfce)
13 | - 1.1. [Panel](#panel)
14 | - 1.1.1. [Plugin](#plugin)
15 | - 2. [Tips](#tips)
16 |
17 | 💠 2025-05-14 11:55:13
18 | ****************************************
19 | # Xfce
20 | > [www.xfce-look.org](https://www.xfce-look.org)
21 |
22 | 1. notify-send 发送新通知 [使用notify-send发送桌面通知](https://blog.csdn.net/lujun9972/article/details/53292620)
23 | - notify-send -i iconFilePath title detail -t 1500
24 | - -A
25 | - `notify-send Tips -A 1=Active -A 0=Reject` 消息弹窗带按钮(Active和Reject) 命令的返回是按钮的值 1或0
26 | - `notify-send Tips -A Active -A Reject` 不指定值默认返回下标,即返回0或1
27 | - -t 指定通知过期时长 单位s
28 | - -p 打印出通知的id
29 | - `-r id` 当前通知替换掉指定id的通知
30 |
31 | 1. xflock4 锁屏
32 | 1. zenity GTK实现,各种输入组件,弹窗提示
33 |
34 | [xfce4 install xrdp](https://learn.microsoft.com/en-us/azure/virtual-machines/linux/use-remote-desktop?tabs=azure-cli)
35 |
36 | ## Panel
37 |
38 | ### Plugin
39 | > [Xfce Panel Plugins How To](https://wiki.xfce.org/dev/howto/panel_plugins)
40 | > [Create my own panel plugin](https://askubuntu.com/questions/633952/create-my-own-panel-plugin-xubuntu)
41 |
42 | `可参考项目`
43 | > [xfce4-weather-plugin](https://gitlab.xfce.org/panel-plugins/xfce4-weather-plugin)
44 | > [xfce4-sensors-plugin](https://launchpad.net/ubuntu/+source/xfce4-sensors-plugin)
45 |
46 | # Tips
47 | 1. Dock相关软件 出现阴影 `Window Manager Tweaks -> Compositor -> 关闭 Show shadow under dock windows`
48 | 1. 键盘持续按键,延迟速度 Keyboard -> Behavior -> Repeat delay 调低延迟时间
49 |
--------------------------------------------------------------------------------
/Linux/Debian/Ubuntu.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Ubuntu
3 | date: 2018-12-15 11:30:32
4 | tags:
5 | - Ubuntu
6 | categories:
7 | - Linux
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Ubuntu](#ubuntu)
13 | 1. [Tips](#tips)
14 |
15 | **目录 end**|_2021-02-03 17:25_|
16 | ****************************************
17 |
18 | # Ubuntu
19 | > 很多人的入门系统, 作为个人服务器也是首选, 软件比较新
20 |
21 | > [Ubuntu Server Tutorial](https://tutorials.ubuntu.com/tutorial/tutorial-install-ubuntu-server#0) | [网易镜像源](http://mirrors.163.com/ubuntu-releases/)`只有网易有server版的镜像`
22 |
23 | ## Tips
24 |
25 | 1. 设置默认语言编码 `sudo dpkg-reconfigure locales`
26 | - 检查本机已有语言包 `locale -a`
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Linux/Light/Alpaquita.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Alpaquita
3 | date: 2024-12-24 10:16:38
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Alpaquita](#alpaquita)
12 |
13 | 💠 2024-12-24 10:16:38
14 | ****************************************
15 | # Alpaquita
16 |
17 | > [Alpine vs Alpaquita Linux: choosing a distro for enterprise cloud-native apps](https://bell-sw.com/blog/alpaquita-vs-alpine-a-head-to-head-comparison/)
18 |
19 | > [bellsoft/alpaquita-linux-base - Docker Image | Docker Hub](https://hub.docker.com/r/bellsoft/alpaquita-linux-base)
20 |
21 |
--------------------------------------------------------------------------------
/Linux/Light/Alpine.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Alpine基础
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - Alpine
6 | - 基础
7 | categories:
8 | - Linux
9 | ---
10 |
11 | 💠
12 |
13 | - 1. [Alpine](#alpine)
14 | - 1.1. [BusyBox](#busybox)
15 |
16 | 💠 2024-12-24 10:16:38
17 | ****************************************
18 | # Alpine
19 | > [Official Site](https://www.alpinelinux.org/)
20 |
21 | > 从K8S及应用层兼容考虑,都不推荐Alpine做基础镜像!
22 | > [是否适合用作Docker基础镜像](https://cloud.tencent.com/developer/article/1632733)
23 | > [Alpine Linux,一个只有 5M 的 Docker 镜像](https://www.infoq.cn/article/2016/01/Alpine-Linux-5M-Docker)
24 |
25 | - [Does Alpine have known DNS issue within Kubernetes?](https://stackoverflow.com/questions/65181012/does-alpine-have-known-dns-issue-within-kubernetes)
26 | - 优点是镜像很小 但是缺点是工具集和相关底层库实现和Ubuntu等主流发行版不一致,可能导致应用出现不一致情况,终端内的工具集也是不统一的
27 | - alpine 使用的musl 主流使用的glibc
28 | - 即使从优点来说 由于镜像底层的文件系统是多层,所以多次分发镜像时,基础镜像小也就没有了优势
29 |
30 | ## BusyBox
31 | > 里面各种工具命令能满足大部分需求, 但是命令参数,实现的功能都和原始的工具有差异,有裁剪
32 |
33 | - 真正的 ls 属于`coreutils`包
34 | - 真正的 ps 属于 `procps` 包
35 |
36 |
--------------------------------------------------------------------------------
/Linux/Light/Readme.md:
--------------------------------------------------------------------------------
1 | # 轻量级Linux
2 | 常用于容器化应用,降低发布的镜像大小,提高启动性能
3 |
--------------------------------------------------------------------------------
/Linux/LinuxReadme.md:
--------------------------------------------------------------------------------
1 | # Linux相关知识
2 |
3 | * [ Linux基础 ](/Linux/Base/LinuxBase.md)
4 | * [ Linux文件管理 ](/Linux/Base/LinuxFile.md)
5 | * [ Linux处理压缩文件 ](/Linux/Base/LinuxCompressFile.md)
6 | * [ Shell学习 ](/Script/ShellLearn.md)
7 | * [ Linux系统工具命令 ](/Linux/Base/LinuxCommand.md)
8 | * [ 高效的Linux ](/Linux/Base/EffectiveLinux.md)
9 | * [ Linux目录结构 ](/Linux/Base/LinuxDirectoryStructure.md)
10 | * [ Linux网络 ](/Linux/Base/LinuxNetwork.md)
11 | * [ Linux性能 ](/Linux/Base/LinuxPerformance.md)
12 | * [ 流编辑器 ](/Linux/Base/LinuxStreamEditor.md)
13 | * [ Linux美化 ](/Linux/Base/LinuxUI.md)
14 | * [ Linux各种发行版 ](/Linux/Base/ReleaseExperience.md)
15 | * [ SSH ](/Linux/Base/SSH.md)
16 | * [ Nginx ](/Linux/Tool/Nginx.md)
17 |
18 | ## 容器
19 | * [ Docker基础 ](/Linux/Container/Docker.md)
20 | * [ Docker进阶 ](/Linux/Container/DockerAdvance.md)
21 | * [ DockerFile ](/Linux/Container/DockerFile.md)
22 | * [ Docker与应用 ](/Linux/Container/DockerSoft.md)
23 |
24 | ## Blog
25 |
26 | - [Ubuntu放弃战斗, Linux桌面的悲哀](http://www.jianshu.com/p/86dd6e34ce91)`deepin王总`
27 | - [一些工具软件](https://bbs.deepin.org/forum.php?mod=viewthread&tid=134241&extra=)
28 | - [Ubuntu安装我的世界](https://www.linuxidc.com/Linux/2016-04/129764.htm)
29 |
--------------------------------------------------------------------------------
/Linux/Readme.md:
--------------------------------------------------------------------------------
1 | LinuxReadme.md
--------------------------------------------------------------------------------
/Linux/RedHat/CentosBase.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Centos
3 | date: 2018-12-15 11:24:04
4 | tags:
5 | - 基础
6 | - Centos
7 | categories:
8 | - Linux
9 | ---
10 |
11 | **目录 start**
12 |
13 | 1. [Centos](#centos)
14 | 1. [安装](#安装)
15 | 1. [docker安装](#docker安装)
16 | 1. [基础命令](#基础命令)
17 | 1. [用户管理](#用户管理)
18 | 1. [新增](#新增)
19 |
20 | **目录 end**|_2021-02-03 17:25_|
21 | ****************************************
22 | # Centos
23 | > 主流服务器
24 |
25 | ## 安装
26 | ### docker安装
27 | > [hub的官方镜像](hub.docker.com/_/centos/)
28 |
29 | - `docker pull centos` 得到镜像,然后跑起来即可
30 | - `cat /etc/redhat-release` 查看当前centos版本(适用于redhat centos) [参考博客](www.cnblogs.com/hitwtx/archive/2012/02/13/2349742.html)
31 |
32 | - docker 中 centos7systemctl命令失效的解决方案:
33 | - `docker run --name centos2 --privileged -ti -e "container=docker" -v /sys/fs/cgroup:/sys/fs/cgroup centos /usr/sbin/init`
34 |
35 | ## 基础命令
36 | > 采用的是yum rpm 管理包
37 |
38 | ## 用户管理
39 |
40 | ### 新增
41 | > 和Ubuntu类似, 但是adduser会新建用户并且建立home目录,而且没有废话的交互, ubuntu就有
42 |
43 | - `adduser kuang` 新增用户和对应目录
44 | - `passwd kuang` 修改密码 , 奇怪的是使用gpasswd更改成功但是无法登录
45 |
--------------------------------------------------------------------------------
/Linux/RedHat/Readme.md:
--------------------------------------------------------------------------------
1 | # Red Hat
2 |
3 | > [The Difference Between Fedora, Redhat, and CentOS](https://danielmiessler.com/study/fedora_redhat_centos/)
4 |
--------------------------------------------------------------------------------
/Linux/Tool/NginxAdvance.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: NginxAdvance
3 | date: 2021-02-03 17:28:26
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Nginx设计与实现](#nginx设计与实现)
11 |
12 | **目录 end**|_2021-02-03 17:28_|
13 | ****************************************
14 | # Nginx设计与实现
15 | - 《深入理解Nginx:模块开发与架构解析(第2版)》
16 | - 《Nginx高性能Web服务器详解》
17 |
18 | > [参考: Nginx从听说到学会](https://www.jianshu.com/p/630e2e1ca57f)
19 |
20 |
21 |
22 | > 参考 图 1
23 |
24 | Nginx 采用多进程设计(避免锁),使用master进程管理若干worker进程
25 | - master 进程管理(生命周期管理)多个worker进程,用于升级nginx,更新nginx配置等行为
26 | - worker 进程则处理真正的请求,且 worker 进程间会通过通信协调完成负载均衡
27 |
28 | ***
29 |
30 | > Nginx是事件驱动型的
31 | - 支持的常见事件驱动模型
32 | - select
33 | - poll
34 | - epoll
35 | - rtsig
36 |
37 | ***
38 |
39 | > 参考 图3
40 |
41 | 对于传统Web服务器而言,采用的所谓事件驱动往往局限在TCP连接建立、关闭事件上,一个连接建立以后,在其关闭之前的所有操作都不再是事件驱动,这时会退化成按序执行每个操作的批处理模式,这样每个请求在连接建立后都将始终占用着系统资源,直到连接关闭才会释放资源。
42 |
43 |
--------------------------------------------------------------------------------
/Linux/Tool/NginxIngress.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: NginxIngress
3 | date: 2023-09-27 19:08:28
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Nginx ingress](#nginx-ingress)
11 |
12 | **目录 end**|_2023-09-27 19:08_|
13 | ****************************************
14 | # Nginx ingress
15 | > [Github: ingress nginx](https://github.com/kubernetes/ingress-nginx)
16 | > [nginx-configuration: configmap](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/)
17 |
18 |
--------------------------------------------------------------------------------
/ML/Readme.md:
--------------------------------------------------------------------------------
1 | # Machine Learning
2 |
3 |
4 | - 线性模型: 线性回归,logistic回归
5 | - 时序模型:ARIMA,Prophet
6 | - 树模型:XGBoost, LightGBM
7 | - 深度学习模型:LSTM,Transformer
8 |
9 | [超参数调优](https://www.cvmart.net/community/detail/8044)
10 |
11 | > [doccano](https://github.com/doccano/doccano)`标注平台`
12 |
--------------------------------------------------------------------------------
/ML/Tree/DecisionTree.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: DecisionTree
3 | date: 2025-01-07 10:00:19
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [决策树](#决策树)
12 |
13 | 💠 2025-01-07 10:00:19
14 | ****************************************
15 | # 决策树
16 | > [机器学习——决策树模型](https://cloud.tencent.com/developer/article/2374508?areaId=106001)
17 | > [CART决策树原理(分类树与回归树)](https://cloud.tencent.com/developer/article/1813348)
18 |
19 |
--------------------------------------------------------------------------------
/ML/Tree/Readme.md:
--------------------------------------------------------------------------------
1 | # 树
2 |
3 | https://www.cnblogs.com/dogecheng/p/11588303.html
4 |
--------------------------------------------------------------------------------
/MyBlog/12306.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 12306
3 | date: 2019-01-13 18:01:46
4 | tags:
5 | categories:
6 | - Blog
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [12306](#12306)
12 | 1. [业务规则](#业务规则)
13 | 1. [技术难点](#技术难点)
14 | 1. [是否需要使用抢票软件](#是否需要使用抢票软件)
15 |
16 | **目录 end**|_2020-04-27 23:42_|
17 | ****************************************
18 | # 12306
19 |
20 | ## 业务规则
21 | 1. 票是分期 批量放票的
22 | 1. 全程票最后一段时间还会有保留, 短程票要时刻注意
23 | 1. 每个站的放票时间都是不一样的
24 |
25 | > 技巧
26 | 1. 热门城市的票会更难买, 多买或者少买几站有票几率可能更大
27 | 1. 错开出行高峰有利于买到票
28 | 1. 12306新上线的 候车补票功能
29 | 1.
30 |
31 | ## 技术难点
32 |
33 |
34 | ## 是否需要使用抢票软件
35 | > 抢票软件具有一定的能力能提高抢票成功率, 但是恶心的是购票时默认携带的套餐
36 |
37 | 1. 安全性: 大的软件及公司更有保障, 小作坊比较危险
38 | - 因为他们的做法都是保存你的用户名和密码, 使用多个ip源 时刻刷新系统, 并且绕过验证机制, 从而期望快速抢到票
39 | - 但是这里有一点就是万一这个抢票软件出现安全问题, 用户名密码以及身份信息就泄露了
40 | 1. 稳定性: 由于众多的抢票软件, 导致了票更难抢, 于是他们就投入更多的资源, 用户也花更多的钱买套餐去抢票
41 | - 从而导致了恶性循环, 软件里提示的抢票概率更加不可信了, 而且重要的是有些抢票软件自己撑不住并发 自己卡住了, 反而浪费了时机
42 | - 因为是加入了第三方, 所以瓶颈会更有可能出现, 上次就经历过, 高铁管家自己刷新票信息都刷新不出来,报错
43 | - 直接使用12306的官方APP反而很快完成了购票
44 | 1. 耗费更多资源: 不仅仅是金钱还有时间
45 | - 现在很多的抢票软件的套路都是让你分享给别人帮你加速(有效性值得商榷 但是信息不对等也没法预估)
46 | - 所以即使花钱开了VIP 买了套餐, 还要到处求人帮你加速 (次数多了都会烦的)
47 |
48 |
--------------------------------------------------------------------------------
/MyBlog/2018-3-15-install-deepin.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 双硬盘安装Deepin15.5
3 | date: 2018-03-15 16:11:42
4 | tags:
5 | - 工具使用经验
6 | categories:
7 | - Blog
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [在公司电脑上安装deepin](#在公司电脑上安装deepin)
13 |
14 | **目录 end**|_2020-06-04 19:41_|
15 | ****************************************
16 | # 在公司电脑上安装deepin
17 | > 由于是全新的电脑, 默认开机在配置Windows10, 然后也配置用了下windows10, 被他的卡顿吓到了
18 |
19 | > 前奏: 先进Windows10 关闭快速启动(电源设置, 电源按钮设置这里), 进入BIOS 关闭安全启动, 选择引导为完全关闭UEFI 只设置为Legacy
20 |
21 | - 由于习惯Deepin, 所以一直备有一个Deepin15.4的安装盘, 然后试了一下, 发现U盘能进去, 点击安装Deepin就黑屏了 没有然后了
22 | - 然后搜了一波一闪而过的报错信息, 朋友也和我提到了可能是内核版本太高
23 | - [问题相关](https://www.systutorials.com/linux-kernels/95229/platform-x86-acer-wmi-only-supports-amw0_guid1-on-acer-family-linux-4-9-22/)
24 |
25 | - 然后就刻录了Deepin15.1的启动盘, 最终完美安装, 但是还是想升到最新
26 | - 分区: 因为该电脑是Intel的128固态加上1T的机械, 所以尝试了只在机械上放 / 和 /home失败后
27 | - 尝试在固态上压缩了500M出来, 挂载 /boot 然后在机械上挂载 / 和 /home
28 | - 选择引导时选择的固态
29 |
30 | - 进入系统后, apt update apt upgrade 进行升级
31 | - 其中提到的所有询问, 都是默认, 然后说grub引导需要升级, 需要选引导设备, 选之前分的500M的那个 /boot 分区
32 |
33 | - 然后就发现升级完进不去桌面了, 能进tty, 密码是正确的, 但是图形化窗口进不去了
34 | - 解决方案 `sudo apt-get update && sudo apt-get -f install && sudo apt-get dist-upgrade && sudo apt-get install dde`
35 | - [社区帖子](https://bbs.deepin.org/forum.php?mod=viewthread&tid=134486)
36 |
37 | - 进去之后分辨率很低, 搜了一波怎么改, 然后说要自己用 xrandr 等命令来设置 1080P
38 | - 在社区的官方帖子上找到了解决方案, 装个驱动就完了 [官方社区](https://wiki.deepin.org/index.php?title=%E6%98%BE%E5%8D%A1)
39 |
40 | - 最后完美运行了15.5(现在已经是15.8), 和Windows10也完美兼容, 启动的话就需要进BIOS进行设置, 和我笔记本一样的方式
41 | - 开启UEFI 关闭 Legacy 就是默认进 Windows10
42 | - 关闭UEFI 就是默认进Deepin
43 |
--------------------------------------------------------------------------------
/MyBlog/2020-05-16-install-manjaro.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: install manjaro20 with windows10
3 | date: 2020-06-04 19:42:04
4 | tags:
5 | categories:
6 | - Blog
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [安装Manjaro20](#安装manjaro20)
12 |
13 | **目录 end**|_2020-06-04 19:42_|
14 | ****************************************
15 | # 安装Manjaro20
16 |
17 | 前提;首先系统已经安装Win10, 固态硬盘
18 |
19 | 1. 先做U盘(原先都是使用Deepin的制作器,这次不灵了,还尝试了 dd ImgWriter,最终使用rufus成功)
20 | 1. 确认BIOS关闭 Fast Boot
21 | 1. 按以往经验(曾安装Win10 Deepin Manjaro三系统均正常使用)直接以UEFI模式启动安装 进行到最后一步失败了 [和该楼主问题基本一致](https://forum.manjaro.org/t/manjaro-20-0-installation-failed-on-tongfang-s41b-boost-python-error-in-job-bootloader/138889)
22 | 1. 但是通过该楼主的方式,能通过U盘启动系统后,手动找引导,进入在固态上安装引导失败的Manjaro系统 [Using livecd v17.0.1 (and above) as grub to boot OS with broken bootloader](https://forum.manjaro.org/t/using-livecd-v17-0-1-and-above-as-grub-to-boot-os-with-broken-bootloader/24916) 虽然这是不符合需求的。
23 | 1. 一些命令记下备用: `init -Fxxxz` 查看硬件和分区信息 partd -l 查看分区模式
24 | 1. 最终发现不应该使用UEFI模式安装[Installation of msdos disk in UEFI - A Warning](https://forum.manjaro.org/t/installation-of-msdos-disk-in-uefi-a-warning/15120) 楼主比较熟悉 grub,因为Windows10使用的MBR方式安装 坑啊
25 | 1. 所以只能使用legacy模式安装,一切重来,按部就班.. 分区 /boot 512M 其余都给 /
26 | 1. 安装成功
27 |
28 | 
29 |
30 | ************************
31 |
32 |
33 | - 顺带一提,公司电脑也是主力使用Manajro,某次滚动升级了内核到5.4后,由于没有升级virtualbox的对应包,导致virtualbox一运行就假死,然后尝试了多次后整个系统无任何响应
34 | - 然后就强制关机了,没想到这个强制关机引起了BIOS的错误,BIOS莫名其妙被设置成了 legacy
35 | - 引导项直接就默认Win10了,Deepin和Manjaro引导都不见了,但是通过u盘进入Linux系统后能通过chroot-找到对应的Deepin和Manjaro系统 学习到了 以后修复系统用
36 | ```bash
37 | mkdir /mnt/deepin
38 | mount /dev/sda1 /mnt/deepin
39 | # bash 语法
40 | for dir in dev proc sys etc bin sbin var usr lib lib64; do
41 | mkdir /mnt/deepin/$dir && mount --bind /$dir /mnt/deepin/$dir
42 | done
43 | chroot /mnt/deepin
44 | ```
45 | - 在Windows下EasyBCD瞎折腾了几下,没有生效,仔细看BIOS设置才发现原因
46 | Linux 掉电或者强制关机是个大坑!!
47 |
--------------------------------------------------------------------------------
/MyBlog/Readme.md:
--------------------------------------------------------------------------------
1 | # Blog
2 |
3 | > [小马哥技术周报](https://github.com/mercyblitz/tech-weekly)
4 | > [科技爱好者周刊](https://github.com/ruanyf/weekly)
5 |
--------------------------------------------------------------------------------
/MyBlog/how-to-design-notice-unread.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: how-to-design-notice-unread.md
3 | date: 2021-01-13 19:47:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [设计公告通知未读](#设计公告通知未读)
11 | 1. [1. 关联表存 已读或未读](#1-关联表存-已读或未读)
12 | 1. [2. Redis Set 存储 未读/已读](#2-redis-set-存储-未读已读)
13 | 1. [3. Redis bitmap 存储 未读/已读](#3-redis-bitmap-存储-未读已读)
14 | 1. [4. 客户端存储已读](#4-客户端存储已读)
15 |
16 | **目录 end**|_2021-01-15 21:26_|
17 | ****************************************
18 | # 设计公告通知未读
19 |
20 | > 需求: 发布公告,用户维度的已读未读,有一键已读功能,首条未读需求
21 |
22 | ## 1. 关联表存 已读或未读
23 | > 存储
24 | >- 公告表
25 | >- 公告和用户关联表
26 |
27 | `存已读`
28 | 1. 优点: 新增无需操作关联表,利于统计分析
29 | 1. 缺点: 一键已读就需要未读的关联数据批量写入,数据量会持续增长,数据不够稀疏不便建立索引
30 |
31 | `存未读`
32 | 1. 优点: 新增无需操作关联表,利于统计分析
33 | 1. 缺点:
34 | - 新增公告时,大量数据写入(为每一个用户新增),新注册用户需要补全部数据
35 | - 已读则删除数据(使用物理删除可能存在缺页问题,使用逻辑删除则数据持续增长)
36 |
37 | ************************
38 |
39 | ## 2. Redis Set 存储 未读/已读
40 | > 存储
41 | >- 公告表
42 | >- Redis存储 Set key为用户id,value为公告id
43 |
44 | `存已读`
45 | 1. 优点:
46 | - 新增公告无需操作关联关系
47 | - 用户查询公告未读状态,只需一次请求
48 | 1. 缺点:
49 | - 全部已读需要查出所有公告id插入Redis Set
50 | - Redis占用的内存会持续增长
51 |
52 | `存未读`
53 | 1. 优点: 用户查询公告状态,只需一次请求,全部已读也只需一次请求
54 | 1. 缺点: 新增公告时需要遍历请求所有用户插入公告id
55 |
56 | ************************
57 |
58 | ## 3. Redis bitmap 存储 未读/已读
59 | > 存储
60 | >- 公告表
61 | >- Redis存储 key为公告id bitmap存已读的用户id
62 |
63 | - 所有公告分页查询时,先得到Mysql分页第一页的公告id,然后遍历查询Redis已读未读状态
64 | - 未读公告的分页,需要查询所有的公告id(组织注册时间后的公告), 遍历请求redis得到 未读的公告id, 再进入Mysql 使用 in 进行分页
65 |
66 |
67 | 1. 优点: 新增公告无需维护关联关系
68 | 1. 缺点:
69 | - 分页查看所有未读的需求会随着公告的增多循环次数会增多
70 | - 全部已读需要遍历所有公告
71 | - 随着用户数增多单个key占用的内存持续增长
72 |
73 | 可以通过存储用户最后一次 所有公告已读 的时间戳,减少循环次数
74 |
75 | ************************
76 | ## 4. 客户端存储已读
77 | > 存储
78 | >- 公告表
79 | >- 客户端 Cookie 或者 LocalStorage 存储已读的公告id
80 |
81 | 1. 优点: 服务端存储运算压力减轻
82 | 2. 缺点:
83 | - 首条未读查询接口需要传入已读的id列表,公告多的时候会导致SQL超长
84 | - 无法多端同步状态(其实也可以做,定时同步已读id列表),全部已读需要写入所有公告id到本地
85 |
--------------------------------------------------------------------------------
/MyBlog/server-push.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 服务端推送消息
3 | date: 2020-12-15 14:15:47
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Server push](#server-push)
11 | - 1.1. [企业平台](#企业平台)
12 | - 1.1.1. [GoEasy](#goeasy)
13 | - 1.2. [轮询](#轮询)
14 | - 1.3. [长连接](#长连接)
15 | - 1.3.1. [SSE](#sse)
16 | - 1.3.2. [Mercure](#mercure)
17 | - 1.3.3. [Comet](#comet)
18 | - 1.3.4. [Websocket](#websocket)
19 | - 1.4. [DWR](#dwr)
20 | - 1.5. [HTTP2协议](#http2协议)
21 |
22 | 💠 2025-03-20 15:51:01
23 | ****************************************
24 | # Server push
25 | 服务端推送消息给客户端或服务端的技术方案
26 |
27 | > [ZhongFuCheng3y/austin: 消息推送平台🔥 推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。](https://github.com/ZhongFuCheng3y/austin)
28 |
29 | ## 企业平台
30 |
31 | ### GoEasy
32 | - [官网](http://goeasy.io/cn/started) 免费12个月,后续要收费,这个的使用示例比较简单。
33 |
34 | ************************
35 |
36 | ## 轮询
37 | 前端使用 ajax 通过定时器的方式 的发起请求(最简单也是最容易耗尽服务器资源)
38 |
39 | ## 长连接
40 | 客户端发起一个HTTP请求,服务端不关闭,持续持有,等到数据准备好了或特定事件发生后才发送response并关闭这个连接
41 |
42 | ### SSE
43 | > 本质是使用HTTP流式长连接(和下载文件类似)
44 |
45 | > [Server-Sent Events 教程 - 阮一峰的网络日志](https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html)
46 | - [Server-Sent Events(服务器推送) 教程](https://blog.p2hp.com/archives/7660)
47 | - [sse demo](https://github.com/jokerwangJL/ssedemo)
48 |
49 | - 优点
50 | - 当数据变更不频繁时大大减少请求次数,即使数据变更频繁也近似于轮询
51 | - 缺点
52 | - 维持长连接占用资源
53 | - 案例
54 | - QQ邮箱
55 |
56 | ### Mercure
57 | > [mercure](https://github.com/dunglas/mercure)
58 |
59 | Mercure 是一种向网络浏览器和其他 HTTP 客户端推送数据更新的协议
60 |
61 | ### Comet
62 | - [github: comet4j 项目](https://github.com/jwangkun/comet4j) 可以直接下载配置jar到tomcat下使用
63 | - [参考博客:comet4j java服务端推送消息到web页面实例](http://blog.csdn.net/shadowsick/article/details/9014139)
64 |
65 | - 优点
66 | - 缺点
67 |
68 | ### Websocket
69 | > [Websocket 详解](/Skills/Network/Network.md#websocket)
70 |
71 | - 优点
72 | - 标准协议,兼容性好,使用广泛
73 | - 缺点
74 | - 实现复杂
75 |
76 | ## DWR
77 | > [官网](http://directwebremoting.org/dwr/index.html)
78 |
79 | - 使用xmpp协议的一种技术,能够做到js中调用服务器的Java方法
80 | - [参考博客:Spring整合DWR comet 实现无刷新 多人聊天室](http://www.cnblogs.com/hoojo/archive/2011/06/08/2075201.html#top)
81 |
82 | - 优点
83 | - 缺点
84 |
85 | ## HTTP2协议
86 | > 刚开始提出 Server Push 特性的时候很多看好,但是现在HTTP3趋势下 该特性又沉寂了
87 |
--------------------------------------------------------------------------------
/MyBlog/twenty-years-of-weak-japan.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 日本失落的二十年
3 | date: 2018-12-23 22:29:47
4 | tags:
5 | - 历史
6 | categories:
7 | - Blog
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [日本失落的二十年](#日本失落的二十年)
13 |
14 | **目录 end**|_2020-04-27 23:42_|
15 | ****************************************
16 | # 日本失落的二十年
17 |
18 | > [为何中国不学当年日本那样主动刺破房地产泡沫?](https://www.cnblogs.com/findumars/p/9249102.html)
19 | > [参考: 日本失去的20年](https://wenku.baidu.com/view/5bc3e1add15abe23482f4dbd.html)
20 | > [找回“失去的20年”?日本股市创27年新高,但一个数字不容乐观](http://www.nbd.com.cn/articles/2018-09-29/1259326.html)
21 | > [日本,失落的二十年?](https://www.jianshu.com/p/a212fb7c5ac2)
22 |
23 | 泡沫破裂致“失去的 20 年” 日本的房地产泡沫起因,普遍认为始于 1985 年“广场协议”签订后的日元 升值, 给日本经济带来繁荣的制造业出口, 陷入了困境, 要保持日本经济继续高 速增长,必须寻找新的经济增长点,房地产成了不二选择。
24 | 于是, 日本政府开始加速全面推行住宅商品化, 商业银行大量为居民购房发 放贷款,贷款利率大幅下调。日本的房价、地价开始急速攀升。
25 |
26 | 同期, 政府为了纠正日元过度升值大量地干预汇市并且大幅放松银根, 造成 了流动性过剩的局面, 房产、 土地成为居民寻求货币保值的替代品。 当大笔资金 涌入不动产市场而使其升值时, 保有需求被打开了, 房子、 土地不再是一种使用 需求,而是投资品种。
27 |
28 | 从历史上看, 1961 年、 1973 年和 1990 年,是日本房价、地价涨幅的三个峰 值。 但前两次大涨, 日本处在 8% 以上的经济高增长期, 同时伴随着城镇化进程, 有经济面和自住需求面的支撑,并没有形成大泡沫。
29 | 但到 1974 年时,日本的城镇化率已经达到 74.9% ,此后 20 年,日本的城镇 化进程实际上已停滞, 此时的房地产脱离了自住需求的有效支撑, 由投资性质支 撑的市场形成了大泡沫。
30 |
31 | 在日本意识到不动产的高速发展已经严重影响到了日本经济的未来发展方 向后,采取了紧急更正。 1990 年 3 月,日本银行出台的《控制不动产融资总量 的通知》 成为刺破日本泡沫经济的导火索。
32 |
33 | 从 1989 年 3 月到 1990 年 8 月, 日本银行连续 5 次提高贴现率,过于急剧的货币紧缩加速了资产市场崩溃。 1992 年 大藏省又出台了地价税,征收额度为财产继承税评估值的 0.3% ,让已经一蹶不 振的不动产业更是雪上加霜。
34 | 从金融到土地的双管齐下的政策调控, 导致了泡沫 的快速破灭。
35 |
36 | 此外,由于`日元升值`,外资涌入日本吹大了股市和楼市的泡沫,但从 1990 年起, 外资开始撤离日本, 许多境外投资机构通过挤破日本股市和楼市泡沫赚得 盆满钵满。
37 | 日本经济陷入泥潭至今无法自拔,这 20 年被称为“失去的 20 年”。
38 |
--------------------------------------------------------------------------------
/Python/PythonConcurrency.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Python Concurrency
3 | date: 2018-12-13 16:00:40
4 | tags:
5 | - Concurrency
6 | categories:
7 | - Python
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Concurrency](#concurrency)
13 | - 1.1. [GIL](#gil)
14 | - 1.2. [协程 asyncio](#协程-asyncio)
15 | - 1.3. [多线程 threading](#多线程-threading)
16 | - 1.4. [多进程 multiprocessing](#多进程-multiprocessing)
17 | - 2. [实践](#实践)
18 | - 2.1. [Ray](#ray)
19 |
20 | 💠 2024-10-10 10:41:00
21 | ****************************************
22 | # Concurrency
23 |
24 | Python中的并发编程可大致分为: 协程,多线程,多进程
25 |
26 | 协程Coroutine(asyncio)
27 | - 优点: 任务单元和内核线程数是多对多关系,任务调度是用户态级别,线程切换开销小
28 | - 缺点: 相比于同步式需要换成异步的写法,现有的库支持不完善
29 | - 适用场景: 海量IO密集型任务
30 |
31 | 多线程Thread(threading)
32 | - 优点: 任务单元和实际内核线程绑定,同步代码换成多线程实现时调整小,无须依赖的库做调整`只能说相对小,比如多线程里日志问题`
33 | - 缺点: 相比协程有更大的线程切换开销,相比进程更轻量,GIL的存在导致只能实现并发而不是并行
34 | - 适用场景: 大量IO密集型任务
35 |
36 | 多进程Process(multiprocessing)
37 | - 优点:多核并行计算,同步代码换成多进程时调整中等,无须依赖库调整,但需要全局考虑存在进程内数据共享的场景不支持
38 | - 缺点:资源占用重,应用数据共享时需要使用到进程间通信
39 | - 适用场景: CPU密集型任务
40 |
41 | 通常来说
42 | - IO绑定的场景适用 协程和多线程(存在GIL),例如用户输入,数据库,文件,网络;
43 | - CPU绑定的场景适用多进程,例如 矩阵乘法,搜索,加解密,正则匹配,图像处理
44 |
45 | ## GIL
46 | > [What Is the Python Global Interpreter Lock (GIL)?](https://realpython.com/python-gil/)
47 | > [Python的GIL是什么鬼,多线程性能究竟如何](http://cenalulu.github.io/python/gil-in-python/)`讲解了GIL以及使用其他并发库`
48 | > [Celery](https://docs.celeryq.dev/en/stable/)
49 |
50 | 简单来说,GIL在早期将C的库集成入Python时,GIL的存在使得应用开发无须考虑并发安全问题,也就无须考虑锁的开销,单线程的性能也很高。
51 | 而且Python有多种解释器实现,只有CPython中有GIL
52 |
53 | ## 协程 asyncio
54 |
55 |
56 | ## 多线程 threading
57 | 创建并绑定操作系统的内核线程,但是无法像Java,Go那样并行执行,每个线程在执行前都需要获取GIL锁,即至多只有一个线程能使用CPU计算。
58 |
59 |
60 | 思考: 如何实现像Java一样完备的状态管理和异常管理。 如何实现线程池,如何实现生产者消费者队列加多线程。
61 |
62 | ## 多进程 multiprocessing
63 |
64 | ************************
65 |
66 | # 实践
67 | ## Ray
68 | 分布式多进程框架
69 |
--------------------------------------------------------------------------------
/Python/PythonGame.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: PythonGame
3 | date: 2018-12-13 16:01:52
4 | tags:
5 | categories:
6 | - Python
7 | - Game
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [pygame](#pygame)
13 | 1. [安装](#安装)
14 |
15 | **目录 end**|_2020-04-27 23:42_|
16 | ****************************************
17 | # pygame
18 | ## 安装
19 | *python2 安装 pygame*
20 | - `sudo apt install python-pygame`
21 | *python3 安装 pygame*
22 | - `sudo apt install python3-dev mercurial`
23 | - `sudo apt install libsdl-image1.2-dev libsdl2-dev libsdl-ttf2.0-dev`
24 | *安装一些声音的功能*
25 | - `sudo apt install libsdl-mixer1.2-dev libimportmidi-dev`
26 | - `sudo apt install libswscale-dev libsmpeg-dev libavformat-dev libavcode-dev`
27 | - `sudo apt install python-numpy`
28 |
29 | *执行这个安装pygame 如果必要换成 pip3*
30 | - `pip install --user hg+http://bitbucket.org/pygame/pygame`
31 | *我使用上面的方式安装报错,使用这个完成了安装*
32 | - `sudo pip install pygame`
33 |
34 | *********
35 | `检验是否安装成功`
36 | - `import pygame ` 查看版本 `pygame.ver`
37 |
38 |
--------------------------------------------------------------------------------
/Python/PythonOffices.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Python 操作 Offices文档
3 | date: 2018-12-15 12:08:39
4 | tags:
5 | - Offices
6 | categories:
7 | - Python
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Offices文档](#offices文档)
13 | - 1.1. [Word](#word)
14 | - 1.2. [Excel](#excel)
15 |
16 | 💠 2024-04-23 13:56:29
17 | ****************************************
18 | # Offices文档
19 | ## Word
20 |
21 | ## Excel
22 | > [Working with Excel Files in Python](http://www.python-excel.org/)
23 | > [参考: Python-Excel 模块哪家强?](https://zhuanlan.zhihu.com/p/23998083)
24 |
25 | > 大文件读取性能优化
26 | - 问题: pandas读取 200M+ Excel时会耗时很久(分钟级),思路将Excel转换为CSV再读取
27 | [Fast excel python](https://hakibenita.com/fast-excel-python)`calamine性能最快且保留类型`
28 | [polars.read_excel](https://docs.pola.rs/py-polars/html/reference/api/polars.read_excel.html)`读取Excel为DataFrame,同样使用calamine`
29 |
30 | ************************
31 |
32 | > Openpyxl
33 | > DuckDB
34 | > LibreOffice
35 | > Tablib
36 |
37 | ************************
38 |
39 | > [xlrd](https://github.com/python-excel/xlrd)
40 |
41 | ```python
42 | import xlrd
43 |
44 | data = xlrd.open_workbook('monster.xlsx')
45 | table = data.sheets()[0]
46 | nrows = table.nrows
47 | for i in range(nrows):
48 | for cell in table.row_values(i):
49 | print(cell, ' | ', end='')
50 | print()
51 | ```
52 |
53 | ************************
54 | > [Pandas](http://pandas.pydata.org/)
55 |
56 |
--------------------------------------------------------------------------------
/Python/PythonWeb.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: PythonWeb
3 | date: 2018-12-15 12:08:21
4 | tags:
5 | - Web
6 | categories:
7 | - Python
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Web](#web)
13 | - 1.1. [FastAPI](#fastapi)
14 | - 1.2. [Django](#django)
15 | - 1.3. [Flask](#flask)
16 | - 2. [Tool](#tool)
17 | - 3. [爬虫](#爬虫)
18 |
19 | 💠 2024-05-22 22:00:47
20 | ****************************************
21 |
22 | # Web
23 | > [Awesome Python Web Frameworks](https://github.com/sfermigier/awesome-python-web-frameworks)
24 |
25 | > python内置一个简易的W静态eb服务器 只需在静态资源的根目录下执行
26 | - python2 `python -m SimpleHTTPServer [8000]`
27 | - python3 `python3 -m http.server [8000]`
28 |
29 | ## FastAPI
30 | [Github](https://github.com/tiangolo/fastapi)
31 |
32 | > [FastAPI增加traceId](https://segmentfault.com/a/1190000041438570)
33 | > [FastApi结合loguru日志使用](https://blog.csdn.net/qq_51967017/article/details/134045236)
34 |
35 | [异步任务](https://fastapi.tiangolo.com/zh/tutorial/background-tasks/)
36 |
37 | ************************
38 |
39 | ## Django
40 | - 安装Django `pip install Django`
41 | - 创建项目 `django-admin.py startproject first_pro . `
42 | - `ls first_pro`查看到创建的默认文件
43 | - 创建SQLite数据库 `python manage.py migrate`
44 | - 启动项目`python3 manage.py runserver`
45 |
46 | ## Flask
47 | 开发一个简易RESTful风格的服务器
48 | > [官方文档 ](http://www.pythondoc.com/flask-restful/first.html#python-flask-restful-api)
49 | > [教程文档](https://www.tutorialspoint.com/flask/index.htm)
50 |
51 | > 跨域问题
52 | > [解决方式](https://blog.csdn.net/yannanxiu/article/details/53036508)
53 | `pip install flask-cors`
54 |
55 | ```python
56 | from flask_cors import *
57 |
58 | app = Flask(__name__)
59 | CORS(app, supports_credentials=True)
60 | ```
61 |
62 | # Tool
63 | - `pip install httpie`
64 | - `http --json URL` 格式化输出json
65 |
66 | - `curl URL|python -m json.tool ` 格式化输出JSON
67 |
68 | # 爬虫
69 | `解析HTML`
70 | - bs4 :`sudo pip3 install bs4`
71 | - lxml :`sudo pip3 install lxml`
72 |
--------------------------------------------------------------------------------
/Python/Tool/PyCharm.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: PyCharm
3 | date: 2018-12-15 12:08:04
4 | tags:
5 | - IDEA
6 | categories:
7 | - IDE
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [PyCharm](#pycharm)
13 |
14 | **目录 end**|_2020-06-04 19:41_|
15 | ****************************************
16 | # PyCharm
17 | > [参考: PyCharm安装及使用](https://www.jianshu.com/p/042324342bf4)
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Python/Tool/Selenium.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Selenium
3 | date: 2019-11-10 01:49:33
4 | tags:
5 | categories:
6 | - Python
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [Selenium](#selenium)
12 |
13 | **目录 end**|_2020-04-27 23:42_|
14 | ****************************************
15 | # Selenium
16 |
17 | > [参考: Selenium Python](http://www.testclass.net/selenium_python)
18 |
19 |
--------------------------------------------------------------------------------
/Reactive/ProjectReactor.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Project Reactor
3 | date: 2023-10-10 11:28:24
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Project Reactor](#project-reactor)
11 | - 1.1. [Reactive Streams](#reactive-streams)
12 | - 1.2. [Concept](#concept)
13 | - 2. [WebFlux](#webflux)
14 |
15 | 💠 2023-10-12 11:48
16 | ****************************************
17 | # Project Reactor
18 | > [Official Site](https://projectreactor.io)
19 |
20 | ## Reactive Streams
21 | > [Official Site](https://www.reactive-streams.org/)
22 |
23 | ## Concept
24 |
25 | - Publisher: Flux(0-N) Mono(0/1)
26 | - 无结果值时 可用`Mono` 类似于 Runable
27 | -
28 |
29 | ************************
30 |
31 | # WebFlux
32 | - [Note: WebFlux](/Java/Spring/WebFlux.md)
33 |
--------------------------------------------------------------------------------
/Reactive/README.md:
--------------------------------------------------------------------------------
1 | # 响应式编程
2 | > 规范 [Reactivex](https://reactivex.io/)
3 |
4 | > [参考: Reactor模式详解](http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html)
5 |
6 | 优势:在有高IO处理时间的任务中,响应式比同步命令式能带来更高的吞吐量和扩展性。例如:网关
7 |
8 | ## Java领域
9 | > [Blog: Reactive Systems in Java](https://www.baeldung.com/java-reactive-systems)
10 |
11 | [Project Reactor](http://projectreactor.io/) | [RxJava](https://github.com/ReactiveX/RxJava)
12 |
13 |
14 | Reactive框架 : RxJava, Reactor, Akka, Kotlin Coroutines & Flow
15 | Web框架 : Spring WebFlux, Vert.x, Micronaut, Helidon
16 | DAL层 : Spring Data Reactive (Redis: Lettuce MongoDB: )
17 | 通信层 : RSocket, Reactor Netty, Reactor Aeron, Reactive Dubbo
18 | 消息队列: Reactor Kafka, Reactor RabbitMQ, RocketMQ
19 |
--------------------------------------------------------------------------------
/Rust/Readme.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Rust 概览
3 | date: 2020-03-22 12:41:43
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Rust](#rust)
11 | 1. [安装](#安装)
12 | 1. [Terminal App](#terminal-app)
13 |
14 | **目录 end**|_2020-03-22 12:41_|
15 | ****************************************
16 | # Rust
17 | - [ ] 理解和学习 它甚至是用同一套抽象解决了内存安全和数据竞争这两个不同领域的问题。
18 |
19 | ## 安装
20 | > [install](https://www.rust-lang.org/zh-CN/tools/install)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Rust/RustBase.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Rust基础
3 | date: 2020-03-22 12:34:33
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Rust](#rust)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # Rust
15 | > [get started](https://www.rust-lang.org/zh-CN/learn/get-started)
16 |
17 |
--------------------------------------------------------------------------------
/Scala/SBT.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: SBT
3 | date: 2018-12-15 12:09:32
4 | tags:
5 | categories:
6 | - Scala
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [SBT](#sbt)
12 |
13 | **目录 end**|_2020-04-27 23:42_|
14 | ****************************************
15 | # SBT
16 | > Scala 的构建工具
17 |
18 | [Official doc](https://www.scala-sbt.org/documentation.html) | [scaladex](https://index.scala-lang.org/)`类似于 MvnRepos`
19 |
20 | > [参考: Building Java Projects With Sbt](http://xerial.org/blog/2014/03/24/sbt/)
21 |
22 | **配置代理** [Official Doc](https://www.scala-sbt.org/1.x/docs/Proxy-Repositories.html)
23 | **`~/.sbt/repositories`**
24 | ```ini
25 | [repositories]
26 | local
27 | aliyun: http://maven.aliyun.com/nexus/content/groups/public/
28 | ```
29 |
30 |
--------------------------------------------------------------------------------
/Script/Bash.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Bash
3 | date: 2018-12-15 12:10:18
4 | tags:
5 | - Shell
6 | categories:
7 | - Linux
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Bash](#bash)
13 |
14 | 💠 2024-05-01 14:34:46
15 | ****************************************
16 |
17 | # Bash
18 |
19 | - 数组使用 字符串空格即是 `list='a b c'; for i in $list; do echo $i; done`
20 |
21 | > [参考: bash实现“多进程”](http://www.cnitblog.com/sysop/archive/2008/11/03/50974.aspx)
22 |
23 | [Bash字符串操作](https://www.cnblogs.com/chengmo/archive/2010/10/02/1841355.html)
24 |
25 | > [Bash](https://github.com/skywind3000/awesome-cheatsheets/blob/master/languages/bash.sh)
26 |
27 |
--------------------------------------------------------------------------------
/Script/Bat.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dos
3 | date: 2018-12-15 12:10:06
4 | tags:
5 | - DOS
6 | categories:
7 | - Windows
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Bat](#bat)
13 | 1. [Tips](#tips)
14 | 1. [基础命令](#基础命令)
15 | 1. [常用基础](#常用基础)
16 | 1. [基础语法](#基础语法)
17 | 1. [变量](#变量)
18 | 1. [服务](#服务)
19 | 1. [实用性脚本](#实用性脚本)
20 |
21 | **目录 end**|_2020-04-27 23:42_|
22 | ****************************************
23 | # Bat
24 |
25 | ## Tips
26 | - windows下使用VmWare创建的虚拟机如果报错
27 | - 就找到虚拟机目录下vmx后缀的文件 用记事本打开,手动找到vmci0.present=‘TRUE’,把true改为false 即可。
28 |
29 | ## 基础命令
30 | ### 常用基础
31 |
32 | cd 路径 : 跳转到本盘符下的路径
33 | cd /d 路径 :跳转到别的盘符下的路径
34 | "盘符:” : 切换盘符
35 | netstat -an :查看开启了哪些端口
36 | netstat -v : 查看正在进行的工作
37 | netstat -ano :查看端口占用
38 |
39 |
40 | ## 基础语法
41 | ### 变量
42 | - [参考博客](http://www.jb51.net/article/49196.htm)
43 |
44 | ## 服务
45 |
46 | `记一次在windows上配置服务`
47 | - [将jar程序配置为服务](http://developer.51cto.com/art/201411/456795.htm)
48 | - [将bat后台运行,隐藏黑窗口](http://blog.csdn.net/carl6148/article/details/7905549)
49 | - [按端口找到进程然后杀掉](https://zhidao.baidu.com/question/1430216669082941259.html)
50 | - [手动方式](https://www.cnblogs.com/moodlxs/p/4145384.html)
51 |
52 | *******************************************
53 | ## 实用性脚本
54 | - [本人写的bat](https://github.com/Kuangcp/Script/tree/master/bat)`因为后期转用Linux了,所以就没有写了`
55 | - 其中用的多的就是服务管理的脚本
56 |
--------------------------------------------------------------------------------
/Script/Lua.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Lua
3 | date: 2019-02-27 09:54:04
4 | tags:
5 | categories:
6 | - Lua
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [Lua](#lua)
12 | - 1.1. [安装](#安装)
13 | - 1.2. [luarocks](#luarocks)
14 |
15 | 💠 2024-09-04 13:54:11
16 | ****************************************
17 | # Lua
18 | > [Official ](https://www.lua.org/) | [wiki: lua](https://en.wikipedia.org/wiki/Lua)
19 |
20 | > [Lua 菜鸟教程](http://www.runoob.com/lua/lua-tutorial.html)
21 | > [lua-in-one-pic](https://github.com/coodict/lua-in-one-pic)
22 |
23 | 因为该项目 [z.lua](https://github.com/skywind3000/z.lua) 而安装了Lua, 他的执行速度确实非常快
24 |
25 | **使用场景**
26 | - 网络领域 Redis,Nginx 等扩展
27 | - 游戏开发 动态扩展
28 | - 脚本开发
29 | - 数据库 触发器和存储过程
30 |
31 | ## 安装
32 | > [Official: install](https://www.lua.org/start.html#installing)
33 |
34 | `lua`
35 |
36 | `luac`
37 | > [doc: luac](https://www.lua.org/manual/5.3/luac.html)
38 |
39 | ## luarocks
40 | > [Official Site](https://luarocks.org/#quick-start) lua 的包管理
41 |
--------------------------------------------------------------------------------
/Skills/Application/Android.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Android
3 | date: 2024-04-22 20:04:53
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Android](#android)
11 | - 1.1. [Dev](#dev)
12 | - 1.2. [Tool](#tool)
13 |
14 | 💠 2024-05-06 19:59:21
15 | ****************************************
16 | # Android
17 |
18 | > [Android,开源还是封闭?](http://www.ruanyifeng.com/blog/2010/02/open_android_or_not.html)
19 |
20 | ## Dev
21 | F-Driod
22 | Termux
23 |
24 | ## Tool
25 | 李跳跳
26 |
--------------------------------------------------------------------------------
/Skills/Application/Dict.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Dict
3 | date: 2024-11-22 15:00:35
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [字典](#字典)
12 |
13 | 💠 2024-11-22 15:00:35
14 | ****************************************
15 | # 字典
16 |
17 | > [MDBG Chinese Dictionary](https://www.mdbg.net/chinese/dictionary?page=cedict)
18 | > [Releases · skywind3000/ECDICT-ultimate](https://github.com/skywind3000/ECDICT-ultimate/releases)
19 | > [skywind3000/ECDICT: Free English to Chinese Dictionary Database](https://github.com/skywind3000/ECDICT)
20 |
21 |
--------------------------------------------------------------------------------
/Skills/Application/Offices.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Offices
3 | date: 2024-09-23 11:44:36
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Excel](#excel)
11 | - 2. [CSV](#csv)
12 |
13 | 💠 2025-01-16 16:26:11
14 | ****************************************
15 |
16 | # Excel
17 | > [Microsoft Excel - Wikipedia](https://en.wikipedia.org/wiki/Microsoft_Excel)
18 |
19 | 主要分为 xls 和 xlsx
20 |
21 | - xls 专有二进制
22 | - xlsx zip包
23 |
24 | | | xls | xlsx |
25 | |:---|:---|:---|
26 | | 年份 | 2003之前 | 2007及以后 |
27 | | 格式 | 专有二进制CBF格式 | zip+xml |
28 | | 兼容性 | 只能Office,其他软件有兼容问题 | 开放性格式,兼容更好 |
29 | | 安全性 | 定制化 | 复用zip加密,更成熟 |
30 | | 容量 | 65536行 乘 256列 | 1,048,576行 乘 16,384列 |
31 |
32 | > [Excel 规范与限制](https://support.microsoft.com/zh-cn/office/excel-%E8%A7%84%E8%8C%83%E4%B8%8E%E9%99%90%E5%88%B6-1672b34d-7043-467e-8e27-269d656771c3)
33 |
34 | 由于Excel最大行数为104w行,导出超量数据时,通常会拆分Sheet,或者退而使用csv格式
35 |
36 | ************************
37 |
38 | # CSV
39 | 注意Windows平台会对文件带上BOM头,用于区分字符集编码 [BOM](/Skills/CS/CharacterEncoding.md#关于-bom)
40 | 对csv文件追加 EF BB BF 三个字节 以实现对Office的兼容,而WPS会自动检测和切换解析的字符集编码
41 | ```java
42 | FileOutputStream fos = new FileOutputStream(new File(this.csvFileAbsolutePath));
43 | byte [] bs = { (byte)0xEF, (byte)0xBB, (byte)0xBF}; //new added
44 | fos.write(bs);
45 | fos.close();
46 | ```
47 |
48 |
--------------------------------------------------------------------------------
/Skills/Application/VirtualBox.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: VirtualBox
3 | date: 2018-12-15 12:11:48
4 | tags:
5 | - VirtualBox
6 | categories:
7 | - 工具
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [VirtualBox](#virtualbox)
13 | 1. [网络管理](#网络管理)
14 | 1. [硬盘管理](#硬盘管理)
15 | 1. [安装Linux](#安装linux)
16 | 1. [Manjaro](#manjaro)
17 | 1. [Deepin](#deepin)
18 | 1. [安装Windows](#安装windows)
19 | 1. [Windows7](#windows7)
20 | 1. [安装 Android](#安装-android)
21 | 1. [Android-x86](#android-x86)
22 |
23 | **目录 end**|_2020-04-27 23:42_|
24 | ****************************************
25 | # VirtualBox
26 |
27 | ## 网络管理
28 | > [How to configure port forwarding in VirtualBox](https://www.simplified.guide/virtualbox/port-forwarding)
29 |
30 | - Network -> Advanced -> Port forwarding -> host ip port(宿主机) guest ip port (虚拟机内系统)
31 |
32 | ************************
33 |
34 | ## 硬盘管理
35 |
36 | > 添加新分区到虚拟机
37 | 1. Storge -> add Hard Dish -> create Disk 选择大小, 创建完成后, 启动虚拟机就能看到挂载了, 再改下 /etc/fstab 就能自动挂载了
38 |
39 | ************************
40 |
41 | ## 安装Linux
42 |
43 | ### Manjaro
44 | > 官网下载好对应的镜像文件
45 |
46 | ### Deepin
47 |
48 | ## 安装Windows
49 |
50 | ### Windows7
51 |
52 | ************************
53 |
54 | ## 安装 Android
55 | > [参考: 5 Best Android Emulators for Linux](https://beebom.com/android-emulators-linux/)
56 |
57 | ### Android-x86
58 | > [下载](https://www.fosshub.com/Android-x86.html)
59 | > [参考: ](https://www.cnblogs.com/wynn0123/p/6288344.html)
60 |
61 | > 启动后不进图形化:
62 | 1. `mount –o remount,rw /mnt`
63 | 1. vi /mnt/grub/menu.lst 第一个块 kernel /android-8.1-rc2/kernel quiet 后空格,加上 nomodeset
64 | 1. 修改分辨率也是在这一行 UVESA_MODE 的值
65 |
--------------------------------------------------------------------------------
/Skills/CS/CompilingPrinciple.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 编译原理
3 | date: 2019-01-06 14:33:13
4 | tags:
5 | categories:
6 | - 计算机基础
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [编译原理](#编译原理)
12 | - 1.1. [编译技术](#编译技术)
13 | - 1.1.1. [JIT](#jit)
14 | - 1.1.2. [AOT](#aot)
15 | - 2. [词法分析](#词法分析)
16 | - 3. [语法分析](#语法分析)
17 | - 3.1. [AST](#ast)
18 | - 4. [工具](#工具)
19 | - 4.1. [Antlr](#antlr)
20 |
21 | 💠 2023-10-22 02:47
22 | ****************************************
23 | # 编译原理
24 |
25 | 最简单: 词法分析 -> 语法分析 -> 语义分析 -> 代码生成
26 |
27 | | 前端 | 中端 | 后端 |
28 | |:---|:---|:---|
29 | | 词法分析 -> 语法分析 -> 语义分析 | -> 平台无关优化 -> 平台相关优化 | -> 寄存器分配 -> 代码生成 |
30 |
31 | 
32 |
33 | ## 编译技术
34 | ### JIT
35 | > Just in time
36 |
37 | 在运行时才将源码编译成机器码
38 |
39 | ### AOT
40 | > Ahead of time
41 |
42 | 预先将所源码编译成机器码
43 |
44 | ************************
45 |
46 | # 词法分析
47 |
48 | ************************
49 |
50 | # 语法分析
51 |
52 | ## AST
53 | > Abstract Syntax Tree
54 |
55 | 用处: 错误提示、自动补全、重构、语法检查, 代码混淆, 静态代码分析, 自动生成测试代码 ...
56 |
57 | > [参考: 从现在起-彻底学会 js ast](https://segmentfault.com/a/1190000017992387)
58 | > [参考: Java代码分析器(一): JDT入门](https://segmentfault.com/a/1190000000609246)
59 |
60 | - [Github: java parser](https://github.com/javaparser/javaparser)`Java生成AST`
61 |
62 | # 工具
63 | ## Antlr
64 | > [Antlr](https://www.antlr.org/) `ANother Tool for Language Recognition`
65 |
66 | > 基于ANTLR的语法制导翻译(内嵌在语法里的语义动作(semantic action),或者是ANTLRv4的回调),还可以实现AST生成、语义检查等功能。
67 | 这样借助ANTLR就可以基本覆盖整个编译器前端的需求了。
68 | >- [ANTLR涉及编译原理中的哪些部分? - RednaxelaFX的回答 - 知乎](https://www.zhihu.com/question/21580602/answer/93736714)
69 |
70 |
--------------------------------------------------------------------------------
/Skills/CS/FloatingPoint.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 浮点数
3 | date: 2023-10-12 13:52:00
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Floating-Point](#floating-point)
11 |
12 | 💠 2023-10-12 13:52
13 | ****************************************
14 | # Floating-Point
15 | > [wiki: IEEE_754](https://en.wikipedia.org/wiki/IEEE_754)
16 |
17 | > [Fast inverse square root](https://en.wikipedia.org/wiki/Fast_inverse_square_root)`0x5f3759df`
18 | > [参考: 开方算法优化](https://www.cnblogs.com/virusdefender/p/3366536.html)
19 |
20 |
--------------------------------------------------------------------------------
/Skills/CS/Generics.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 泛型设计
3 | date: 2019-04-20 12:16:10
4 | tags:
5 | categories:
6 | - 计算机基础
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [Generics](#generics)
12 | - 1.1. [协变 逆变](#协变-逆变)
13 | - 2. [元编程](#元编程)
14 |
15 | 💠 2024-05-17 19:49:18
16 | ****************************************
17 |
18 | # Generics
19 |
20 | > [泛型和元编程的模型:Java, Go, Rust, Swift, D等](https://zhuanlan.zhihu.com/p/287965990)
21 | > [generics](https://thume.ca/2019/07/14/a-tour-of-metaprogramming-models-for-generics/)
22 |
23 | ## 协变 逆变
24 | 协变(covariant)和逆变(contravariant) [.NET 泛型中的协变和逆变](https://learn.microsoft.com/zh-cn/dotnet/standard/generics/covariance-and-contravariance)
25 |
26 | - 协变 是指能够使用与原始指定的派生类型相比,派生程度更大的类型。
27 | - 例如 String -> Object
28 | - 逆变 是指能够使用派生程度更小的类型。
29 | - 例如 Object -> String
30 |
31 | > [Java 数组协变带来的静态类型漏洞](https://www.iteye.com/blog/rednaxelafx-379703)
32 |
33 | ************************
34 |
35 | # 元编程
36 |
37 | 
38 |
39 |
--------------------------------------------------------------------------------
/Skills/CS/OperatingSystem/Readme.md:
--------------------------------------------------------------------------------
1 | # 操作系统
2 | 虚拟化
3 | 并发
4 | 持久性
5 |
6 |
7 | 《深入理解计算机系统》
8 | 《操作系统导论》
9 | 《现代操作系统》
10 |
11 | > [图解系统](https://www.xiaolincoding.com/os/)
12 |
13 |
--------------------------------------------------------------------------------
/Skills/CS/README.md:
--------------------------------------------------------------------------------
1 | # 计算机基础知识
2 | > 无关语言,只关心原理以及相关技术
--------------------------------------------------------------------------------
/Skills/CS/Time.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 时间
3 | date: 2018-12-20 10:44:57
4 | tags:
5 | - Time
6 | categories:
7 | - 计算机基础
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [时间](#时间)
13 | - 1.1. [基础概念](#基础概念)
14 | - 1.1.1. [GMT](#gmt)
15 | - 1.1.2. [UTC](#utc)
16 | - 1.2. [时区](#时区)
17 | - 1.2.1. [CDT](#cdt)
18 | - 1.2.2. [CST](#cst)
19 | - 1.2.3. [DST](#dst)
20 |
21 | 💠 2024-09-12 16:01:31
22 | ****************************************
23 | # 时间
24 | > 上下四方为宇,古往今来为宙
25 |
26 | 计算机内部的计时器为石英钟,存在误差,所以需要依靠NTP服务来对时(例如: `sudo /usr/sbin/ntpdate -u cn.pool.ntp.org`)
27 |
28 |
29 | ## 基础概念
30 | ### GMT
31 | > 格林尼治标准时间(Greenwich Mean Time,GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
32 |
33 | 为了方便,在不需要精确到秒的情况下,通常将 GMT 和 UTC 视作等同。但 UTC 更加科学更加精确,它是以原子时为基础,在时刻上尽量接近世界时的一种时间计量系统。它的出现是现代社会对于精确计时的需要。
34 |
35 | ### UTC
36 | > [Coordinated Universal Time](https://en.wikipedia.org/wiki/Coordinated_Universal_Time)
37 |
38 | 协调世界时(为了协调世界时和原子时 采用闰秒实现),又称世界统一时间、世界标准时间、国际协调时间, 也会被称为"Zulu time"
39 |
40 | 常见格式为 1997-07-16T19:20+01:00 末尾标识了时间的时区
41 |
42 | > 实际地区无关的夏令时缩写:
43 | - 主要的夏令时包括EDT(Eastern Daylight Time),CDT(Central Daylight Time ),PDT(Pacific Daylight Time)。非夏令时包括CST(Central Standard Time),PST(Pacific Standard Time)。
44 |
45 | ************************
46 |
47 | ## 时区
48 | ### CDT
49 |
50 | 中国标准时间(CST)和中国夏令时(CDT)
51 |
52 | 1986年至1991年,中华人民共和国在全国范围实行了六年夏令时,每年从4月中旬的第一个星期日2时整(北京时间)到9月中旬第一个星期日的凌晨2时整(北京夏令时)。除1986
53 | 年因是实行夏令时的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。1992年4月5日后不再实行。
54 |
55 | ### CST
56 | > 中国处于东八区 所以是 UTC+8
57 |
58 | 但是CST其实可以表示四个时区, 被MySQL中的CST坑了才发现到这个`十四个小时问题`, 但是Linux以及大多数软件中的CST都是指UTC+8
59 |
60 | | 时间 | 全称 | 时区 |
61 | |:----|:----|:----|
62 | | 美国中部时间 | Central Standard Time (USA) | UTC-6:00
63 | | 澳大利亚中部时间 | Central Standard Time (Australia) | UTC+9:30
64 | | 中国标准时间 | China Standard Time | UTC+8:00
65 | | 古巴标准时间 | Cuba Standard Time | UTC-4:00
66 |
67 | ### DST
68 | > DST是Daylight Saving Time的缩写,称为阳光节约时,在我国称为夏时制,又称夏令时,是一种为节约能源而人为调整地方时间的制度。
69 |
70 | > [Daylight saving time](https://en.wikipedia.org/wiki/Daylight_saving_time)
71 |
72 |
--------------------------------------------------------------------------------
/Skills/CS/Virtualization.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 虚拟化技术
3 | date: 2019-05-27 13:44:23
4 | tags:
5 | categories:
6 | - 虚拟化
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [虚拟化技术](#虚拟化技术)
12 | 1. [QEMU](#qemu)
13 | 1. [KVM](#kvm)
14 | 1. [XEN](#xen)
15 | 1. [HVM](#hvm)
16 | 1. [Proxmox](#proxmox)
17 |
18 | **目录 end**|_2020-06-24 02:06_|
19 | ****************************************
20 | # 虚拟化技术
21 |
22 | > 虚拟硬盘格式
23 | - vhd: VirtualPC, Hyper-V, Xen, VirtualBox
24 | - vmdk: VMWare
25 | - qcow2: Qemu, KVM
26 |
27 | ## QEMU
28 |
29 | ## KVM
30 |
31 | ## XEN
32 |
33 | ## HVM
34 |
35 | ## Proxmox VE
36 | > [Official](https://www.proxmox.com/en/)`虚拟机管理平台`
37 |
--------------------------------------------------------------------------------
/Skills/CS/img/char-error-decode-situation.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Skills/CS/img/char-error-decode-situation.webp
--------------------------------------------------------------------------------
/Skills/CS/img/generic_and_meta.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Kuangcp/Note/7d5a784713a4459eaba0ed7b1e85b38967b1aaec/Skills/CS/img/generic_and_meta.webp
--------------------------------------------------------------------------------
/Skills/DevOps/ELK.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ELK.md
3 | date: 2019-03-19 17:59:18
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [ELK](#elk)
11 | 1. [ElasticSearch](#elasticsearch)
12 | 1. [Logstash](#logstash)
13 |
14 | **目录 end**|_2020-08-18 17:49_|
15 | ****************************************
16 | # ELK
17 |
18 | > [5 Good Reasons to Use a Log Server ](https://reflectoring.io/log-server/)
19 |
20 | - 整体架构为Logstash采集日志输出文件,制定解析格式,存入ES,Kibana用于展示
21 | - 此时可以优化日志输出,区分不同的字段(时间,线程,方法),方便解析为不同字段,索引优化
22 |
23 | ************************
24 |
25 | ## ElasticSearch
26 | > [ElasticSearch](/Skills/Search/Elasticsearch.md)
27 |
28 | > UI
29 | 1. [appbaseio/dejavu](https://github.com/appbaseio/dejavu)
30 | 1. [cars10/elasticvue](https://github.com/cars10/elasticvue)
31 | 1. cerebro
32 |
33 | ************************
34 |
35 | ## Logstash
36 | > [Official Doc](https://www.elastic.co/guide/en/logstash/current/index.html)
37 | > [Logstash 最佳实践](https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/index.html)
38 |
39 | 常用于 数据的采集 过滤,配置文件使用 Ruby 编写
40 |
41 | 1. input 数据源 通过 input plugin 可支持 JDBC Kafka 文件流 HTTP 等等
42 | 1. filter 数据源做处理 类似于 Java8 中 Stream 表达式 中的map filter等函数,对数据进行处理
43 | 1. ouput 输出数据源 对应 output plugin
44 |
45 | > 解析嵌套[JSON](https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html) message内content
46 | ```ruby
47 | filter{
48 | json {
49 | source => "message"
50 | target => "parsed"
51 | add_field => {"content" => "%{[parsed][content]}"}
52 | remove_field => ["parsed"]
53 | }
54 | }
55 | ```
56 |
57 | > 增减字段
58 | ```ruby
59 | filter {
60 | mutate {
61 | add_field => { "[@metadata][program]" => "%{program}" }
62 | remove_field => "[program]"
63 | }
64 | }
65 | ```
66 |
67 | - 使用指定配置文件且自动重载 bin/logstash -f app.conf --config.reload.automatic
68 |
--------------------------------------------------------------------------------
/Skills/DevOps/PrivateDeploy.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 私有化部署
3 | date: 2025-01-03 14:53:37
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [私有化部署](#私有化部署)
11 | - 1.1. [前置准备](#前置准备)
12 | - 1.2. [依赖](#依赖)
13 | - 1.3. [流程](#流程)
14 |
15 | 💠 2025-01-10 16:30:07
16 | ****************************************
17 | # 私有化部署
18 | 通常SaaS类的系统都是公有化部署对客户按服务收费,但是有些大企业顾虑数据,网络安全,企业品牌等问题,会需要特殊的私有化部署,将所有的应用都部署在客户提供的私有云或本地机房。
19 |
20 | ## 前置准备
21 | 交付产物及功能清单边界的确认
22 | 系统交付物的安全加固:混淆,加密等
23 | 私有化环境总硬件资源的规格评估和费用评估
24 | 交付文档输出并确认
25 |
26 | ## 依赖
27 | 需要依据应用公有化部署时的完整环境复刻到私有环境里,按需调整。常见依赖有服务器,中间件,网络拓扑。
28 |
29 | 中间件:数据库,缓存,MQ,定时任务,配置中心,注册中心。Ai领域还会有 LLM工作流,知识库,推理模型(GPU)等等。
30 | 服务器:运行应用服务,手动部署的中间件
31 | 网络拓扑:反向代理,4/7层转发,安全防护层
32 |
33 | ## 流程
34 | 通常一个系统做到SaaS化了,系统功能都会比较完备,私有化部署时不一定是全部的功能都部署,所以还涉及到系统的功能上需要支持费控(限制使用范围和时间)。
35 | 甚至依赖的中间件和网络环境都会简化,以及交付的系统需要支撑的用户量和并发量以及关键的性能指标。
36 | 因此第一步就是在商务环节时在合同内沟通清楚交付标准和交付形态(可能是完整前后端+小程序/原生App,纯API,纯前端)。
37 | 然后就是定制好一个部署的需求表和计划表,双方或多方协定清楚。
38 |
39 | 按需求表在客户那一方做好资源的申请和开通以及确认
40 | 开发参与部署调试
41 | 测试参与集成测试
42 | 业务方参与验收
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/Skills/DevOps/README.md:
--------------------------------------------------------------------------------
1 | # DevOps
2 | > [Awesome Ops](https://github.com/eryajf/awesome-ops)
3 |
4 | > [参考: 谈谈持续集成,持续交付,持续部署之间的区别](https://www.jianshu.com/p/2c6ebe34744a)
5 | https://www.cnblogs.com/gudi/p/6667102.html
6 | https://www.zhihu.com/question/23444990
7 |
8 |
9 | > [www.terraform.io](https://www.terraform.io/)`跨云管理基础设施`
10 |
--------------------------------------------------------------------------------
/Skills/Document/DslGraph.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 各种Dsl语言绘制图形
3 | date: 2020-10-28 15:22:01
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [DSL绘图](#dsl绘图)
11 | - 1.1. [Plot](#plot)
12 | - 1.2. [Graphviz 绘图 和 Dot 语言](#graphviz-绘图-和-dot-语言)
13 | - 1.2.1. [工具](#工具)
14 |
15 | 💠 2024-12-12 17:50:45
16 | ****************************************
17 | # DSL绘图
18 |
19 | ## Plot
20 | > [gnuplot 5 中文手册](https://holz.gitbooks.io/gnuplot5help/content/)
21 |
22 | ## Graphviz 绘图 和 Dot 语言
23 | > [Official Site](http://www.graphviz.org/)
24 |
25 | > [参考: Graphviz绘图 - DOT语言](https://itopic.org/graphviz.html)
26 | > [参考: graphviz dot语言学习笔记](https://www.jianshu.com/p/e44885a777f0)
27 |
28 | 1. 编译输出 dot -Tsvg test.dot -o test.svg
29 |
30 | plantUML是基于Graphviz开发的
31 |
32 | ### 工具
33 | 1. vimdot
34 | 1. VSCode 的 Graphviz 插件
35 |
--------------------------------------------------------------------------------
/Skills/Document/License.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: License
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | # License
9 |
10 | > [参考: 开源协议及知识共享协议简单介绍](https://www.cnblogs.com/huaxia283611/p/LicenseIndex.html)
11 |
12 | 关于许可证 [Github许可证网](https://choosealicense.com/licenses/)
13 | 新建项目的时候可以选择 添加.gitignore和许可证类别 许可证大致分为 MIT Apache2.0 GPL
14 |
15 | - `MIT` 简单宽松的许可证,任何人可以拿代码做任何事与我无关` eg: jQuery、Rails`
16 | - `Apache` 关注于专利,这类似于MIT许可证,但它同时还包含了贡献者向用户提供专利授权相关的条款。 `Apache、SVN和NuGet`
17 | - `GPL` 关注于共享改进,这是一种copyleft许可证,要求修改项目代码的用户再次分发源码或二进制代码时,必须公布他的相关修改。 `Linux、Git`
18 |
19 |
20 | # Tips
21 | > [解读我国首个明确开源软件协议性质的判决](https://www.ipeconomy.cn/index/news/magazine_details/id/4111.html)
22 |
--------------------------------------------------------------------------------
/Skills/Document/Process.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Process
3 | date: 2024-01-13 12:22:37
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [流程图绘制](#流程图绘制)
11 | - 1.1. [drawio](#drawio)
12 | - 1.2. [excalidraw](#excalidraw)
13 | - 1.3. [plantuml](#plantuml)
14 | - 1.4. [process on](#process-on)
15 |
16 | 💠 2024-01-13 12:22:42
17 | ****************************************
18 | # 流程图绘制
19 |
20 | > [terrastruct/d2: D2 is a modern diagram scripting language that turns text to diagrams.](https://github.com/terrastruct/d2)`绘图DSL`
21 |
22 | ## drawio
23 | 一板一眼的设计,基础图标够用
24 |
25 | ## excalidraw
26 | 手绘风格,支持很多插件库,图标丰富
27 |
28 | ## plantuml
29 | 使用DSL来描绘出一个图, 类似于Graphviz
30 |
31 | ## process on
32 | 在线网站 协作时十分方便,但是单纯个人使用时,更倾向于本地绘制,同步交给Git
33 |
--------------------------------------------------------------------------------
/Skills/Document/Readme.md:
--------------------------------------------------------------------------------
1 | # 文档
2 | > 程序员最讨厌没有文档的系统,也最讨厌给系统写文档。
3 |
4 | 业务系统相关的文档会有 需求,技术调研,架构设计,需求迭代-技术设计,专项问题和方案,线上事故 等等。
5 |
6 | 个人笔记式可以使用 vscode,marktext 等软件直接写 [markdown](/Skills/Document/MarkDown.md), 然后通过 Hugo Hexo 等构建为静态文件部署到Github等静态托管。
7 |
--------------------------------------------------------------------------------
/Skills/Document/RequirementsDocument.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 需求到实现所需文档
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [需求文档](#需求文档)
11 | - 2. [技术文档](#技术文档)
12 | - 2.1. [架构图](#架构图)
13 | - 2.2. [接口文档](#接口文档)
14 | - 3. [上线CheckList](#上线checklist)
15 |
16 | 💠 2024-11-18 15:13:23
17 | ****************************************
18 | # 需求文档
19 | > 贴近多方实际诉求调研,分析有效需求,输出需求文档
20 |
21 | - [参考 如何写一份程序员爱看的需求文档?](http://www.kejilie.com/woshipm/article/6Bri6b.html)
22 |
23 | ***********************
24 | # 技术文档
25 | > 技术方案组成 5W2H. 适用于 技术调研,技术设计等文档
26 |
27 | - 背景: **why**: 现状流程, 为什么要做, 是否有替代方式
28 | - 目标: **what**: 目的和做什么 量化指标
29 | - 方案: **how**: 多个方案 优劣势分析。 **how much**: 量化不同程度的成本和产出
30 | - 结论: 选择的方案, 选择原因及注意事项
31 | - 备忘/执行计划: **who when where**
32 |
33 | ## 架构图
34 | > [diagrams](https://github.com/mingrammer/diagrams)`Python代码生成架构图,类似于plantuml的DSL`
35 |
36 | ## 接口文档
37 | > 可以使用 swagger2 和 spring data rest hal-browser 两者是接口文档
38 |
39 | showdoc是文档的共享更方便
40 |
41 | ************************
42 |
43 | # 上线CheckList
44 | > 梳理上线需求的项目范围,按顺序罗列事项及负责人,降低上线的风险。
45 |
46 | 常见问题:
47 | - 前端/后端/运维 漏合并分支,漏配置(SQL,Nginx,K8S,网络)
48 | - 上线发现配置项或逻辑不生效或要花费很大成本,但是在测试和验收时都正常
49 | - 开发,测试,灰度,生产 由于各种主客观原因导致环境不一致时,未及时对当前版本的修改做演练。
50 | - `例如只有生产对接了付费或定制的第三方API; 生产环境数据量和数据倾斜的压力远大于测试环境; 测试环境在内网生产环境在公网等等`
51 |
52 |
--------------------------------------------------------------------------------
/Skills/Document/UML.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: UML
3 | date: 2019-04-25 14:42:15
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [UML](#uml)
11 | 1. [Tool](#tool)
12 |
13 | **目录 end**|_2020-07-05 14:58_|
14 | ****************************************
15 | # UML
16 | > [个人整理](https://github.com/Kuangcp/TechGraph/tree/master/UML)
17 |
18 | > [参考: 五分钟读懂UML类图](https://www.cnblogs.com/shindo/p/5579191.html)
19 |
20 | - [wiki: list of uml tools](https://en.wikipedia.org/wiki/List_of_Unified_Modeling_Language_tools)
21 | - [免费UML软件统计 博客](http://blog.csdn.net/s464036801/article/details/8469166)
22 | - [bouml](http://www.bouml.fr/download.html#Debian) `官方网站下载`
23 | - [argouml](http://argouml.tigris.org/) `argouml官网`
24 | - [visual paradigm](https://online.visual-paradigm.com)
25 |
26 | yed astah dia
27 |
28 | - VSCode 安装 plantUML 插件
29 |
30 | ## Tool
31 | > [UML相关工具](https://alternativeto.net/software/staruml/)
32 |
33 | - [umlet](https://www.umlet.com)
34 | - [plantuml](http://plantuml.com)
35 |
--------------------------------------------------------------------------------
/Skills/Ecology/Gateway.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Gateway
3 | date: 2024-04-19 10:47:31
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [网关](#网关)
11 | - 1.1. [功能](#功能)
12 | - 2. [对比](#对比)
13 | - 2.1. [Spring Gateway](#spring-gateway)
14 | - 2.2. [Zuul](#zuul)
15 | - 2.3. [Kong](#kong)
16 | - 2.4. [Nginx](#nginx)
17 | - 2.5. [Traefik](#traefik)
18 |
19 | 💠 2024-11-20 19:35:19
20 | ****************************************
21 | # 网关
22 |
23 | ## 功能
24 | 动态路由
25 | 负载均衡
26 | 统一鉴权
27 | 审计&监控
28 | 协议转换
29 | 限流熔断
30 | 黑白名单
31 | 灰度发布 蓝绿
32 | 流量染色
33 |
34 |
35 | ************************
36 |
37 | # 对比
38 |
39 | > [apache/shenyu: Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.](https://github.com/apache/shenyu)
40 |
41 | ## Spring Gateway
42 |
43 | ## Zuul
44 |
45 | ## Kong
46 |
47 | ## Nginx
48 |
49 | ## Traefik
50 |
51 |
52 |
--------------------------------------------------------------------------------
/Skills/Ecology/HA/Readme.md:
--------------------------------------------------------------------------------
1 | 常见容错机制:failover、failfast、failback、failsafe
2 |
3 | K8S快速HA:配置CPU,内存阈值扩容和缩容
4 |
--------------------------------------------------------------------------------
/Skills/Ecology/MinIO.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MinIO
3 | date: 2024-11-18 15:13:15
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [MinIO](#minio)
11 |
12 | 💠 2024-11-18 15:13:23
13 | ****************************************
14 | # MinIO
15 | > [min.io](https://min.io/)
16 |
17 | 同类解决方案: [DFS](/Linux/Base/LinuxFile.md#dfs) | [OSS](/Skills/Ecology/OSS.md)
18 |
--------------------------------------------------------------------------------
/Skills/Ecology/OSS.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: OSS
3 | date: 2024-11-10 13:14:39
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [OSS 对象存储](#oss-对象存储)
12 |
13 | 💠 2024-11-10 13:14:39
14 | ****************************************
15 | # OSS 对象存储
16 | > [什么是对象存储?](https://cloud.google.com/learn/what-is-object-storage?hl=zh-CN)
17 |
18 | 各大云厂商有商业的OSS方案,七牛云Kodo,阿里云OSS,腾讯云COS,华为云OBS等等。
19 |
20 | > [WebDAV vs S3 vs SFTP](https://forum.duplicati.com/t/webdav-vs-s3-vs-sftp/817)
21 |
22 | 自建选择:FTP,FastDFS,HDFS,MinIO。
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Skills/Ecology/PGO.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: PGO
3 | date: 2024-04-30 22:26:23
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [Profile-guided optimization](#profile-guided-optimization)
11 |
12 | 💠 2024-04-30 23:06:06
13 | ****************************************
14 | # Profile-guided optimization
15 | > [Profile-guided optimization](https://en.wikipedia.org/wiki/Profile-guided_optimization)
16 |
17 | - PGO Profile-guided optimization
18 | - PDO feedback-directed optimization
19 | - PDF profile-directed feedback
20 |
21 |
22 | 核心思想为记录一份可靠的运行期profile,然后指导后续的应用对运行效率做针对性的优化。
23 | 相较于静态代码分析(通常由语言的编译包(编译器 优化器等)实现),运行期的分析能感知不同代码的运行频率和分支执行情况,有选择性的做JIT等优化。
24 |
25 |
--------------------------------------------------------------------------------
/Skills/GUI/GTK.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GTK
3 | date: 2021-02-19 10:14:10
4 | tags:
5 | - GUI
6 | categories:
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [GTK](#gtk)
12 |
13 | 💠 2024-11-18 14:31:55
14 | ****************************************
15 | # GTK
16 |
17 | > [Official Doc](https://www.gtk.org/docs/)
18 |
19 | [C++使用gtkmm快速开发](https://www.gtk.org/docs/language-bindings/cpp/)
20 | ```
21 | g++ -std=c++11 helloworld.cc main.cc -o helloworld `pkg-config gtkmm-3.0 --cflags --libs`
22 | ```
23 |
--------------------------------------------------------------------------------
/Skills/Media/AudioProcessing.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 音频处理
3 | date: 2025-01-09 11:48:21
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [音频处理](#音频处理)
11 | - 2. [实时](#实时)
12 | - 2.1. [采集](#采集)
13 | - 2.2. [降噪](#降噪)
14 | - 2.2.1. [Ai降噪](#ai降噪)
15 | - 2.3. [回声消除](#回声消除)
16 | - 3. [后期](#后期)
17 | - 3.1. [后期处理](#后期处理)
18 | - 3.2. [存储](#存储)
19 |
20 | 💠 2025-01-09 11:48:47
21 | ****************************************
22 | # 音频处理
23 |
24 | 音频处理按及时性分为实时处理和后期处理,按客户端实现可分为 安卓/iOS原生,H5。
25 | - [Android音频收集和播放 - 阿风小子 - 博客园](https://www.cnblogs.com/kn-zheng/p/17462295.html)
26 | - H5: Web Audio API
27 |
28 | # 实时
29 | ## 采集
30 |
31 | 设备种类: 移动端内置麦克风, 外部麦克风
32 |
33 | 麦克风的原理是将将采集的声音转换为模拟电信号,之后将模拟电信号数字化,也就是用高低电平表示的信号,在Android中有一个AudioRecord类就能录制语音,并将语音转换为PCM数据,声音在经过麦克风转换为模拟电信号并最终又转换为PCM数据,在转换为PCM数据时就要依赖于三个参数,分别是:声道数、采样位数和采样频率。
34 |
35 | > 声道数
36 |
37 | 很好理解,有单声道和立体声之分,单声道的声音只能使用一个喇叭发声(有的也处理成两个喇叭输出同一个声道的声音),立体声的PCM可以使两个喇叭都发声(一般左右声道有分工) ,更能感受到空间效果。
38 |
39 | > 采样位数
40 |
41 | 即采样值或取样值(就是将采样样本幅度量化)。它是用来衡量声音波动变化的一个参数,也可以说是声卡的分辨率。它的数值越大,分辨率也就越高,所发出声音的能力越强。
42 |
43 | 在计算机中采样位数一般有8位和16位之分,但有一点请大家注意,8位不是说把纵坐标分成8份,而是分成2的8次方即256份; 同理16位是把纵坐标分成2的16次方65536份。
44 |
45 | > 采样频率
46 |
47 | 即取样频率,指每秒钟取得声音样本的次数。采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多。由于人耳的分辨率很有限,太高的频率并不能分辨出来。在16位声卡中有22KHz、44KHz等几级,其中,22KHz相当于普通FM广播的音质,44KHz已相当于CD音质了,目前的常用采样频率都不超过48KHz。
48 |
49 | 既然知道了以上三个概念,就可以由下边的公式得出PCM文件所占容量:
50 |
51 | > 存储量= 采样频率 * 采样位数 * 声道 * 时间 / 8 (单位:byte字节数)
52 |
53 |
54 | ## 降噪
55 | JS: DynamicsCompressorNode BiquadFilterNode
56 | 安卓:
57 |
58 | ### Ai降噪
59 |
60 |
61 | ## 回声消除
62 | 安卓:通过上下两个话筒不同的音源做减法保留人声去除噪音(下端采集说话音频,上端采集背景噪音)。
63 |
64 | # 后期
65 |
66 | ## 音轨
67 | 过往的音乐录制都是单音轨,会要求一气呵成,后来拆分为多音轨,不同音轨不同的乐器或人声。在采集完成后,再将音轨按时间线合成。
68 |
69 | ## 存储
70 |
71 | > [音频格式](/Skills/Media/VideoFormat.md#音频格式)
72 |
--------------------------------------------------------------------------------
/Skills/Media/ImageFormat.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 图像格式
3 | date: 2020-05-04 19:34:08
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [图片格式](#图片格式)
11 | - 1.1. [有损](#有损)
12 | - 1.1.1. [Webp](#webp)
13 | - 1.1.2. [JPEG](#jpeg)
14 | - 1.1.3. [HEIF](#heif)
15 | - 1.2. [无损](#无损)
16 | - 1.2.1. [BMP](#bmp)
17 | - 1.2.2. [PNG](#png)
18 | - 1.2.3. [SVG](#svg)
19 |
20 | 💠 2025-06-03 11:29:27
21 | ****************************************
22 | # 图片格式
23 | > [参考: 图片格式 jpg、png、gif各有什么优缺点?什么情况下用什么格式的图片呢?](https://www.zhihu.com/question/20028452)
24 |
25 | 图片的格式,表面上是后缀不同,实际上是图片的压缩标准不一样
26 |
27 | ## 有损
28 |
29 | ### Webp
30 | > [webp_server_go](https://github.com/webp-sh/webp_server_go)
31 |
32 | 支持静态和动图
33 |
34 | ### JPEG
35 |
36 | JPEG文件必须以`0xFF DB`开头和以 `0xFF D9` 结尾(EOI)
37 |
38 | ### HEIF
39 | High Efficiency Image File Format
40 |
41 | ************************
42 |
43 | ## 无损
44 | ### BMP
45 |
46 | ### PNG
47 | > [PNG文件格式详解](https://blog.mythsman.com/post/5d2d62b4a2005d74040ef7eb/)
48 |
49 | - 数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。 `00 00 00 00 49 45 4E 44 AE 42 60 82`
50 |
51 | > [oxipng](https://github.com/shssoichiro/oxipng)`PNG压缩`
52 |
53 | ### SVG
54 |
55 | > 作为网站icon ``
56 |
--------------------------------------------------------------------------------
/Skills/Media/Readme.md:
--------------------------------------------------------------------------------
1 | # 多媒体资源
2 |
3 | > [Linux 多媒体工具](/Linux/Base/LinuxEffective.md#多媒体)
4 |
5 |
--------------------------------------------------------------------------------
/Skills/Media/VideoFormat.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 视频格式
3 | date: 2021-04-14 14:37:45
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [音视频格式](#音视频格式)
11 | - 1.1. [音频格式](#音频格式)
12 | - 1.1.1. [WAV](#wav)
13 | - 1.1.2. [FLAC](#flac)
14 | - 1.1.3. [MP3](#mp3)
15 | - 1.1.4. [HLS](#hls)
16 |
17 | 💠 2025-01-03 17:45:03
18 | ****************************************
19 | # 音视频格式
20 |
21 | > [digital_video_introduction](https://github.com/leandromoreira/digital_video_introduction)
22 |
23 | ## 音频格式
24 |
25 | WAV MP3 AAC FLAC
26 |
27 | PCM + Header = WAV(只是一层容器)
28 |
29 | > [PCM 格式 - 認識音檔(公開版本)](https://zonble.github.io/understanding_audio_files/pcm/)
30 | > [audio - Convert from PCM to WAV. Is it Possible? - Stack Overflow](https://stackoverflow.com/questions/21131595/convert-from-pcm-to-wav-is-it-possible)
31 |
32 | ### WAV
33 | ### FLAC
34 |
35 | ### MP3
36 |
37 | ### HLS
38 | > [RFC 8216 - HTTP Live Streaming](https://datatracker.ietf.org/doc/html/rfc8216)
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Skills/Network/CDN.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: CDN
3 | date: 2024-09-09 10:22:38
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [CDN](#cdn)
12 |
13 | 💠 2024-09-09 10:22:38
14 | ****************************************
15 | # CDN
16 | 例如自己注册了域名 xxx.com, 此时需要CDN服务商帮你对网站静态资源做CDN加速, 通常会提供一个域名X,让 xxx.com CNAME到 X 域名上。
17 | 使用CNAME而不是A解析 好处是,X域名的A解析掌控权在CDN服务商,其可以依据地域,时间做动态调整,而不需要去 xxx.com 的控制台改解析。
18 |
19 | > [CDN Up and Running](https://github.com/leandromoreira/cdn-up-and-running)
20 |
21 |
--------------------------------------------------------------------------------
/Skills/Network/MITM.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Man in the middle
3 | date: 2020-03-27 15:24:01
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [Man in the middle](#man-in-the-middle)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # Man in the middle
15 | > 中间人攻击
16 |
17 | TODO 2020-03-27 Github疑似遭遇此攻击
18 |
--------------------------------------------------------------------------------
/Skills/Network/Readme.md:
--------------------------------------------------------------------------------
1 | # 计算机网络
2 |
3 | ECDH
4 |
--------------------------------------------------------------------------------
/Skills/Network/Security.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 网络安全
3 | date: 2023-08-01 13:42:57
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [网络安全](#网络安全)
11 | - 1.1. [发现](#发现)
12 | - 1.1.1. [网络](#网络)
13 | - 1.1.1.1. [fping](#fping)
14 | - 1.2. [攻击](#攻击)
15 | - 1.2.1. [tcp syn flood](#tcp-syn-flood)
16 | - 1.2.2. [上传文件](#上传文件)
17 |
18 | 💠 2024-09-06 11:36:43
19 | ****************************************
20 |
21 | # 网络安全
22 | ## 发现
23 | ### 网络
24 | #### fping
25 |
26 | `fping -a -g 192.168.0.1/24`
27 | `nmap -sP 192.168.0.1/24`
28 |
29 | ************************
30 |
31 | ## 攻击
32 |
33 | ### tcp syn flood
34 | 调整内核参数,加快tcp连接回收
35 |
36 | sysctl -w net.ipv4.tcp_fin_timeout=30 # 默认60s
37 | sysctl -w net.ipv4.tcp_tw_reuse=1
38 |
39 | ### 上传文件
40 | > [upload-labs](https://github.com/c0ny1/upload-labs)`使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场`
41 |
42 |
--------------------------------------------------------------------------------
/Skills/OpenCV/Readme.md:
--------------------------------------------------------------------------------
1 | # OpenCV
2 | > 运作模式就是大量正负相关的样本训练精确度更好的分类器(xml文件 CascadeClassifier),再以此编写逻辑
3 |
4 | ## 安装试运行 图片浏览器
5 | > [arch安装opencv](https://my.oschina.net/u/4125051/blog/3071866)
6 |
7 | 1. sudo pacman -S opencv vtk hdf5 cmake
8 | - `CMakeLists.txt`
9 | ```c
10 | cmake_minimum_required(VERSION 2.10)
11 | project(test)
12 | find_package(OpenCV REQUIRED)
13 | add_executable(test main.cpp)
14 | target_link_libraries(test ${OpenCV_LIBS})
15 | ```
16 | ```cpp
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | using namespace cv;
23 | using namespace std;
24 | int main()
25 | {
26 | string filename = "/path/to/pic.jpg";
27 | Mat img = imread(filename);
28 | auto size = img.size();
29 | int w = size.width;
30 | int h = size.height;
31 | Mat re_image;
32 | resize(img,re_image,Size(w*2, h*2));
33 | while(true)
34 | {
35 | imshow(filename,re_image);
36 | int k = waitKey(0);
37 | if(k == 27){
38 | break;
39 | }
40 | }
41 | destroyAllWindows();
42 | }
43 | ```
44 | 1. cmake .
45 | 1. make
46 |
47 | ************************
48 |
49 | ## gocv
50 | > [gocv linux](https://gocv.io/getting-started/linux/)
51 |
52 | > [facedetect demo](https://github.com/hybridgroup/gocv/blob/master/cmd/facedetect/main.go)
53 |
--------------------------------------------------------------------------------
/Skills/Problem.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 问题及解决方案
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | - WIKI
7 | ---
8 |
9 | 💠
10 |
11 | - 1. [问题及解决方案](#问题及解决方案)
12 | - 1.1. [Linux](#linux)
13 | - 1.2. [JDK](#jdk)
14 |
15 | 💠 2024-03-19 10:33:48
16 | ****************************************
17 | # 问题及解决方案
18 | ## Linux
19 | > [详细](/Linux/Base/LinuxProblem.md)
20 |
21 | ## JDK
22 | > `Picked up _JAVA_OPTIONS: ` 例如这样的提示, 由于设置了 _JAVA_OPTIONS 或者 JAVA_OPTIONS 就一定会输出这个提示
23 |
24 | - [参考: Disabling Java_Options On Java Console Apps in Linux](https://nixmash.com/post/disabling-java_options-on-java-console-apps-in-linux)
25 | - [参考: Suppressing the “Picked up _JAVA_OPTIONS” message](https://superuser.com/questions/585695/suppressing-the-picked-up-java-options-message)
26 | - [参考: 理解环境变量 JAVA_TOOL_OPTIONS](https://segmentfault.com/a/1190000008545160)
27 |
28 | 但是又不能直接 unset, 这个变量似乎是用来解决字体锯齿问题的, 所以需要如下配置
29 | ```sh
30 | _SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"
31 | unset _JAVA_OPTIONS
32 | alias java='java "$_SILENT_JAVA_OPTIONS"'
33 | ```
34 | - 只需将该配置加到 `/etc/profile` 文件尾部, 这样的话, 终端不会有如上提示
35 | - 但是IDEA中输出控制台仍带有该提示, 在 `bin/idea.sh` 中也添加如上配置即可(在最后一段启动命令之前)
36 |
37 | *******************************
38 | > Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
39 | - 原因是linux自带的OpenJDK影响了安装的java, 同样的也是可以采用如上的方法, 或者:
40 | - `sudo mv /etc/profile.d/java-awt-font-gasp.sh /etc/profile.d/java-awt-font-gasp.sh.bak`
41 |
--------------------------------------------------------------------------------
/Skills/Product/User.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: User
3 | date: 2024-04-25 22:11:30
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [项目POC](#项目poc)
11 | - 2. [用户](#用户)
12 | - 2.1. [活跃度](#活跃度)
13 | - 2.2. [行为日志分析](#行为日志分析)
14 | - 2.3. [推荐](#推荐)
15 |
16 | 💠 2024-04-25 22:16:44
17 | ****************************************
18 | # 项目POC
19 | > PoC(Proof of Concept),即概念验证。
20 |
21 | > [PoC对于创新意味着什么?](https://www.woshipm.com/operate/4243656.html)
22 |
23 | # 用户
24 | > 产品设计中关于用户维度的考虑
25 |
26 | ## 活跃度
27 | > 网页端
28 | - v 访问次数
29 | - pv 页面浏览量
30 | - 页面停留时长
31 | - uv 访客数
32 | - 网站停留时长
33 | - 跳出率
34 | - 退出率
35 | - 转化率
36 |
37 | > 移动端
38 | 用户获取
39 | 用户留存
40 | 用户转化
41 |
42 | > 收入
43 | - 激活率
44 | - 付费转换率
45 | - ROI 投资回报率
46 |
47 | ## 行为日志分析
48 |
49 | ## 推荐
50 | 推荐系统一种实现方式: 每个实际用户在系统内的行为依据抽象的规则得到不同的标签,每个标签都可以看作是一个向量,找系统内两个向量距离最近的一些用户,互相推荐他们近期看过,做过的事情。
51 |
52 |
--------------------------------------------------------------------------------
/Skills/README.md:
--------------------------------------------------------------------------------
1 | # 基础技能
2 |
--------------------------------------------------------------------------------
/Skills/Search/ElasticsearchAdvance.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: ElasticsearchAdvance
3 | date: 2024-05-03 12:21:37
4 | tags:
5 | categories:
6 | ---
7 |
8 |
9 | 💠
10 |
11 | - 1. [Elasticsearch](#elasticsearch)
12 | - 1.1. [设计](#设计)
13 | - 2. [最佳实践](#最佳实践)
14 | - 2.1. [优化写入](#优化写入)
15 |
16 | 💠 2024-05-03 12:21:37
17 | ****************************************
18 | # Elasticsearch
19 | [Elasticsearch Best Practice Architecture](https://www.elastic.co/cn/pdf/architecture-best-practices.pdf)
20 |
21 | > [Elasticsearch cluster load balancing best practices](https://stackoverflow.com/questions/66098115/elasticsearch-cluster-load-balancing-best-practices)
22 |
23 | ## 设计
24 |
25 |
26 | ************************
27 |
28 | # 最佳实践
29 |
30 | > [滴滴基于 ElasticSearch 的一站式搜索中台实践](https://www.infoq.cn/article/ug*cbrk9303MiNZPrSEO)
31 |
32 | ## 优化写入
33 | > [提升 Elasticsearch 写入速度的案例分享](https://www.infoq.cn/article/t7b52mbzxqkwrrdpVqD2)
34 |
--------------------------------------------------------------------------------
/Skills/Search/Readme.md:
--------------------------------------------------------------------------------
1 | # 搜索
2 |
3 | [从零开始构建全文搜索引擎](https://mojotv.cn/go/golang-full-text-search-enginec)
4 |
5 | > [typesense](https://github.com/typesense/typesense)
6 | > [zincsearch](https://zincsearch-docs.zinc.dev/)
7 | > [opensearch-project/OpenSearch: 🔎 Open source distributed and RESTful search engine.](https://github.com/opensearch-project/OpenSearch)
8 |
--------------------------------------------------------------------------------
/Skills/SoftwareEngineering/CelebrityQuotes.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 名人名言
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [名言](#名言)
11 |
12 | **目录 end**|_2020-11-01 00:05_|
13 | ****************************************
14 | # 名言
15 | > [对开发人员有用的定律、理论](https://github.com/nusr/hacker-laws-zh)
16 |
17 | 1. [David Wheeler](https://en.wikipedia.org/wiki/David_Wheeler_%28computer_scientist%29)
18 | 1. All problems in computer science can be solved by another level of indirection.
19 | 1. 计算机科学中的任何问题都可以通过加上一层间接层来解决
20 |
21 | 1. 安迪-比尔定理 (Andy and Bill’s Law)是对IT产业中软件和硬件升级换代关系的一个概括。原话是 “Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。)
22 |
23 |
--------------------------------------------------------------------------------
/Skills/SoftwareEngineering/MIS.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: MIS
3 | date: 2018-12-20 10:42:29
4 | tags:
5 | - MIS
6 | categories:
7 | - Java
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [完整的MIS构建经验](#完整的mis构建经验)
13 | 1. [MVC](#mvc)
14 | 1. [持久化层](#持久化层)
15 | 1. [数据库设计](#数据库设计)
16 | 1. [Domain对象设计](#domain对象设计)
17 | 1. [控制层](#控制层)
18 | 1. [权限控制](#权限控制)
19 | 1. [Session和Token的对比](#session和token的对比)
20 | 1. [统一授权](#统一授权)
21 | 1. [视图层](#视图层)
22 |
23 | **目录 end**|_2020-06-24 02:06_|
24 | ****************************************
25 | # 完整的MIS构建经验
26 | > MIS: Management information system
27 |
28 | ## MVC
29 | ### 持久化层
30 | #### 数据库设计
31 | > 一种极端是将业务也放在了数据库里, 使用大量的存储过程和函数
32 | > 一种是将约束都放在了业务层, 数据库没有外键约束
33 |
34 | #### Domain对象设计
35 | 1. 首先名称不能使用Java或者数据库中的的关键字 class group table from 等等
36 | - 班级就用ClassGroup吧
37 | 1. 实体间的关系映射注意死循环
38 |
39 | ### 控制层
40 | > 只是映射好URL, 调用对应的Service
41 |
42 | #### 权限控制
43 |
44 | ##### Session和Token的对比
45 | > [码农翻身:干掉状态:从session到token ](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513566&idx=1&sn=a2688cadbe9c8042ff1abbdf04a8bd5e&chksm=80d67a1db7a1f30b28b93ed2ab29edfbf982b780433e4bfd178e3cc52cb1f9100cc8f923db4f&scene=21#wechat_redirect)
46 |
47 | - token优势是前后端分离做起来比较简单,session在于实现快,但是容易有CSRF问题,其实token也是会有的
48 | - 如果登录和页面的跳转路由还是由后端控制的,那么Token的实现就有点没有那么必要了。(不过为了安全性能够防范CSRF)
49 |
50 | ##### 统一授权
51 | > [码农翻身:从密码到token,一个授权的故事](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513744&idx=1&sn=93d0db97cfd67422bcd21c8afd00f495&chksm=80d67b53b7a1f24537fdc7c10eb2783357c1f8c65ad55601a722216d2293ae3fb7b1c16e5449&scene=21#wechat_redirect)
52 |
53 | ### 视图层
54 |
55 | *一种比较安全的iframe思路*
56 | - 在主页面上写form iframe页面用来展示,这样的话,截图截不了长图,也不能保存文件,也不能打印出来(试了好多种方式去修改教务系统得到的结论)
57 |
--------------------------------------------------------------------------------
/Skills/SoftwareEngineering/ProgrammingParadigm.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 编程范式 ProgrammingParadigm
3 | date: 2019-10-19 17:04:34
4 | tags:
5 | categories:
6 | - Engineering
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [编程范式](#编程范式)
12 | 1. [命令式编程](#命令式编程)
13 | 1. [函数式编程](#函数式编程)
14 | 1. [响应式编程](#响应式编程)
15 | 1. [逻辑式编程](#逻辑式编程)
16 |
17 | **目录 end**|_2020-04-27 23:42_|
18 | ****************************************
19 | # 编程范式
20 | - Imperative Programming (IP) 命令式编程
21 | - Functional Programming (FP) 函数式编程
22 | - Logic Programming (LP) 逻辑式编程
23 |
24 | ## 命令式编程
25 | > 编写改变状态的一条条命令
26 |
27 | ## 函数式编程
28 |
29 | - 函数式语言他把计算本身当成最重要的概念。函数式语言和过程式语言一样对值进行操作,但他不会修改输入,而是像数学函数一样返回新值
30 | - 函数被看成是一个小处理机,输入值并输出值,他们没有自己的状态,并且将他们和任何外部状态绑定在一起也没有意义
31 |
32 | > Groovy带一点函数式风格,Scala对FP的利用更为充分,Clojure是纯粹的函数式语言,没有丁点儿面向对象特性
33 |
34 | **`命令式和函数式`**
35 | - Java是典型的命令式语言,命令式语言把程序的运行状态建模为可修改的数据,用一系列的指令来改变状态。因此在命令式语言中,程序状态是核心概念
36 | - 命令式语言主要分为两类,一种是面向过程语言,一种是面向对象语言
37 | - 面向过程:Basic Fortran 这种语言将代码和数据完全分离开,有简单的代码操作数据范式
38 | - 面向对象:数据和代码(方法形式)封装在对象中,面向对象语言中或多或少会存在元数据(比如:类信息)引入的额外结构
39 |
40 | ## 响应式编程
41 | > [ReactiveX](http://reactivex.io/intro.html)
42 |
43 | 组合异步的序列 设计模式是 观察者模式的扩展, 数据结构是序列串流, 避免了并发, 是非阻塞的,常见于UI层
44 |
45 | 数据流驱动
46 |
47 | 异步 非阻塞 不是同步非阻塞 (当时不阻塞后续回调) 而是异步
48 |
49 | 多路复用
50 |
51 | ## 逻辑式编程
52 |
--------------------------------------------------------------------------------
/Skills/SoftwareEngineering/README.md:
--------------------------------------------------------------------------------
1 | # 软件工程
2 | > [参考: 禅道的敏捷开发模式](https://blog.csdn.net/gnicky/article/details/72722166)
3 |
4 | ## 设计的思考
5 |
6 | > [参考: 什么是“对用户友好”](http://www.yinwang.org/blog-cn/2012/05/18/user-friendliness)`高度抽象, 简洁`
7 |
--------------------------------------------------------------------------------
/Skills/Spider/SpiderBase.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: 爬虫基础
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [爬虫基础](#爬虫基础)
11 | - 1.1. [何为爬虫](#何为爬虫)
12 | - 1.2. [个人实践](#个人实践)
13 |
14 | 💠 2023-10-09 17:53
15 | ****************************************
16 | # 爬虫基础
17 |
18 | ## 何为爬虫
19 |
20 | ## 个人实践
21 |
22 |
--------------------------------------------------------------------------------
/Skills/Test/Cucumber.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Cucumber
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - Cucumber
6 | - BDD
7 | categories:
8 | - 测试
9 | ---
10 |
11 | **目录 start**
12 |
13 | 1. [Cucumber](#cucumber)
14 |
15 | **目录 end**|_2020-04-27 23:42_|
16 | ****************************************
17 | # Cucumber
18 | > [official](https://docs.cucumber.io/)
19 |
20 | BDD 测试框架
21 |
--------------------------------------------------------------------------------
/Skills/Test/Hamcrest.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Hamcrest
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - Hamcrest
6 | categories:
7 | - 测试
8 | ---
9 |
10 | **目录 start**
11 |
12 | 1. [Hamcrest](#hamcrest)
13 |
14 | **目录 end**|_2020-04-27 23:42_|
15 | ****************************************
16 | # Hamcrest
17 | > [官网](http://hamcrest.org/) | [开源中国介绍](https://www.oschina.net/p/hamcrest)
18 |
19 | > 测试工具, 大大简化测试时的判断, 支持多门语言
20 |
21 |
--------------------------------------------------------------------------------
/Skills/Test/Readme.md:
--------------------------------------------------------------------------------
1 | # 测试
2 |
3 | - [testcontainers](https://testcontainers.com/)`将依赖组件运行在容器内,实现完备的集成测试`
4 |
5 | ## 测试工具
6 | > [30 Best Postman Alternatives in 2024 | Free & Open Source Tools](https://apidog.com/blog/top-postman-alternative-open-source/)
7 |
8 | - Postman
9 | - [Kong/insomnia](https://github.com/Kong/insomnia)
10 | - [warmuuh/milkman: An Extensible Request/Response Workbench](https://github.com/warmuuh/milkman)
11 | > [Linux | Reqable · API抓包调试 + API测试一站式工具](https://reqable.com/zh-CN/linux/)
12 |
13 | ## 自动化测试平台
14 | - [gauge](https://github.com/getgauge/gauge)
15 | - [Robot Framework](https://github.com/robotframework)
--------------------------------------------------------------------------------
/Skills/Vcs/GitAdvance.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Git深入学习
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - Advanced
6 | categories:
7 | - 版本控制
8 | ---
9 |
10 | 💠
11 |
12 | - 1. [Git Advance](#git-advance)
13 | - 1.1. [版本控制系统(VCS)](#版本控制系统vcs)
14 | - 2. [Git实现原理](#git实现原理)
15 |
16 | 💠 2024-11-23 16:13:43
17 | ****************************************
18 | # Git Advance
19 |
20 | ## 版本控制系统(VCS)
21 | - [码农翻身:小李的版本管理系统](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513204&idx=1&sn=c4c493d771a167a84ace01c3e016417e&scene=21#wechat_redirect)
22 |
23 | - [SVN](https://subversion.apache.org/)
24 | - [submin](https://supermind.nl/submin/)`SVN管理的Web界面`
25 | - [git](https://git-scm.com/) `最好用的vcs`
26 |
27 | *********************
28 |
29 | # Git实现原理
30 |
--------------------------------------------------------------------------------
/Skills/Vcs/Readme.md:
--------------------------------------------------------------------------------
1 | # 常见VCS
2 |
3 | ## Git
4 | > 分布式的去中心化的, 大多数操作是本地化操作, 速度快, 更方便
5 | > 缺点有 处理大仓库时会很慢, 没有访问权限的控制, 不适用二进制文件管理, submodules使用不方便
6 | - 最大的区别是其他的 VCS 都是 一个增量式的文件集合, git 是文件的一系列快照, 类似于 AUFS 文件系统一层一层那样
7 |
8 | ## Repo
9 | Repo 简化了跨多个代码库运行的流程,与 Git 相辅相成
10 |
11 | ## SVN
12 | > [Svn笔记](/Skills/Vcs/Svn.md)
13 |
14 | 1. 中心化的, 代码统一保存, 如果中心发生错误, 代码会全部毁掉, 提交是必须要和服务端通信才能完成
15 | 2. 允许部分的进行修改, 下拉, 提交. 而对于Git来说一个仓库就是一个整体(Git submodule 目前也能完成, 但是还是没有SVN灵活)
16 | 3. 优点: 能够精确控制每个目录的每个人的访问权限
17 |
18 | ************************
19 |
20 | **`Git和SVN同时使用`**
21 |
22 | 可以通过 git-svn 使用Git的命令与SVN服务器进行交互
23 | > [Official doc: git-svn](https://git-scm.com/docs/git-svn)
24 |
25 | > 但是个人目前在用的方式是直接 git 和 svn 一起用, 因为项目只能用SVN的原因
26 | > [参考: 为啥要同时用 SVN 和 Git 管理项目](https://www.cnblogs.com/dasusu/p/7774469.html)
27 |
28 | 1. 避免 CRLF LF 问题
29 | ```sh
30 | git config --global core.autocrlf false
31 | git config --global core.safecrlf false
32 | ```
33 | 1. 互相忽略各自配置目录 .svn .git
34 |
35 | - 至此, 就能和团队保持一致的使用SVN, 然后自己多任务开发时, 又能使用git优秀的分支模型
36 | - 当然该场景是有限的, 也就是说只有你一个人在用git 而且团队中使用SVN时没有使用SVN的分支模型, 这个是没有问题的
37 | - 如果SVN也用了分支, 那么就要命了, 这么多分支和状态, 要靠大脑记住实时的状态就....
38 | - 还有一个点就是分工比较明确,开发中没有互相依赖,不然就需要在Git SVN都需要频繁解决冲突
39 | - 所以这只是权宜之计
40 |
41 | ## PerForce
42 |
43 | ## Mercurial
44 |
45 | ## CVS
46 |
--------------------------------------------------------------------------------
/Skills/Web/GraphQL.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: GraphQL
3 | date: 2018-11-21 10:56:52
4 | tags:
5 | - GraphQL
6 | - 基础
7 | categories:
8 | - 数据库
9 | ---
10 |
11 | 💠
12 |
13 | - 1. [GraphQL](#graphql)
14 |
15 | 💠 2024-10-12 11:35:37
16 | ****************************************
17 | # GraphQL
18 | > [Official Site](https://graphql.cn/) Graph Query Language 简称 GQL 面向图结构的查询语言
19 |
20 | 相较于传统的API,此方案创造性了提出 要什么就给什么 将接口的主导方从提供方转到调用方,优劣也是很明显,因此争议也很多,酌情按需使用。
21 |
22 |
23 | > [相关社区: GQL Standard](https://www.gqlstandards.org/)
24 |
25 | > [参考: 30分钟理解GraphQL核心概念](https://segmentfault.com/a/1190000014131950)
26 | > [参考: Github 为什么开放了一套 GraphQL 版本的 API?](https://www.oschina.net/news/78302/why-github-open-graphql-api?p=1)
27 |
--------------------------------------------------------------------------------
/Skills/Web/WebAssembly.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: WebAssembly
3 | date: 2020-02-16 22:03:34
4 | tags:
5 | categories:
6 | ---
7 |
8 | **目录 start**
9 |
10 | 1. [WebAssembly](#webassembly)
11 |
12 | **目录 end**|_2020-04-27 23:42_|
13 | ****************************************
14 | # WebAssembly
15 | > 字节码技术
16 | > [ WebAssembly 实践:如何写代码 ](https://segmentfault.com/a/1190000008402872)
17 | > [MDN WebAssembly](https://developer.mozilla.org/en-US/docs/WebAssembly)
18 |
--------------------------------------------------------------------------------
/Windows/README.md:
--------------------------------------------------------------------------------
1 | # Windows
2 |
3 | > [Atlas-OS/Atlas](https://github.com/Atlas-OS/Atlas)`裁剪优化版本`
4 |
5 | ## 安装激活
6 | > win10
7 |
8 | https://www.microsoft.com/en-gb/software-download/windows10ISO
9 | https://pureinfotech.com/create-windows-10-virtual-machine-virtualbox/
10 |
11 | https://blog.csdn.net/qq_37700257/article/details/126284196#commentBox
12 |
13 | > 常用路径
14 | 1. Windows 所有字体 C盘Windows/Fonts 目录下
15 |
16 | - git-for-windows
17 | - [cygin](http://x.cygwin.com/)
18 |
19 | > tasklist
20 | - 相当于 Linux的 ps 命令, 查看帮助为 `tasklist /?`
21 | - 按可执行文件查找运行的进程 `TASKLIST /FI "IMAGENAME eq idea64.exe"`
22 |
23 | - 资源管理器插件, 支持多标签, 类似于Chrome的使用 [clover](http://cn.ejie.me/)`但是有广告`
24 | - 可以用来根据鼠标查询进程 [process-explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer)`有效定位广告窗口`
25 |
26 | ## 工具
27 | > Windows Terminal
28 | - Alt Shift -/= 横向/竖向切分窗口
29 |
30 | ## 性能测试
31 | - Msi after burner 显卡超频 硬件监控
32 | - Aida64 电脑信息检测,稳定性测试
33 | - As ssd Benchmark 硬盘测试
34 | - HD Tune 硬盘测试
35 | - Ctystal Disk Mark 更专业硬盘测试
36 | - 3D Mark 电脑性能测试
37 |
38 |
39 | ## 网络
40 | - tracert 等同于Linux的 traceroute
41 | - ipconfig 等同于Linux的 ifconfig
42 |
43 | ## 影音
44 | [Potplayer](http://potplayer.tv/?lang=zh_CN)
45 |
46 | # Tips
47 | ## 寻找占用文件的进程
48 | > 任务管理器 -> 性能tab 右上角打开 资源监视器 -> CPU的tab 关联的句柄窗口 搜索文件名
49 |
50 |
51 |
52 | > [Win11 的效率模式和 EcoQoS 是糊弄人的东西 - V2EX](https://v2ex.com/t/928682)
53 | > [Quality of Service - Win32 apps | Microsoft Learn](https://learn.microsoft.com/en-us/windows/win32/procthread/quality-of-service)效能模式
54 |
--------------------------------------------------------------------------------
/Windows/WindowsWithHibernate.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Windows的快速启动
3 | date: 2019-01-16 20:49:28
4 | tags:
5 | categories:
6 | - Windows
7 | ---
8 |
9 | **目录 start**
10 |
11 | 1. [Windows的快速启动](#windows的快速启动)
12 | 1. [解决Linux下挂载hibernate状态分区的问题](#解决linux下挂载hibernate状态分区的问题)
13 |
14 | **目录 end**|_2020-04-27 23:42_|
15 | ****************************************
16 | # Windows的快速启动
17 | > [参考: Windows快速启动背后的功臣:休眠](https://zhuanlan.zhihu.com/p/28639474)
18 |
19 | - 从8开始, Windows开机速度显著加快了, 因为引入了快速启动这个东西, 也就是在关机的时候将一些数据缓存到 hiberfil.sys 文件上, 下次开机能加载该文件从而快速开机
20 |
21 | - 开了快速启动之后, 之后的关机就不是纯粹的关机, 而是混合模式关机 先进入休眠状态, 然后关机
22 | 1. `shutdown /s /full / t 0`
23 | 1. 或者选择重启
24 |
25 | > 分区为 hibernate 状态后, Linux挂载就只能是只读模式了
26 |
27 | ## 解决Linux下挂载hibernate状态分区的问题
28 | > [Unable to mount Windows (NTFS) filesystem due to hibernation](https://askubuntu.com/questions/145902/unable-to-mount-windows-ntfs-filesystem-due-to-hibernation) `原因以及解决方案`
29 |
30 | 1. 尝试该方法 `sudo ntfsfix /dev/sdXY`
31 | 1. 强制挂载为读写模式 `sudo mount -t ntfs-3g -o ro /dev/xx /media/xx`
32 | 1. 强制解除 hibernate 状态 `sudo mount -t ntfs-3g -o remove_hiberfile /dev/xxx /media/xxx` 依赖 ntfs-3g 包
33 |
34 | > 最后一种最为暴力, 也是通常能解决问题, 但是会造成Windows数据的丢失
35 |
--------------------------------------------------------------------------------
/Windows/Wsl.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Wsl
3 | date: 2024-09-05 11:52:54
4 | tags:
5 | categories:
6 | ---
7 |
8 | 💠
9 |
10 | - 1. [WSL](#wsl)
11 | - 2. [WSL2](#wsl2)
12 | - 2.1. [GUI](#gui)
13 | - 3. [WSA](#wsa)
14 |
15 | 💠 2024-10-15 09:56:12
16 | ****************************************
17 | # WSL
18 | > [Official Doc](https://learn.microsoft.com/zh-cn/windows/wsl/install)
19 |
20 | > [利用WSL打造Arch开发环境](https://zhuanlan.zhihu.com/p/51270874)
21 |
22 | # WSL2
23 | - `启动发行版` wsl -d Name
24 |
25 | > 更换磁盘地址
26 |
27 | - 导出已有发行版 `wsl --export Ubuntu D:/wsl/Ubuntu-disk.tar`
28 | - 导入成为新的发行版并设置数据存放目录 `wsl --import Ubuntu2 D:/wsl/Ubuntu2 D:/wsl/Ubuntu-disk.tar`
29 | - 删除旧发行版 `wsl --unregister Ubuntu`
30 |
31 | ## GUI
32 | > [wslg](https://github.com/microsoft/wslg)
33 | > [Run Linux GUI apps with WSL | Microsoft Learn](https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps)
34 |
35 |
36 | # WSA
37 | [适用于 Android™️ 的 Windows 子系统](https://learn.microsoft.com/zh-cn/windows/android/wsa/)
38 |
--------------------------------------------------------------------------------
/wordRecord.sh:
--------------------------------------------------------------------------------
1 | hasCommandByType(){
2 | if type $1 2>/dev/null; then
3 | echo 1
4 | else
5 | echo 0
6 | fi
7 | }
8 |
9 | result=$(hasCommandByType countzh)
10 | result=$(echo $result | grep is)
11 | if test -z "$result" ; then
12 | echo "countzh not install, start install"
13 | go install github.com/kuangcp/gobase/toolbox/countzh@latest
14 | fi
15 |
16 | logFile=submission.log
17 |
18 | if [ "$1"z = "z" ];then
19 | word=$(countzh -s)
20 | line=$(git ls-files | grep -v "ARTS" | xargs cat | wc -l)
21 | # echo "$word $line lines on $time " >> $logFile
22 | echo "$word $line lines" >> $logFile
23 | else
24 | less $logFile
25 | fi
26 |
--------------------------------------------------------------------------------