[{"content":"https://blog.csdn.net/Javachichi/article/details/140660754 git初始化配置\ngit config --global user.name 你的用户名 git config --global user.email 你的邮箱地址 查看配置\ngit config --list #如果信息太多，可以输入 q 退出 初始化\ngit init 添加文件\r# .的意思是当前目录下所有变化都暂存 git add . git commit -m \u0026#39;提交的内容说明\u0026#39; 查看提交日志\rgit log\r一行输出\rgit log --oneline 开发分支（dev）上的代码达到上线的标准后，要合并到 master 分支 git checkout dev\rgit pull\rgit checkout master\rgit merge dev\rgit push -u origin master 当master代码改动了，需要更新开发分支（dev）上的代码 git checkout master git pull git checkout dev\rgit merge master git push -u origin dev 查看提交状态\nRui@LAPTOP-8FUTVEPF MINGW64 /d/Code/git_test (master)\r$ git status\rOn branch master\rnothing to commit, working tree clean ","permalink":"https://rqbaby.cloud/posts/git/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/Javachichi/article/details/140660754\"\u003ehttps://blog.csdn.net/Javachichi/article/details/140660754\u003c/a\u003e\ngit初始化配置\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit config --global user.name 你的用户名  \r\ngit config --global user.email 你的邮箱地址  \n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e查看配置\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit config --list  \r\n#如果信息太多，可以输入 q 退出  \n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e初始化\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit init\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e添加文件\r\n# .的意思是当前目录下所有变化都暂存  \r\ngit add .  \r\ngit commit -m \u0026#39;提交的内容说明\u0026#39;  \r\n查看提交日志\r\ngit log\r\n一行输出\r\ngit log --oneline \n\u003c/code\u003e\u003c/pre\u003e\u003col\u003e\n\u003cli\u003e开发分支（dev）上的代码达到上线的标准后，要合并到 master 分支\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit checkout dev\r\ngit pull\r\ngit checkout master\r\ngit merge dev\r\ngit push -u origin master\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e当master代码改动了，需要更新开发分支（dev）上的代码\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit checkout master \r\ngit pull \r\ngit checkout dev\r\ngit merge master \r\ngit push -u origin dev\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250104235012.png\" alt=\"Pasted image 20250104235012\"\u003e\n\n查看提交状态\u003c/p\u003e","title":"Git"},{"content":" ","permalink":"https://rqbaby.cloud/posts/jvm%E5%8E%9F%E7%90%86/","summary":"\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020260122163126.png\" alt=\"Pasted image 20260122163126\"\u003e\n\u003c/p\u003e","title":"JVM原理"},{"content":"https://alekschen.github.io/post/2504-cursor-figma-mcp/ figma mcp 配置： 全局下载，启动本地端口：\npnpx figma-developer-mcp --figma-api-key=\u0026lt;YOUR_FIGMA_API_KEY\u0026gt; cursor中配置：\n{ \u0026#34;mcpServers\u0026#34;: { \u0026#34;Figma\u0026#34;: { \u0026#34;url\u0026#34;: \u0026#34;http://localhost:3333/sse\u0026#34; } } } mastergo\n{\r\u0026#34;mcpServers\u0026#34;: {\r\u0026#34;mastergo-magic-mcp\u0026#34;: {\r\u0026#34;command\u0026#34;: \u0026#34;npx\u0026#34;,\r\u0026#34;args\u0026#34;: [\r\u0026#34;-y\u0026#34;,\r\u0026#34;@mastergo/magic-mcp\u0026#34;,\r\u0026#34;--token=\u0026lt;YOUR_MASTERGO_TOKEN\u0026gt;\u0026#34;, \u0026#34;--url=https://mastergo.com\u0026#34;\r],\r\u0026#34;env\u0026#34;: {\r\u0026#34;NPM_CONFIG_REGISTRY\u0026#34;: \u0026#34;https://registry.npmjs.org/\u0026#34;\r}\r}\r}\r} mcp-feedback-enhanced：\n{\r\u0026#34;mcpServers\u0026#34;: {\r\u0026#34;mcp-feedback-enhanced\u0026#34;: {\r\u0026#34;command\u0026#34;: \u0026#34;uvx\u0026#34;,\r\u0026#34;args\u0026#34;: [\r\u0026#34;mcp-feedback-enhanced@latest\u0026#34;\r]\r}\r}\r} context7：\n{\r\u0026#34;mcpServers\u0026#34;: {\r\u0026#34;context7\u0026#34;: {\r\u0026#34;command\u0026#34;: \u0026#34;npx\u0026#34;,\r\u0026#34;args\u0026#34;: [\r\u0026#34;-y\u0026#34;,\r\u0026#34;@upstash/context7-mcp@latest\u0026#34;\r],\r\u0026#34;env\u0026#34;: {\r\u0026#34;DEFAULT_MINIMUM_TOKENS\u0026#34;: \u0026#34;10000\u0026#34;\r}\r}\r}\r} ","permalink":"https://rqbaby.cloud/posts/mcp%E9%85%8D%E7%BD%AE/","summary":"\u003cp\u003e\u003ca href=\"https://alekschen.github.io/post/2504-cursor-figma-mcp/\"\u003ehttps://alekschen.github.io/post/2504-cursor-figma-mcp/\u003c/a\u003e\nfigma mcp 配置：\n全局下载，启动本地端口：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epnpx figma-developer-mcp --figma-api-key\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u0026lt;YOUR_FIGMA_API_KEY\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020251022115557.png\" alt=\"Pasted image 20251022115557\"\u003e\n\ncursor中配置：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"nt\"\u003e\u0026#34;mcpServers\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"nt\"\u003e\u0026#34;Figma\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\t\u003cspan class=\"nt\"\u003e\u0026#34;url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;http://localhost:3333/sse\u0026#34;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\t\u003cspan class=\"p\"\u003e}\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\t\u003cspan class=\"p\"\u003e}\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003emastergo\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{\r\n\r\n  \u0026#34;mcpServers\u0026#34;: {\r\n\r\n    \u0026#34;mastergo-magic-mcp\u0026#34;: {\r\n\r\n      \u0026#34;command\u0026#34;: \u0026#34;npx\u0026#34;,\r\n\r\n      \u0026#34;args\u0026#34;: [\r\n\r\n        \u0026#34;-y\u0026#34;,\r\n\r\n        \u0026#34;@mastergo/magic-mcp\u0026#34;,\r\n\r\n        \u0026#34;--token=\u0026lt;YOUR_MASTERGO_TOKEN\u0026gt;\u0026#34;,\n\r\n        \u0026#34;--url=https://mastergo.com\u0026#34;\r\n\r\n      ],\r\n\r\n      \u0026#34;env\u0026#34;: {\r\n\r\n        \u0026#34;NPM_CONFIG_REGISTRY\u0026#34;: \u0026#34;https://registry.npmjs.org/\u0026#34;\r\n\r\n      }\r\n\r\n    }\r\n\r\n  }\r\n\r\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003emcp-feedback-enhanced：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{\r\n\r\n  \u0026#34;mcpServers\u0026#34;: {\r\n\r\n    \u0026#34;mcp-feedback-enhanced\u0026#34;: {\r\n\r\n      \u0026#34;command\u0026#34;: \u0026#34;uvx\u0026#34;,\r\n\r\n      \u0026#34;args\u0026#34;: [\r\n\r\n        \u0026#34;mcp-feedback-enhanced@latest\u0026#34;\r\n\r\n      ]\r\n\r\n    }\r\n\r\n  }\r\n\r\n}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003econtext7：\u003c/p\u003e","title":"MCP配置"},{"content":"nvm list available， 查看网络可以安装的版本 https://nodejs.org/en/download/releases nvm install 14.14.0 nvm use 14.14.0 node -v npm -v\n","permalink":"https://rqbaby.cloud/posts/nvm%E4%BD%BF%E7%94%A8/","summary":"\u003cp\u003envm list available， 查看网络可以安装的版本 \u003ca href=\"https://nodejs.org/en/download/releases\"\u003ehttps://nodejs.org/en/download/releases\u003c/a\u003e\nnvm install 14.14.0\nnvm use 14.14.0\nnode -v\nnpm -v\u003c/p\u003e","title":"nvm使用"},{"content":"文档：[https://17.reactjs.org/docs/getting-started.html]\n核心要点 你想做的事 React 里常用 Vue 里常用 页面加载后执行一次 useEffect(\u0026hellip;, []) onMounted 页面销毁前清理 useEffect 返回清理函数 onUnmounted 监听某个值变化 useEffect(\u0026hellip;, [value]) watch 自动追踪依赖执行副作用 useEffect（手动写依赖） watchEffect 根据状态计算新值 useMemo computed 代码整理： hello world 注意需要使用==type=\u0026ldquo;text/jsx\u0026rdquo;==\n\u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Title\u0026lt;/title\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react@18/umd/react.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react-dom@18/umd/react-dom.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/@babel/standalone/babel.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;div id=\u0026#34;root\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; const element = \u0026lt;h1\u0026gt;Hello, world\u0026lt;/h1\u0026gt;; ReactDOM.render(element, document.getElementById(\u0026#39;root\u0026#39;)); \u0026lt;/script\u0026gt; \u0026lt;/html\u0026gt; 时钟：\n\u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Title\u0026lt;/title\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react@17/umd/react.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react-dom@17/umd/react-dom.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;style\u0026gt; \u0026lt;/style\u0026gt;\u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;div id=\u0026#34;root\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; function tick() { const element = ( \u0026lt;div\u0026gt; \u0026lt;h1\u0026gt;Hello, world!\u0026lt;/h1\u0026gt; \u0026lt;h2\u0026gt;It is {new Date().toLocaleTimeString()}.\u0026lt;/h2\u0026gt; \u0026lt;/div\u0026gt; ); ReactDOM.render(element, document.getElementById(\u0026#39;root\u0026#39;)); } setInterval(tick, 1000); \u0026lt;/script\u0026gt; \u0026lt;/html\u0026gt; jsx:\n\u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; const name = \u0026#39;lkr\u0026#39;; const element = \u0026lt;h1\u0026gt;Hello,{name}\u0026lt;/h1\u0026gt; ReactDOM.render( element, document.getElementById(\u0026#39;root\u0026#39;) ); \u0026lt;/script\u0026gt; 使用函数调用\n\u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; function formatName(user){ return user.firstName+\u0026#39; \u0026#39;+user.lastName; } const user = { firstName:\u0026#39;liao\u0026#39;, lastName:\u0026#39;kongrui\u0026#39; } const element = ( \u0026lt;div\u0026gt; \u0026lt;h1\u0026gt;Hello,{formatName(user)}\u0026lt;/h1\u0026gt; \u0026lt;/div\u0026gt; ) ReactDOM.render( element, document.getElementById(\u0026#39;root\u0026#39;) ) \u0026lt;/script\u0026gt; \u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; const user = { firstName: \u0026#39;liao\u0026#39;, lastName: \u0026#39;kongrui\u0026#39; } function formatName(user) { return user.firstName + \u0026#39; \u0026#39; + user.lastName; } function getGreeting(user) { if (user) { return (\u0026lt;h1\u0026gt;hello,{formatName(user)}\u0026lt;/h1\u0026gt;); } else { return (\u0026lt;h1\u0026gt;hello,stronger\u0026lt;/h1\u0026gt;) } } const element = ( \u0026lt;div\u0026gt; \u0026lt;h1\u0026gt;{getGreeting(user)}\u0026lt;/h1\u0026gt; \u0026lt;h1\u0026gt;{getGreeting()}\u0026lt;/h1\u0026gt; \u0026lt;/div\u0026gt; ) ReactDOM.render( element, document.getElementById(\u0026#39;root\u0026#39;) ) \u0026lt;/script\u0026gt; 组件思想\n\u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; function Welcome(prop) { return \u0026lt;h1\u0026gt;Welcome,{prop.name}\u0026lt;/h1\u0026gt; } const element = \u0026lt;Welcome name=\u0026#34;rui\u0026#34;/\u0026gt; ReactDOM.render( element, document.getElementById(\u0026#39;root\u0026#39;) ) \u0026lt;/script\u0026gt; App封装思想\n\u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; function Welcome(prop) { return \u0026lt;h1\u0026gt;Welcome,{prop.name}\u0026lt;/h1\u0026gt; } function App() { return ( \u0026lt;div\u0026gt; \u0026lt;Welcome name=\u0026#34;rui\u0026#34;/\u0026gt; \u0026lt;Welcome name=\u0026#34;xiaoliao\u0026#34;/\u0026gt; \u0026lt;Welcome name=\u0026#34;zhangsan\u0026#34;/\u0026gt; \u0026lt;/div\u0026gt; ) } ReactDOM.render( \u0026lt;App/\u0026gt;, document.getElementById(\u0026#39;root\u0026#39;) ) \u0026lt;/script\u0026gt; 组件信息传递\n\u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Title\u0026lt;/title\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react@17/umd/react.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react-dom@17/umd/react-dom.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/@babel/standalone/babel.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;style\u0026gt; \u0026lt;/style\u0026gt;\u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;div id=\u0026#34;root\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; function Comment(props) { return ( \u0026lt;div className=\u0026#34;Comment\u0026#34;\u0026gt; \u0026lt;div className=\u0026#34;UserInfo\u0026#34;\u0026gt; \u0026lt;Author author={props.author}/\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; text: {props.text} \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; date: {formatDate(props.date)} \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ) } function Author(props) { return ( \u0026lt;div className=\u0026#34;UserInfo\u0026#34;\u0026gt; \u0026lt;Avatar author={props.author}/\u0026gt; \u0026lt;div className=\u0026#34;UserInfo-name\u0026#34;\u0026gt; {props.author.name} \u0026lt;/div\u0026gt; \u0026lt;/div\u0026gt; ); } function Avatar(props) { return ( \u0026lt;img className=\u0026#34;Avatar\u0026#34; src={props.author.avatarUrl} alt={props.author.name} /\u0026gt; ); } const comment = { author: { name: \u0026#39;rui\u0026#39;, avatarUrl: \u0026#39;https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png\u0026#39; }, text: \u0026#39;百度一下吧\u0026#39;, date: new Date(), } function formatDate(date) { return date.toLocaleDateString() } function App() { return ( \u0026lt;div\u0026gt; \u0026lt;Comment author={comment.author} text={comment.text} date={comment.date}/\u0026gt; \u0026lt;/div\u0026gt; ) } ReactDOM.render( \u0026lt;App/\u0026gt;, document.getElementById(\u0026#39;root\u0026#39;) ) \u0026lt;/script\u0026gt; \u0026lt;/html\u0026gt; 定时器改造\n\u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; class Clock extends React.Component { // data constructor(props) { super(props); // 初始化state，包含一个date属性，值为当前日期时间 this.state = {date: new Date()} } // mounted componentDidMount() { // 设置定时器，每1000毫秒（即1秒）执行一次tick方法 this.timeID = setInterval(() =\u0026gt; this.tick(), 1000) } // 组件卸载前执行的方法，用于清除定时器 // beforeDestroy componentWillUnmount() { clearInterval(this.timeID) } //methods tick() { // 调用setState方法，更新date属性为当前日期时间 this.setState({ date: new Date() }) } render() { return ( \u0026lt;div\u0026gt; \u0026lt;h1\u0026gt;Hello, world!\u0026lt;/h1\u0026gt; \u0026lt;h2\u0026gt;It is {this.state.date.toLocaleTimeString()}.\u0026lt;/h2\u0026gt; \u0026lt;/div\u0026gt; ) } } ReactDOM.render( \u0026lt;Clock/\u0026gt;, document.getElementById(\u0026#39;root\u0026#39;) ); \u0026lt;/script\u0026gt; todoList\n\u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Title\u0026lt;/title\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react@18/umd/react.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/react-dom@18/umd/react-dom.development.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;script src=\u0026#34;https://unpkg.com/@babel/standalone/babel.min.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;div id=\u0026#34;root\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;script type=\u0026#34;text/jsx\u0026#34;\u0026gt; function TodoList() { const [todos, setTodos] = React.useState([]); const [inputValue, setInputValue] = React.useState(\u0026#39;\u0026#39;); // 添加任务 const handleAdd = () =\u0026gt; { if (inputValue.trim() === \u0026#39;\u0026#39;) return; setTodos([...todos, { id: Date.now(), text: inputValue, completed: false }]); setInputValue(\u0026#39;\u0026#39;); }; // 删除任务 const handleDelete = (id) =\u0026gt; { setTodos(todos.filter(todo =\u0026gt; todo.id !== id)); }; // 切换任务状态 const handleToggle = (id) =\u0026gt; { setTodos(todos.map(todo =\u0026gt; todo.id === id ? {...todo, completed: !todo.completed} : todo )); }; return ( \u0026lt;div style={{maxWidth: \u0026#39;500px\u0026#39;, margin: \u0026#39;20px auto\u0026#39;, padding: \u0026#39;20px\u0026#39;}}\u0026gt; \u0026lt;h1\u0026gt;待办事项\u0026lt;/h1\u0026gt; {/* 输入区域 */} \u0026lt;div style={{marginBottom: \u0026#39;20px\u0026#39;}}\u0026gt; \u0026lt;input type=\u0026#34;text\u0026#34; value={inputValue} onChange={(e) =\u0026gt; setInputValue(e.target.value)} onKeyPress={(e) =\u0026gt; e.key === \u0026#39;Enter\u0026#39; \u0026amp;\u0026amp; handleAdd()} placeholder=\u0026#34;请输入待办事项\u0026#34; style={{padding: \u0026#39;5px\u0026#39;, marginRight: \u0026#39;10px\u0026#39;}} /\u0026gt; \u0026lt;button onClick={handleAdd}\u0026gt;添加\u0026lt;/button\u0026gt; \u0026lt;/div\u0026gt; {/* 列表区域 */} \u0026lt;ul style={{listStyle: \u0026#39;none\u0026#39;, padding: 0}}\u0026gt; {todos.map(todo =\u0026gt; ( \u0026lt;li key={todo.id} style={{ display: \u0026#39;flex\u0026#39;, alignItems: \u0026#39;center\u0026#39;, marginBottom: \u0026#39;10px\u0026#39;, padding: \u0026#39;10px\u0026#39;, backgroundColor: \u0026#39;#f5f5f5\u0026#39;, borderRadius: \u0026#39;5px\u0026#39; }}\u0026gt; \u0026lt;input type=\u0026#34;checkbox\u0026#34; checked={todo.completed} onChange={() =\u0026gt; handleToggle(todo.id)} /\u0026gt; \u0026lt;span style={{ marginLeft: \u0026#39;10px\u0026#39;, flex: 1, textDecoration: todo.completed ? \u0026#39;line-through\u0026#39; : \u0026#39;none\u0026#39; }}\u0026gt; {todo.text} \u0026lt;/span\u0026gt; \u0026lt;button onClick={() =\u0026gt; handleDelete(todo.id)}\u0026gt;删除\u0026lt;/button\u0026gt; \u0026lt;/li\u0026gt; ))} \u0026lt;/ul\u0026gt; \u0026lt;/div\u0026gt; ); } const root = ReactDOM.createRoot(document.getElementById(\u0026#39;root\u0026#39;)); root.render(\u0026lt;TodoList /\u0026gt;); \u0026lt;/script\u0026gt; \u0026lt;/html\u0026gt; ","permalink":"https://rqbaby.cloud/posts/react/","summary":"\u003cp\u003e文档：[https://17.reactjs.org/docs/getting-started.html]\u003c/p\u003e\n\u003ch2 id=\"核心要点\"\u003e核心要点\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e你想做的事\u003c/th\u003e\n          \u003cth\u003eReact 里常用\u003c/th\u003e\n          \u003cth\u003eVue 里常用\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e页面加载后执行一次\u003c/td\u003e\n          \u003ctd\u003euseEffect(\u0026hellip;, [])\u003c/td\u003e\n          \u003ctd\u003eonMounted\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e页面销毁前清理\u003c/td\u003e\n          \u003ctd\u003euseEffect 返回清理函数\u003c/td\u003e\n          \u003ctd\u003eonUnmounted\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e监听某个值变化\u003c/td\u003e\n          \u003ctd\u003euseEffect(\u0026hellip;, [value])\u003c/td\u003e\n          \u003ctd\u003ewatch\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e自动追踪依赖执行副作用\u003c/td\u003e\n          \u003ctd\u003euseEffect（手动写依赖）\u003c/td\u003e\n          \u003ctd\u003ewatchEffect\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e根据状态计算新值\u003c/td\u003e\n          \u003ctd\u003euseMemo\u003c/td\u003e\n          \u003ctd\u003ecomputed\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"代码整理\"\u003e代码整理：\u003c/h2\u003e\n\u003cp\u003ehello world\n注意需要使用==type=\u0026ldquo;text/jsx\u0026rdquo;==\u003c/p\u003e","title":"React"},{"content":"前端开发\n精通 HTML、CSS、JavaScript，熟悉页面结构与布局，掌握 ES6+ 新特性 熟练使用 Flex、Grid、媒体查询，能够实现高性能响应式页面开发 熟练掌握 Vue.js 技术栈（Vuex、Vue Router、Axios），具备 React / React Native 跨端开发能力 熟悉 微信小程序开发，掌握 UniApp 跨平台框架 熟练使用 Element Plus、ECharts、Ant Design、Vant 等主流组件库 后端开发 熟练掌握 Java 基础语法，熟悉 Spring Boot、MyBatis-Plus 框架，具备后端接口开发与工程化能力 熟悉 Node.js（Express），能够进行全栈开发 熟练掌握 Python 基础语法，熟悉 Django、Flask 及常用爬虫库 具备 自研加密算法工程化落地、性能优化（多线程、JVM 调优、流式读取）的实践经验 移动端开发 熟悉 Android 原生开发，具备代码重构与性能优化经验 掌握 跨端开发（React Native / UniApp），支持移动端与桌面端适配 数据库与存储 熟悉 MySQL、MongoDB、OpenGauss 等数据库，具备数据库建模与优化能力 理解 数据安全与加密策略，掌握 国密算法（SM2/SM3/SM4） 运维与部署 熟悉 Linux 基础命令，具备软件部署与运维能力 熟悉 Docker、Jenkins，具备 CI/CD 自动化部署 实践经验 能独立编写 Shell/PowerShell 脚本，支持一键化构建与上线 协作与工具 熟练使用 Git，能够配合 GitHub/GitLab/Gitee 进行多人协作开发 熟悉 敏捷开发流程，具备跨团队协作与项目推进能力 ","permalink":"https://rqbaby.cloud/posts/%E6%8A%80%E6%9C%AF%E6%A0%88/","summary":"\u003cp\u003e前端开发\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e精通 HTML、CSS、JavaScript，熟悉页面结构与布局，掌握 ES6+ 新特性\u003c/li\u003e\n\u003cli\u003e熟练使用 Flex、Grid、媒体查询，能够实现高性能响应式页面开发\u003c/li\u003e\n\u003cli\u003e熟练掌握 Vue.js 技术栈（Vuex、Vue Router、Axios），具备 React / React Native 跨端开发能力\u003c/li\u003e\n\u003cli\u003e熟悉 微信小程序开发，掌握 UniApp 跨平台框架\u003c/li\u003e\n\u003cli\u003e熟练使用 Element Plus、ECharts、Ant Design、Vant 等主流组件库\n后端开发\u003c/li\u003e\n\u003cli\u003e熟练掌握 Java 基础语法，熟悉 Spring Boot、MyBatis-Plus 框架，具备后端接口开发与工程化能力\u003c/li\u003e\n\u003cli\u003e熟悉 Node.js（Express），能够进行全栈开发\u003c/li\u003e\n\u003cli\u003e熟练掌握 Python 基础语法，熟悉 Django、Flask 及常用爬虫库\u003c/li\u003e\n\u003cli\u003e具备 自研加密算法工程化落地、性能优化（多线程、JVM 调优、流式读取）的实践经验\n移动端开发\u003c/li\u003e\n\u003cli\u003e熟悉 Android 原生开发，具备代码重构与性能优化经验\u003c/li\u003e\n\u003cli\u003e掌握 跨端开发（React Native / UniApp），支持移动端与桌面端适配\n数据库与存储\u003c/li\u003e\n\u003cli\u003e熟悉 MySQL、MongoDB、OpenGauss 等数据库，具备数据库建模与优化能力\u003c/li\u003e\n\u003cli\u003e理解 数据安全与加密策略，掌握 国密算法（SM2/SM3/SM4）\n运维与部署\u003c/li\u003e\n\u003cli\u003e熟悉 Linux 基础命令，具备软件部署与运维能力\u003c/li\u003e\n\u003cli\u003e熟悉 Docker、Jenkins，具备 CI/CD 自动化部署 实践经验\u003c/li\u003e\n\u003cli\u003e能独立编写 Shell/PowerShell 脚本，支持一键化构建与上线\n协作与工具\u003c/li\u003e\n\u003cli\u003e熟练使用 Git，能够配合 GitHub/GitLab/Gitee 进行多人协作开发\u003c/li\u003e\n\u003cli\u003e熟悉 敏捷开发流程，具备跨团队协作与项目推进能力\u003c/li\u003e\n\u003c/ul\u003e","title":"技术栈"},{"content":"webstorm 代码格式化： mac：win+alt+L\nwindows: ctrl+alt+L 展开代码块： Ctrl + NumPad + 折叠代码块： Ctrl + NumPad-\nvscode 格式化： windows: shift + alt +F react 快速生成模板： rfc (快速创建一个组件fun) rcc （快速创建一个组件extends）类组件 rconst 快速创建一个 constuctor rcep 快速创建一个组件（使用extends方式） rcredux 快速创建一个 redux格式的类模板\nobsidian： 复选框：ctrl + L\n","permalink":"https://rqbaby.cloud/posts/%E5%BF%AB%E6%8D%B7%E9%94%AE/","summary":"\u003cp\u003ewebstorm\n代码格式化：\nmac：win+alt+L\u003cbr\u003e\nwindows: ctrl+alt+L\n展开代码块：\nCtrl + NumPad +\n折叠代码块：\nCtrl + NumPad-\u003c/p\u003e\n\u003cp\u003evscode\n格式化：\nwindows: shift + alt +F\nreact 快速生成模板：\nrfc (快速创建一个组件fun)\nrcc （快速创建一个组件extends）类组件\nrconst 快速创建一个 constuctor\nrcep 快速创建一个组件（使用extends方式）\nrcredux 快速创建一个 redux格式的类模板\u003c/p\u003e","title":"快捷键"},{"content":"单行文本\noverflow: hidden;\rwhite-space: nowrap;\rtext-overflow: ellipsis; 多行文本\ndisplay: -webkit-box;\r-webkit-box-orient: vertical;\r-webkit-line-clamp: 3;/* 设置为想要的行数 */\roverflow: hidden;\rtext-overflow: ellipsis; nvue\noverflow: hidden;\rtext-overflow: ellipsis;\rdisplay: -webkit-box;\r-webkit-box-orient: vertical;\r-webkit-line-clamp: 1; /* 显示的行数 */\rlines: 1; /* NVUE下要用这个属性，来让文字超出隐藏变省略号 */ ","permalink":"https://rqbaby.cloud/posts/css%E7%9C%81%E7%95%A5%E5%8F%B7/","summary":"\u003cp\u003e单行文本\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eoverflow: hidden;\r\nwhite-space: nowrap;\r\ntext-overflow: ellipsis;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e多行文本\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003edisplay: -webkit-box;\r\n-webkit-box-orient: vertical;\r\n-webkit-line-clamp: 3;/* 设置为想要的行数 */\r\noverflow: hidden;\r\ntext-overflow: ellipsis;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003envue\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eoverflow: hidden;\r\n\r\ntext-overflow: ellipsis;\r\n\r\ndisplay: -webkit-box;\r\n\r\n-webkit-box-orient: vertical;\r\n\r\n-webkit-line-clamp: 1; /* 显示的行数 */\r\n\r\nlines: 1; /* NVUE下要用这个属性，来让文字超出隐藏变省略号 */\n\u003c/code\u003e\u003c/pre\u003e","title":"CSS省略号"},{"content":"https://www.elastic.co/cn/downloads/past-releases/ 下载Elasticsearch 9.2.4 Kibana 9.2.4 Logstash 9.2.4 分别下载windows版本zip并解压\n安装Elasticsearch插件 中文分词器： https://github.com/infinilabs/analysis-ik/releases 在Elasticsearch 安装目录bin下面执行命令：\nD:\\App\\elasticsearch\\bin\u0026gt;elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/9.2.4 warning: ignoring JAVA_HOME=D:\\App\\Java\\jdk-11; using bundled JDK -\u0026gt; Installing https://get.infini.cloud/elasticsearch/analysis-ik/9.2.4 -\u0026gt; Downloading https://get.infini.cloud/elasticsearch/analysis-ik/9.2.4 [=================================================] 100%?? WARNING: this plugin contains a legacy Security Policy file. Starting with version 8.18, Entitlements replace SecurityManager as the security mechanism. Plugins must migrate their policy files to the new format. For more information, please refer to https://www.elastic.co/guide/en/elasticsearch/plugins/current/creating-classic-plugins.html @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: plugin requires additional entitlements @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * outbound_network See https://www.elastic.co/guide/en/elasticsearch/plugins/current/creating-classic-plugins.html for descriptions of what these entitlements allow and the associated risks. Continue with installation? [y/N]y -\u0026gt; Installed analysis-ik -\u0026gt; Please restart Elasticsearch to activate any plugins installed D:\\App\\elasticsearch\\bin\u0026gt; Logstash需要下载logstash.conf 放在根目录 配置文件地址：https://github.com/macrozheng/mall/blob/teach/document/elk/logstash.conf\n\u0026ldquo;D:\\App\\logstash\\logstash.conf\u0026rdquo;:\ninput {\rtcp {\rmode =\u0026gt; \u0026#34;server\u0026#34;\rhost =\u0026gt; \u0026#34;0.0.0.0\u0026#34;\rport =\u0026gt; 4560\rcodec =\u0026gt; json_lines\rtype =\u0026gt; \u0026#34;debug\u0026#34;\r}\rtcp {\rmode =\u0026gt; \u0026#34;server\u0026#34;\rhost =\u0026gt; \u0026#34;0.0.0.0\u0026#34;\rport =\u0026gt; 4561\rcodec =\u0026gt; json_lines\rtype =\u0026gt; \u0026#34;error\u0026#34;\r}\rtcp {\rmode =\u0026gt; \u0026#34;server\u0026#34;\rhost =\u0026gt; \u0026#34;0.0.0.0\u0026#34;\rport =\u0026gt; 4562\rcodec =\u0026gt; json_lines\rtype =\u0026gt; \u0026#34;business\u0026#34;\r}\rtcp {\rmode =\u0026gt; \u0026#34;server\u0026#34;\rhost =\u0026gt; \u0026#34;0.0.0.0\u0026#34;\rport =\u0026gt; 4563\rcodec =\u0026gt; json_lines\rtype =\u0026gt; \u0026#34;record\u0026#34;\r}\r}\rfilter{\rif [type] == \u0026#34;record\u0026#34; {\rmutate {\rremove_field =\u0026gt; \u0026#34;port\u0026#34;\rremove_field =\u0026gt; \u0026#34;host\u0026#34;\rremove_field =\u0026gt; \u0026#34;@version\u0026#34;\r}\rjson {\rsource =\u0026gt; \u0026#34;message\u0026#34;\rremove_field =\u0026gt; [\u0026#34;message\u0026#34;]\r}\r}\r}\routput {\relasticsearch {\rhosts =\u0026gt; \u0026#34;localhost:9200\u0026#34;\rindex =\u0026gt; \u0026#34;mall-%{type}-%{+YYYY.MM.dd}\u0026#34;\r}\r} 配置环境变量：\nLS_JAVA_HOME=D:\\App\\Java\\jdk-17 然后运行Elasticsearch、Kibana、Logstash 下的bat文件（eg:elasticsearch.bat Kibana、Logstash 同理）\nLogstash 启动命令：\nD:\\App\\logstash\\bin\u0026gt;logstash -f logstash.conf Logstash conf配置检查命令：\nD:\\App\\logstash\\bin\u0026gt;logstash -f logstash.conf -t mall教程：https://www.macrozheng.com/mall/start/mall_deploy_windows.html#elasticsearch\nhttps://blog.csdn.net/qq_33191919/article/details/138118713\nelasticsearch.bat 启动后，需要记录token等信息 登录https://localhost:9200/ 输入用户名和密码，用户名：elastic 密码若没有记录可通过下面命令获取：\nC:\\Users\\your-user\u0026gt;\u0026#34;D:/App/elasticsearch/bin/elasticsearch-reset-password.bat\u0026#34; -u elastic warning: ignoring JAVA_HOME=D:\\App\\Java\\jdk-11; using bundled JDK This tool will reset the password of the [elastic] user to an autogenerated value. The password will be printed in the console. Please confirm that you would like to continue [y/N]y Password for the [elastic] user successfully reset. New value: _bE4vL5*XjsIDkLylUPs 登录后提示：\n{\r\u0026#34;name\u0026#34;: \u0026#34;LB-AIDEV1\u0026#34;,\r\u0026#34;cluster_name\u0026#34;: \u0026#34;elasticsearch\u0026#34;,\r\u0026#34;cluster_uuid\u0026#34;: \u0026#34;HEsqClXvS86EQBIrvEDNaw\u0026#34;,\r\u0026#34;version\u0026#34;: {\r\u0026#34;number\u0026#34;: \u0026#34;9.2.4\u0026#34;,\r\u0026#34;build_flavor\u0026#34;: \u0026#34;default\u0026#34;,\r\u0026#34;build_type\u0026#34;: \u0026#34;zip\u0026#34;,\r\u0026#34;build_hash\u0026#34;: \u0026#34;dfc5c38614c29a598e132c035b66160d3d350894\u0026#34;,\r\u0026#34;build_date\u0026#34;: \u0026#34;2026-01-08T22:07:25.170027027Z\u0026#34;,\r\u0026#34;build_snapshot\u0026#34;: false,\r\u0026#34;lucene_version\u0026#34;: \u0026#34;10.3.2\u0026#34;,\r\u0026#34;minimum_wire_compatibility_version\u0026#34;: \u0026#34;8.19.0\u0026#34;,\r\u0026#34;minimum_index_compatibility_version\u0026#34;: \u0026#34;8.0.0\u0026#34;\r},\r\u0026#34;tagline\u0026#34;: \u0026#34;You Know, for Search\u0026#34;\r} Kibana 入组 token（首次让 Kibana 连 ES 用） \u0026amp; \u0026quot;D:/App/elasticsearch/bin/elasticsearch-create-enrollment-token.bat\u0026quot; -s kibana\n新节点入组 token（要加新 ES 节点用） \u0026amp; \u0026quot;D:/App/elasticsearch/bin/elasticsearch-create-enrollment-token.bat\u0026quot; -s node\nHTTP CA 指纹（客户端不想导入证书时用指纹） certutil -hashfile \u0026quot;D:/App/elasticsearch/config/certs/http_ca.crt\u0026quot; SHA256\nPS C:\\Users\\your-user\u0026gt; \u0026amp; \u0026#34;D:/App/elasticsearch/bin/elasticsearch-create-enrollment-token.bat\u0026#34; -s kibana warning: ignoring JAVA_HOME=D:\\App\\Java\\jdk-17; using bundled JDK eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTk4LjE4LjAuMTo5MjAwIl0sImZnciI6ImVhZDFjMDI1ZGQ5OTVkNDc0ZDZjMzg0YjI1YzdkNTBjYmFiMjM5Mjc4ZDNlYTNmNTdlMmU4ZThlMTEwYzNkZTgiLCJrZXkiOiJXVXE5QjV3QlFWYXdqMFpJRGNJVTpUU2JDMnp2Ri16TXBXSjJtSG9McFdRIn0= PS C:\\Users\\your-user\u0026gt; \u0026amp; \u0026#34;D:/App/elasticsearch/bin/elasticsearch-create-enrollment-token.bat\u0026#34; -s node warning: ignoring JAVA_HOME=D:\\App\\Java\\jdk-17; using bundled JDK eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTk4LjE4LjAuMTo5MjAwIl0sImZnciI6ImVhZDFjMDI1ZGQ5OTVkNDc0ZDZjMzg0YjI1YzdkNTBjYmFiMjM5Mjc4ZDNlYTNmNTdlMmU4ZThlMTEwYzNkZTgiLCJrZXkiOiJXMHJBQjV3QlFWYXdqMFpJTU1JbjpRMWQwRUFyaF85RHFlV1N3UUx0eHFRIn0= PS C:\\Users\\your-user\u0026gt; certutil -hashfile \u0026#34;D:/App/elasticsearch/config/certs/http_ca.crt\u0026#34; SHA256 SHA256 的 D:/App/elasticsearch/config/certs/http_ca.crt 哈希: c9b463190445d21afbec967aca43733d61ac1313c249083f5bbb260d9e486772 CertUtil: -hashfile 命令成功完成。 PS C:\\Users\\your-user\u0026gt; Kibana地址： i Kibana has not been configured. Go to http://localhost:5601/?code=527126 to get started.\n进入网页输入 eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTk4LjE4LjAuMTo5MjAwIl0sImZnciI6ImVhZDFjMDI1ZGQ5OTVkNDc0ZDZjMzg0YjI1YzdkNTBjYmFiMjM5Mjc4ZDNlYTNmNTdlMmU4ZThlMTEwYzNkZTgiLCJrZXkiOiJXVXE5QjV3QlFWYXdqMFpJRGNJVTpUU2JDMnp2Ri16TXBXSjJtSG9McFdRIn0= 这个token\n","permalink":"https://rqbaby.cloud/posts/elk-%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e\u003ca href=\"https://www.elastic.co/cn/downloads/past-releases/\"\u003ehttps://www.elastic.co/cn/downloads/past-releases/\u003c/a\u003e\n下载Elasticsearch 9.2.4  Kibana 9.2.4 Logstash 9.2.4 分别下载windows版本zip并解压\u003c/p\u003e\n\u003cp\u003e安装Elasticsearch插件 中文分词器：\n\u003ca href=\"https://github.com/infinilabs/analysis-ik/releases\"\u003ehttps://github.com/infinilabs/analysis-ik/releases\u003c/a\u003e\n在Elasticsearch 安装目录bin下面执行命令：\u003c/p\u003e","title":"ELK 安装"},{"content":" feat: 新功能、新特性 fix: 修改 bug perf: 更改代码，以提高性能 refactor: 代码重构（重构，在不影响代码内部行为、功能下的代码修改） docs: 文档修改 style: 代码格式修改, 注意不是 css 修改（例如分号修改） test: 测试用例新增、修改 build: 影响项目构建或依赖项修改 revert: 恢复上一次提交 ci: 持续集成相关文件修改 chore: 其他修改（不在上述类型中的修改） release: 发布新版本 workflow: 工作流相关文件修改 scope: commit 影响的范围, 比如: route, component, utils, build\u0026hellip; subject: commit 的概述 body: commit 具体修改内容, 可以分为多行. footer: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接. 示例：\nfix（修复BUG） 如果修复的这个BUG只影响当前修改的文件，可不加范围。如果影响的范围比较大，要加上范围描述。\n例如这次 BUG 修复影响到全局，可以加个 global。如果影响的是某个目录或某个功能，可以加上该目录的路径，或者对应的功能名称。\n// 示例1 fix(global):修复checkbox不能复选的问题 // 示例2 下面圆括号里的 common 为通用管理的名称 fix(common): 修复字体过小的BUG，将通用管理下所有页面的默认字体大小修改为 14px // 示例3 fix: value.length -\u0026gt; values.length feat（添加新功能或新页面） feat: 添加网站主页静态页面 这是一个示例，假设对点检任务静态页面进行了一些描述。 这里是备注，可以是放BUG链接或者一些重要性的东西。 chore（其他修改） chore 的中文翻译为日常事务、例行工作，顾名思义，即不在其他 commit 类型中的修改，都可以用 chore 表示。\nchore: 将表格中的查看详情改为详情 ","permalink":"https://rqbaby.cloud/posts/git%E6%8F%90%E4%BA%A4%E8%A7%84%E8%8C%83/","summary":"\u003cul\u003e\n\u003cli\u003efeat: 新功能、新特性\u003c/li\u003e\n\u003cli\u003efix: 修改 bug\u003c/li\u003e\n\u003cli\u003eperf: 更改代码，以提高性能\u003c/li\u003e\n\u003cli\u003erefactor: 代码重构（重构，在不影响代码内部行为、功能下的代码修改）\u003c/li\u003e\n\u003cli\u003edocs: 文档修改\u003c/li\u003e\n\u003cli\u003estyle: 代码格式修改, 注意不是 css 修改（例如分号修改）\u003c/li\u003e\n\u003cli\u003etest: 测试用例新增、修改\u003c/li\u003e\n\u003cli\u003ebuild: 影响项目构建或依赖项修改\u003c/li\u003e\n\u003cli\u003erevert: 恢复上一次提交\u003c/li\u003e\n\u003cli\u003eci: 持续集成相关文件修改\u003c/li\u003e\n\u003cli\u003echore: 其他修改（不在上述类型中的修改）\u003c/li\u003e\n\u003cli\u003erelease: 发布新版本\u003c/li\u003e\n\u003cli\u003eworkflow: 工作流相关文件修改\u003c/li\u003e\n\u003c/ul\u003e\n\u003col\u003e\n\u003cli\u003escope: commit 影响的范围, 比如: route, component, utils, build\u0026hellip;\u003c/li\u003e\n\u003cli\u003esubject: commit 的概述\u003c/li\u003e\n\u003cli\u003ebody: commit 具体修改内容, 可以分为多行.\u003c/li\u003e\n\u003cli\u003efooter: 一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e\u003cstrong\u003e示例：\u003c/strong\u003e\u003c/p\u003e","title":"Git提交规范"},{"content":"https://blog.csdn.net/JasonXu94/article/details/143726390\n","permalink":"https://rqbaby.cloud/posts/jdk%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/JasonXu94/article/details/143726390\"\u003ehttps://blog.csdn.net/JasonXu94/article/details/143726390\u003c/a\u003e\u003c/p\u003e","title":"jdk安装"},{"content":"文档： https://github.com/FelixSelter/JEnv-for-Windows 教程 https://blog.csdn.net/xhy18634297976/article/details/127454312 安装：\n下载JEnv.zip到D盘解压 https://github.com/FelixSelter/JEnv-for-Windows/releases/tag/v2.2.1 修改环境变量，path中添加 D:\\App\\JEnv，并放在最上方 执行C:\\JEnv\\src\\jenv.ps1 使用poweshell执行 安装jdk，使用下面的命令进行配置 jenv add jdk17 \u0026#34;D:\\App\\Java\\jdk-17\u0026#34;\rjenv add jdk8 \u0026#34;D:\\Application\\Java\\jre1.8\u0026#34;\rjenv add jdk21 \u0026#34;D:\\App\\Java\\jdk-21\u0026#34;\rjenv list\r全局切换：\rjenv change jdk17\rjava -version 报错：\n无法加载文件 D:\\App\\JEnv\\src\\jenv.ps1。未对文件 D:\\App\\JEnv\\src\\jenv.ps1 进行数字签名。无法在当前系统上运行该脚本。有关 运行脚本和设置执行策略的详细信息，请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 + CategoryInfo : Security ","permalink":"https://rqbaby.cloud/posts/jenv%E4%BD%BF%E7%94%A8/","summary":"\u003cp\u003e文档：\n\u003ca href=\"https://github.com/FelixSelter/JEnv-for-Windows\"\u003ehttps://github.com/FelixSelter/JEnv-for-Windows\u003c/a\u003e\n教程\n\u003ca href=\"https://blog.csdn.net/xhy18634297976/article/details/127454312\"\u003ehttps://blog.csdn.net/xhy18634297976/article/details/127454312\u003c/a\u003e\n安装：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e下载JEnv.zip到D盘解压\n\u003ca href=\"https://github.com/FelixSelter/JEnv-for-Windows/releases/tag/v2.2.1\"\u003ehttps://github.com/FelixSelter/JEnv-for-Windows/releases/tag/v2.2.1\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e修改环境变量，path中添加 D:\\App\\JEnv，并放在最上方\u003c/li\u003e\n\u003cli\u003e执行C:\\JEnv\\src\\jenv.ps1 使用poweshell执行\u003c/li\u003e\n\u003cli\u003e安装jdk，使用下面的命令进行配置\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ejenv add jdk17 \u0026#34;D:\\App\\Java\\jdk-17\u0026#34;\r\njenv add jdk8 \u0026#34;D:\\Application\\Java\\jre1.8\u0026#34;\r\njenv add jdk21 \u0026#34;D:\\App\\Java\\jdk-21\u0026#34;\r\njenv list\r\n全局切换：\r\njenv change jdk17\r\njava -version\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e报错：\u003c/p\u003e","title":"Jenv使用"},{"content":"maven安装： https://blog.csdn.net/m0_73804764/article/details/139898041 idea配置： https://blog.csdn.net/qq_42057154/article/details/106114515\n","permalink":"https://rqbaby.cloud/posts/maven%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003emaven安装：\n\u003ca href=\"https://blog.csdn.net/m0_73804764/article/details/139898041\"\u003ehttps://blog.csdn.net/m0_73804764/article/details/139898041\u003c/a\u003e\nidea配置：\n\u003ca href=\"https://blog.csdn.net/qq_42057154/article/details/106114515\"\u003ehttps://blog.csdn.net/qq_42057154/article/details/106114515\u003c/a\u003e\u003c/p\u003e","title":"Maven安装"},{"content":"官方文档： https://nacos.io/docs/latest/quickstart/quick-start/?spm=5238cd80.72a042d5.0.0.5bc0cd36gYSNAV\nbin目录下 启动命令：\nstartup.cmd -m standalone 启动报错指南： https://blog.csdn.net/qq_45063782/article/details/119751892 https://blog.csdn.net/weixin_45396074/article/details/135177158\n需要在本地mysql手动创建nacos数据库 修改配置： secret.key 不得少于32位，不然会报错，直接把官方的注释解开即可\nnacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=\rnacos.core.auth.server.identity.key=serverIdentity\rnacos.core.auth.server.identity.value=serverIdentityValue\r#*************** Datasource Related Configurations ***************#\r### nacos.plugin.datasource.log.enabled=true\rspring.sql.init.platform=mysql\r### Count of DB:\rdb.num=1\r### Connect URL of DB:\rdb.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8\u0026amp;connectTimeout=1000\u0026amp;socketTimeout=3000\u0026amp;autoReconnect=true\u0026amp;useUnicode=true\u0026amp;useSSL=false\u0026amp;serverTimezone=UTC\rdb.user=root\rdb.password=123456 控制台地址： http://127.0.0.1:8080/index.html 账户名：nacos 密码 Rui@030319\n","permalink":"https://rqbaby.cloud/posts/nacos%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e官方文档：\n\u003ca href=\"https://nacos.io/docs/latest/quickstart/quick-start/?spm=5238cd80.72a042d5.0.0.5bc0cd36gYSNAV\"\u003ehttps://nacos.io/docs/latest/quickstart/quick-start/?spm=5238cd80.72a042d5.0.0.5bc0cd36gYSNAV\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003ebin目录下 启动命令：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003estartup.cmd -m standalone\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e启动报错指南：\n\u003ca href=\"https://blog.csdn.net/qq_45063782/article/details/119751892\"\u003ehttps://blog.csdn.net/qq_45063782/article/details/119751892\u003c/a\u003e\n\u003ca href=\"https://blog.csdn.net/weixin_45396074/article/details/135177158\"\u003ehttps://blog.csdn.net/weixin_45396074/article/details/135177158\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e需要在本地mysql手动创建nacos数据库\n修改配置：\nsecret.key 不得少于32位，不然会报错，直接把官方的注释解开即可\u003c/p\u003e","title":"nacos安装"},{"content":"启动命令： nohup java -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT.jar \u0026gt; /home/laibu/datasafe/log/output.log 2\u0026gt;\u0026amp;1 \u0026amp;\n启动命令（混淆版）： nohup java -javaagent:lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\n设置启动参数：\nnohup java -Xms1200m -Xmx2000m -Xmn600m -XX:+UseG1GC -XX:MaxGCPauseMillis=150 -XX:G1HeapRegionSize=16m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump/ -Xss256k -XX:+UseStringDeduplication -javaagent:lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\nnohup java -Xms1500m -Xmx2g -Xmn1g -XX:+UseG1GC -XX:MaxGCPauseMillis=150 -XX:G1HeapRegionSize=16m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump/ -Xss256k -javaagent:lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\n查看进程：\nps -ef|grep java 查看所有进程：\nps -A 杀死进程：\nkill -9 [进程号] cd /home/laibu/jmeter/test/10MB-100MB/ jmeter -n -t 10MB-100MB.jmx ","permalink":"https://rqbaby.cloud/posts/nohup%E9%83%A8%E7%BD%B2/","summary":"\u003cp\u003e启动命令：\nnohup java -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT.jar \u0026gt; /home/laibu/datasafe/log/output.log 2\u0026gt;\u0026amp;1 \u0026amp;\u003c/p\u003e\n\u003cp\u003e启动命令（混淆版）：\nnohup java -javaagent:lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\u003c/p\u003e\n\u003cp\u003e设置启动参数：\u003c/p\u003e\n\u003cp\u003enohup java -Xms1200m -Xmx2000m -Xmn600m -XX:+UseG1GC -XX:MaxGCPauseMillis=150 -XX:G1HeapRegionSize=16m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump/ -Xss256k -XX:+UseStringDeduplication -javaagent:lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\u003c/p\u003e\n\u003cp\u003enohup java -Xms1500m -Xmx2g -Xmn1g -XX:+UseG1GC -XX:MaxGCPauseMillis=150 -XX:G1HeapRegionSize=16m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump/ -Xss256k -javaagent:lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar -jar lb-permission-encrypt-sdk-0.0.1-SNAPSHOT-encrypted.jar \u0026gt; /dev/null 2\u0026gt;\u0026amp;1 \u0026amp;\u003c/p\u003e","title":"nohup部署"},{"content":"# 设置全局代理\rgit config --global https.proxy http://127.0.0.1:7890\rgit config --global https.proxy https://127.0.0.1:7890\rgit config --global http.proxy socks5://127.0.0.1:7890\rgit config --global https.proxy socks5://127.0.0.1:7890\r# 取消全局代理\rgit config --global --unset http.proxy\rgit config --global --unset https.proxy ","permalink":"https://rqbaby.cloud/posts/git%E9%85%8D%E7%BD%AE%E4%BB%A3%E7%90%86/","summary":"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# 设置全局代理\r\ngit config --global https.proxy http://127.0.0.1:7890\r\ngit config --global https.proxy https://127.0.0.1:7890\r\ngit config --global http.proxy socks5://127.0.0.1:7890\r\ngit config --global https.proxy socks5://127.0.0.1:7890\r\n\r\n# 取消全局代理\r\ngit config --global --unset http.proxy\r\ngit config --global --unset https.proxy\n\u003c/code\u003e\u003c/pre\u003e","title":"Git配置代理"},{"content":"https://blog.csdn.net/luo123_123_123/article/details/143826114\n","permalink":"https://rqbaby.cloud/posts/jar%E5%8C%85%E5%8A%A0%E5%AF%86%E6%B7%B7%E6%B7%86/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/luo123_123_123/article/details/143826114\"\u003ehttps://blog.csdn.net/luo123_123_123/article/details/143826114\u003c/a\u003e\u003c/p\u003e","title":"jar包加密混淆"},{"content":"下载MinIO在Windows下的安装包，下载地址：https://dl.min.io/server/minio/release/windows-amd64/minio.exe\n下载完成后创建MinIO的数据存储目录，并使用如下启动命令MinIO服务； D:\\Code\\minio\u0026gt;minio.exe server D:\\App\\minio\\data --console-address \u0026#34;:9001\u0026#34; 此时MinIO的API将运行在9000端口，MinIO Console管理页面将运行在9001端口； MinIO服务运行成功后就可访问MinIO Console的管理界面了，输入账号密码minioadmin:minioadmin即可登录，访问地址：http://localhost:9001 ","permalink":"https://rqbaby.cloud/posts/minio-%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e下载MinIO在Windows下的安装包，下载地址：https://dl.min.io/server/minio/release/windows-amd64/minio.exe\u003c/p\u003e","title":"MinIO 安装"},{"content":"安装\nsudo apt install ufw 查看状态\nsudo ufw status 开启ufw\nsudo ufw enable 开放单个端口\nsudo ufw allow 18789/tcp 开放多个端口\nsudo ufw allow 80,443,8080,8085,9001,9090,15672/tcp 禁止端口22\nsudo ufw delete allow 22 ","permalink":"https://rqbaby.cloud/posts/ufw-%E5%BC%80%E6%94%BE%E7%AB%AF%E5%8F%A3/","summary":"\u003cp\u003e安装\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo apt install ufw\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e查看状态\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo ufw status\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e开启ufw\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo ufw enable\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e开放单个端口\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo ufw allow 18789/tcp\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e开放多个端口\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo ufw allow 80,443,8080,8085,9001,9090,15672/tcp\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e禁止端口22\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo ufw delete allow 22\n\u003c/code\u003e\u003c/pre\u003e","title":"ufw 开放端口"},{"content":"括号颜色 中线标注： 设置里搜索 @id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs 设置单击打开新文件窗口，不覆盖前一个窗口 打开 文件--\u0026gt;首选项--\u0026gt;设置 窗口\n如下图，在 编辑管理 选项卡下拉找到 Enable Preview ，去掉这个选项的勾。\n","permalink":"https://rqbaby.cloud/posts/vscode-%E9%85%8D%E7%BD%AE/","summary":"\u003cp\u003e括号颜色 中线标注：\n设置里搜索\n@id:editor.bracketPairColorization.enabled @id:editor.guides.bracketPairs\n\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250909175213.png\" alt=\"Pasted image 20250909175213\"\u003e\n\n设置单击打开新文件窗口，不覆盖前一个窗口\n打开 \u003ccode\u003e文件--\u0026gt;首选项--\u0026gt;设置\u003c/code\u003e 窗口\u003c/p\u003e\n\u003cp\u003e如下图，在 \u003ccode\u003e编辑管理\u003c/code\u003e 选项卡下拉找到 \u003ccode\u003eEnable Preview\u003c/code\u003e ，\u003cstrong\u003e去掉这个选项的勾\u003c/strong\u003e。\u003cbr\u003e\n\u003cimg loading=\"lazy\" src=\"https://i-blog.csdnimg.cn/blog_migrate/41b2213c3e404d44ffba1cc38bbda861.png\" alt=\"在这里插入图片描述\"\u003e\n\u003c/p\u003e","title":"vscode 配置"},{"content":"config.gradle versionName\next { // 应用兼容最低SDK版本 minSdk = 21 targetSdk = 30 buildToolsVersion = \u0026#39;35.0.0\u0026#39; compileSdkVersion = 35 // compileSdkVersion = 32 versionCode = 115 versionName = \u0026#39;1.1\u0026#39; frescoVersion = \u0026#39;2.6.0\u0026#39; materialVersion = \u0026#39;1.4.0\u0026#39; liboSrcRoot = \u0026#39;/Users/js/libreoffice_android\u0026#39; liboWorkdir = \u0026#39;/Users/js/libreoffice_android/workdir\u0026#39; liboInstdir = \u0026#39;/Users/js/libreoffice_android/instdir\u0026#39; liboEtcFolder = \u0026#39;program\u0026#39; liboUreMiscFolder = \u0026#39;program\u0026#39; liboSharedResFolder = \u0026#39;program/resource\u0026#39; liboUREJavaFolder = \u0026#39;program/classes\u0026#39; liboShareJavaFolder = \u0026#39;program/classes\u0026#39; liboExampleDocument = \u0026#39;/Users/js/libreoffice_android/android/default-document/example.odt\u0026#39; liboVersionMajor = \u0026#39;5\u0026#39; liboVersionMinor = \u0026#39;3\u0026#39; liboGitFullCommit = \u0026#39;228a4ff4fe70ca5b7306b2c8312b9a1d3f618118\u0026#39; liboNdkGdbserver = \u0026#39;/Users/js/Library/Android/sdk/ndk/21.4.7075529/prebuilt/android-arm/gdbserver/gdbserver\u0026#39; liboAndroidAppAbi = \u0026#39;armeabi-v7a\u0026#39; // Dependencies Libraries dependencies = [\u0026#34;fresco\u0026#34; : \u0026#34;com.facebook.fresco:fresco:\u0026#34; + frescoVersion, \u0026#34;fresco-gif\u0026#34; : \u0026#34;com.facebook.fresco:animated-gif:\u0026#34; + frescoVersion, \u0026#34;fresco-okhttp3\u0026#34;: \u0026#34;com.facebook.fresco:imagepipeline-okhttp3:\u0026#34; + frescoVersion, \u0026#34;fresco-webpsupport\u0026#34; : \u0026#34;com.facebook.fresco:webpsupport:\u0026#34; + frescoVersion, \u0026#34;material\u0026#34;: \u0026#34;com.google.android.material:material:\u0026#34; + materialVersion ] } ","permalink":"https://rqbaby.cloud/posts/%E5%AE%89%E5%8D%93apk%E7%89%88%E6%9C%AC%E4%BF%AE%E6%94%B9/","summary":"\u003cp\u003econfig.gradle  versionName\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eext {  \r\n    // 应用兼容最低SDK版本  \r\n    minSdk = 21  \r\n    targetSdk = 30  \r\n    buildToolsVersion = \u0026#39;35.0.0\u0026#39;  \r\n    compileSdkVersion = 35  \r\n//    compileSdkVersion = 32  \r\n    versionCode = 115  \r\n    versionName = \u0026#39;1.1\u0026#39;  \r\n  \r\n  \r\n    frescoVersion = \u0026#39;2.6.0\u0026#39;  \r\n    materialVersion = \u0026#39;1.4.0\u0026#39;  \r\n  \r\n  \r\n    liboSrcRoot         = \u0026#39;/Users/js/libreoffice_android\u0026#39;  \r\n    liboWorkdir         = \u0026#39;/Users/js/libreoffice_android/workdir\u0026#39;  \r\n    liboInstdir         = \u0026#39;/Users/js/libreoffice_android/instdir\u0026#39;  \r\n    liboEtcFolder       = \u0026#39;program\u0026#39;  \r\n    liboUreMiscFolder   = \u0026#39;program\u0026#39;  \r\n    liboSharedResFolder = \u0026#39;program/resource\u0026#39;  \r\n    liboUREJavaFolder   = \u0026#39;program/classes\u0026#39;  \r\n    liboShareJavaFolder = \u0026#39;program/classes\u0026#39;  \r\n    liboExampleDocument = \u0026#39;/Users/js/libreoffice_android/android/default-document/example.odt\u0026#39;  \r\n    liboVersionMajor    = \u0026#39;5\u0026#39;  \r\n    liboVersionMinor    = \u0026#39;3\u0026#39;  \r\n    liboGitFullCommit   = \u0026#39;228a4ff4fe70ca5b7306b2c8312b9a1d3f618118\u0026#39;  \r\n    liboNdkGdbserver    = \u0026#39;/Users/js/Library/Android/sdk/ndk/21.4.7075529/prebuilt/android-arm/gdbserver/gdbserver\u0026#39;  \r\n    liboAndroidAppAbi   = \u0026#39;armeabi-v7a\u0026#39;  \r\n  \r\n  \r\n    // Dependencies Libraries  \r\n    dependencies = [\u0026#34;fresco\u0026#34;        : \u0026#34;com.facebook.fresco:fresco:\u0026#34; + frescoVersion,  \r\n                    \u0026#34;fresco-gif\u0026#34;    : \u0026#34;com.facebook.fresco:animated-gif:\u0026#34; + frescoVersion,  \r\n                    \u0026#34;fresco-okhttp3\u0026#34;: \u0026#34;com.facebook.fresco:imagepipeline-okhttp3:\u0026#34; + frescoVersion,  \r\n                    \u0026#34;fresco-webpsupport\u0026#34;        : \u0026#34;com.facebook.fresco:webpsupport:\u0026#34; + frescoVersion,  \r\n                    \u0026#34;material\u0026#34;: \u0026#34;com.google.android.material:material:\u0026#34; + materialVersion  \r\n  \r\n    ]  \r\n  \r\n}\n\u003c/code\u003e\u003c/pre\u003e","title":"安卓apk版本修改"},{"content":"package.json中查看\n\u0026ldquo;@types/node\u0026rdquo;: { \u0026ldquo;version\u0026rdquo;: \u0026ldquo;12.12.7\u0026rdquo;, \u0026ldquo;resolved\u0026rdquo;: \u0026ldquo;https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.7.tgz?cache=0\u0026amp;other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.7.tgz\u0026quot;, \u0026ldquo;integrity\u0026rdquo;: \u0026ldquo;sha1-AeTqck2eO9UNkMEf1ZgLoxfY+hE=\u0026rdquo;, \u0026ldquo;dev\u0026rdquo;: true },\n","permalink":"https://rqbaby.cloud/posts/%E6%9F%A5%E8%AF%A2%E9%A1%B9%E7%9B%AEnode%E7%89%88%E6%9C%AC/","summary":"\u003cp\u003epackage.json中查看\u003c/p\u003e\n\u003cp\u003e\u0026ldquo;@types/node\u0026rdquo;: {\n\u0026ldquo;version\u0026rdquo;: \u0026ldquo;12.12.7\u0026rdquo;,\n\u0026ldquo;resolved\u0026rdquo;: \u0026ldquo;\u003ca href=\"https://registry.npm.taobao.org/@types/node/download/@types/node-12.12.7.tgz?cache=0\u0026amp;other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.7.tgz%22\"\u003ehttps://registry.npm.taobao.org/@types/node/download/@types/node-12.12.7.tgz?cache=0\u0026amp;other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-12.12.7.tgz\u0026quot;\u003c/a\u003e,\n\u0026ldquo;integrity\u0026rdquo;: \u0026ldquo;sha1-AeTqck2eO9UNkMEf1ZgLoxfY+hE=\u0026rdquo;,\n\u0026ldquo;dev\u0026rdquo;: true\n},\u003c/p\u003e","title":"查询项目node版本"},{"content":"性能： https://blog.csdn.net/han2434/article/details/145472982 教程： https://blog.csdn.net/m0_56896669/article/details/145413005\n","permalink":"https://rqbaby.cloud/posts/deepseek%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e性能：\n\u003ca href=\"https://blog.csdn.net/han2434/article/details/145472982\"\u003ehttps://blog.csdn.net/han2434/article/details/145472982\u003c/a\u003e\n教程：\n\u003ca href=\"https://blog.csdn.net/m0_56896669/article/details/145413005\"\u003ehttps://blog.csdn.net/m0_56896669/article/details/145413005\u003c/a\u003e\u003c/p\u003e","title":"DeepSeek安装"},{"content":"一、整体流程总览（先建立全局认知） 源码 ↓ Dockerfile（定义环境） ↓ docker build（生成不可变镜像） ↓ docker tag（版本化） ↓ docker push / docker save（传输） ↓ 服务器 docker pull / load ↓ docker run / docker compose\n👉 核心思想：\n镜像 = 唯一交付物\n构建 ≠ 运行\n服务器不参与构建\n二、Step 0：准备条件（一次性） 本地需要 Docker\n源码 + Dockerfile\n服务器需要 Docker\n能访问镜像来源（registry 或 scp）\n❌ 服务器不需要：\nnode\nnpm\n源码\n三、Step 1：编写 Dockerfile（定义“世界”） 示例（以 Next.js / Node 为例） # ---------- 构建阶段 ----------\rFROM node:20-alpine AS builder\rWORKDIR /app\rCOPY package*.json ./\rRUN npm ci\rCOPY . .\rRUN npm run build\r# ---------- 运行阶段 ----------\rFROM node:20-alpine AS runner\rWORKDIR /app\rENV NODE_ENV=production\rCOPY --from=builder /app/.next/standalone ./\rCOPY --from=builder /app/.next/static ./.next/static\rCOPY --from=builder /app/public ./public\rEXPOSE 3000\rCMD [\u0026#34;node\u0026#34;, \u0026#34;server.js\u0026#34;] 原理说明 FROM：锁定 OS + runtime\n多阶段构建：\nbuilder：编译、生成产物\nrunner：只跑结果（更小、更安全）\n镜像里包含 运行所需的一切\n四、Step 2：本地构建镜像（最关键） docker build -t my-app:1.0.0 .\n原理说明 Docker：\n创建隔离的 Linux 环境\n执行 Dockerfile 中的指令\n生成一个 不可变镜像\n这个镜像：\n不依赖你的电脑\n不依赖服务器\n📌 这一步 等同于“编译交付物”\n五、Step 3：给镜像打 Tag（版本化） docker tag my-app:1.0.0 registry.example.com/my-app:1.0.0\n原理说明 Tag ≈ 版本号\n同一个 IMAGE ID 可以有多个 tag\n用于：\n回滚\n灰度\n多环境部署\n六、Step 4：把镜像传到服务器 这里有 两种标准方式（选其一）\n✅ 方式 A（生产推荐）：使用镜像仓库 1️⃣ 登录仓库 docker login registry.example.com\n2️⃣ 推送镜像 docker push registry.example.com/my-app:1.0.0\n3️⃣ 服务器拉取 docker pull registry.example.com/my-app:1.0.0\n原理 Registry = 镜像 CDN\n镜像被拆成 layer\n相同 layer 不重复传输\n天然支持多服务器、回滚\n⚠️ 方式 B（无仓库）：save / scp / load 本地 docker save my-app:1.0.0 \u0026gt; my-app.tar scp my-app.tar user@server:/opt/\n服务器 docker load \u0026lt; /opt/my-app.tar\n原理 镜像打包成 tar\n完整拷贝\n无版本管理、无缓存\n📌 只适合内网 / 临时\n七、Step 5：服务器运行镜像 docker run -d \\\r--name my-app \\\r-p 3000:3000 \\\r-e NODE_ENV=production \\\rregistry.example.com/my-app:1.0.0 原理说明 镜像是只读的\ndocker run 创建 容器实例\n环境变量、端口、数据卷 = 运行态注入\n八、Step 6：升级 / 回滚（生产必备） 升级 docker pull registry.example.com/my-app:1.0.1\rdocker stop my-app\rdocker rm my-app\rdocker run ... my-app:1.0.1 回滚 docker run ... my-app:1.0.0\n原理 镜像不可变\n切换版本 = 切换 tag\n不存在“环境不一致”\n九、docker-compose（真实生产常用） docker-compose.yml（服务器） version: \u0026#34;3.9\u0026#34;\rservices:\rweb:\rimage: registry.example.com/my-app:1.0.0\rports:\r- \u0026#34;3000:3000\u0026#34;\renv_file:\r- .env\rrestart: always docker compose up -d\n原理 声明式\n服务定义 = 基础设施代码\n可复现部署\n","permalink":"https://rqbaby.cloud/posts/docker%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B/","summary":"\u003ch1 id=\"一整体流程总览先建立全局认知\"\u003e一、整体流程总览（先建立全局认知）\u003c/h1\u003e\n\u003cp\u003e\u003ccode\u003e源码  ↓ Dockerfile（定义环境）  ↓ docker build（生成不可变镜像）  ↓ docker tag（版本化）  ↓ docker push / docker save（传输）  ↓ 服务器 docker pull / load  ↓ docker run / docker compose\u003c/code\u003e\u003c/p\u003e","title":"Docker部署流程"},{"content":"你是一名资深全栈工程师，请基于我提供的 Figma 设计链接生成响应式小程序页面，并使用Figma mcp工具查看UI设计稿。\n要求：\n严格还原间距和颜色 对移动设备做适配处理 其中若涉及图标、背景图等信息，告知我代码中对应图标的名称，我会手动下载保存在腾讯云cos上 若涉及新功能开发，你是一名优秀的经验丰富的全栈工程师，需要完成sql表创建、后端编写以及前端编写工作 若需要顶部导航栏，则使用小程序原生的顶部导航栏，页面的宽高需要考虑padding的距离，必要时使用calc设置宽高 设计链接： https://www.figma.com/design/xXcKJz1amnqrNGR32JSWoI/Untitled?node-id=30-299\u0026amp;t=g9zYjchPWTYzvXoA-0\n","permalink":"https://rqbaby.cloud/posts/figmamcp%E6%8F%90%E7%A4%BA%E8%AF%8D/","summary":"\u003cp\u003e你是一名资深全栈工程师，请基于我提供的 Figma 设计链接生成响应式小程序页面，并使用Figma mcp工具查看UI设计稿。\u003cbr\u003e\n要求：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e严格还原间距和颜色\u003c/li\u003e\n\u003cli\u003e对移动设备做适配处理\u003c/li\u003e\n\u003cli\u003e其中若涉及图标、背景图等信息，告知我代码中对应图标的名称，我会手动下载保存在腾讯云cos上\u003c/li\u003e\n\u003cli\u003e若涉及新功能开发，你是一名优秀的经验丰富的全栈工程师，需要完成sql表创建、后端编写以及前端编写工作\u003c/li\u003e\n\u003cli\u003e若需要顶部导航栏，则使用小程序原生的顶部导航栏，页面的宽高需要考虑padding的距离，必要时使用calc设置宽高\u003c/li\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e设计链接：\n\u003ca href=\"https://www.figma.com/design/xXcKJz1amnqrNGR32JSWoI/Untitled?node-id=30-299\u0026amp;t=g9zYjchPWTYzvXoA-0\"\u003ehttps://www.figma.com/design/xXcKJz1amnqrNGR32JSWoI/Untitled?node-id=30-299\u0026amp;t=g9zYjchPWTYzvXoA-0\u003c/a\u003e\u003c/p\u003e","title":"FigmaMCP提示词"},{"content":"【实用工具】利用MyBatisX插件自动生成代码_mybatisx生成代码-CSDN博客\n","permalink":"https://rqbaby.cloud/posts/mybatisx%E4%BD%BF%E7%94%A8/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/Aqting/article/details/123622714\"\u003e【实用工具】利用MyBatisX插件自动生成代码_mybatisx生成代码-CSDN博客\u003c/a\u003e\u003c/p\u003e","title":"MyBatisX使用"},{"content":"官网：[https://ollama.com/download] 教程：[https://www.cnblogs.com/LaiYun/p/18696931]\nOllamaSetup.exe /DIR=D:\\Application\\Ollama\n","permalink":"https://rqbaby.cloud/posts/ollama-d%E7%9B%98%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e官网：[https://ollama.com/download]\n教程：[https://www.cnblogs.com/LaiYun/p/18696931]\u003c/p\u003e","title":"Ollama D盘安装"},{"content":" 层级 技术选型 语言 TypeScript 前端（Web） Next.js + Tailwind + shadcn/ui 移动端（App） React Native + Expo + NativeWind 小程序 Taro（React 语法） 数据库 Supabase（数据库 + Auth + Realtime + Edge Functions） AI 层 OpenAI SDK + LangChain + pgvector 状态管理 Zustand / React Query 部署 Vercel（Web） + Expo EAS（App） + 微信开发者工具（小程序） Web：Next.js+Supabase App: React Native+Next.js+Supabase 小程序：Taro+Next.js+Supabase\n","permalink":"https://rqbaby.cloud/posts/react%E5%85%A8%E5%AE%B6%E6%A1%B6%E6%8A%80%E6%9C%AF%E6%A0%88/","summary":"\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e层级\u003c/th\u003e\n          \u003cth\u003e技术选型\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e语言\u003c/td\u003e\n          \u003ctd\u003eTypeScript\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e前端（Web）\u003c/td\u003e\n          \u003ctd\u003eNext.js + Tailwind + shadcn/ui\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e移动端（App）\u003c/td\u003e\n          \u003ctd\u003eReact Native + Expo + NativeWind\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e小程序\u003c/td\u003e\n          \u003ctd\u003eTaro（React 语法）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e数据库\u003c/td\u003e\n          \u003ctd\u003eSupabase（数据库 + Auth + Realtime + Edge Functions）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eAI 层\u003c/td\u003e\n          \u003ctd\u003eOpenAI SDK + LangChain + pgvector\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e状态管理\u003c/td\u003e\n          \u003ctd\u003eZustand / React Query\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e部署\u003c/td\u003e\n          \u003ctd\u003eVercel（Web） + Expo EAS（App） + 微信开发者工具（小程序）\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eWeb：Next.js+Supabase\nApp: React Native+Next.js+Supabase\n小程序：Taro+Next.js+Supabase\u003c/p\u003e","title":"React全家桶技术栈"},{"content":"https://blog.csdn.net/lucky541788/article/details/84871108\n","permalink":"https://rqbaby.cloud/posts/%E6%9A%B4%E9%9C%B2%E6%9C%AC%E5%9C%B0ip-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/lucky541788/article/details/84871108\"\u003ehttps://blog.csdn.net/lucky541788/article/details/84871108\u003c/a\u003e\u003c/p\u003e","title":"暴露本地IP 内网穿透"},{"content":"腾讯应用宝要求上传空包时，本质上就是一件事：\n用应用正式发布时使用的同一套签名证书，对平台提供的空包 APK 重新签名。\n使用哪套签名 如果你平时在 Android Studio 里打正式包，就继续使用那套签名。\n本次实际使用的是：\nkeystore：D:/Code/data_safe_android/app/keystore/laibudatavault.jks alias：datavault 空包文件：\nD:/Code/data_safe_android/yingyongbao_sign/tap_unsign.apk 签名命令 \u0026amp; \u0026#34;D:/App/SDK/build-tools/35.0.0/apksigner.bat\u0026#34; sign ` --ks \u0026#34;D:/Code/data_safe_android/app/keystore/laibudatavault.jks\u0026#34; ` --ks-key-alias \u0026#34;datavault\u0026#34; ` --out \u0026#34;D:/Code/data_safe_android/yingyongbao_sign/tap_signed.apk\u0026#34; ` \u0026#34;D:/Code/data_safe_android/yingyongbao_sign/tap_unsign.apk\u0026#34; 执行后输入：\nkeystore password 验证签名 \u0026amp; \u0026#34;D:/App/SDK/build-tools/35.0.0/apksigner.bat\u0026#34; verify -v \u0026#34;D:/Code/data_safe_android/yingyongbao_sign/tap_signed.apk\u0026#34; 如果输出里有以下结果，就说明签名完成：\nVerifies Verified using v1 scheme (JAR signing): true Verified using v2 scheme (APK Signature Scheme v2): true Verified using v3 scheme (APK Signature Scheme v3): true 最终上传文件 签名后的文件：\nD:/Code/data_safe_android/yingyongbao_sign/tap_signed.apk 如果应用宝要求保留原始文件名，再按平台要求改名后上传。\n使用 Android Studio 为应用签名 官方文档： https://developer.android.com/studio/publish/app-signing?hl=zh-cn#sign_release\n","permalink":"https://rqbaby.cloud/posts/%E8%85%BE%E8%AE%AF%E5%BA%94%E7%94%A8%E5%AE%9D%E7%A9%BA%E5%8C%85apk%E7%AD%BE%E5%90%8D/","summary":"\u003cp\u003e腾讯应用宝要求上传空包时，本质上就是一件事：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e用应用正式发布时使用的同一套签名证书，对平台提供的空包 APK 重新签名。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"使用哪套签名\"\u003e使用哪套签名\u003c/h2\u003e\n\u003cp\u003e如果你平时在 Android Studio 里打正式包，就继续使用那套签名。\u003c/p\u003e","title":"腾讯应用宝空包apk签名"},{"content":"https://blog.csdn.net/qq_44000789/article/details/142214660\n配置镜像源： 教程：[https://blog.csdn.net/qq_38614074/article/details/139649680] 管理员运行Anaconda Prompt\n查看镜像源\nconda config --show channels conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/\rconda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/\rconda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/\rconda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/msys2/\rconda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/bioconda/\rconda config --add channels https://mirrors.ustc.edu.cn/anaconda/cloud/menpo/\r#设置搜索时显示通道地址\rconda config --set show_channel_urls yes 使用教程：[https://blog.csdn.net/u011385476/article/details/105277426] 创建虚拟环境\nconda create -n test python=3.7\rconda create -n QmapCompression python=3.8\rconda env list 激活虚拟环境\nconda activate your_env_name 删除虚拟环境\nconda remove -n your_env_name --all 安装依赖\npip install --upgrade pip\rpip install -r requirements.txt pip config unset global.index-url ","permalink":"https://rqbaby.cloud/posts/anaconda%E5%AE%89%E8%A3%85-%E4%BD%BF%E7%94%A8/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/qq_44000789/article/details/142214660\"\u003ehttps://blog.csdn.net/qq_44000789/article/details/142214660\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e配置镜像源：\n教程：[https://blog.csdn.net/qq_38614074/article/details/139649680]\n管理员运行Anaconda Prompt\u003c/p\u003e","title":"Anaconda安装 使用"},{"content":"更改安装路径\n$env:ChocolateyInstall = \u0026#39;D:\\Application\\Chocolatey\u0026#39;\r[Environment]::SetEnvironmentVariable(\u0026#39;ChocolateyInstall\u0026#39;, $env:ChocolateyInstall, \u0026#39;Machine\u0026#39;) 安装\nSet-ExecutionPolicy Bypass -Scope Process -Force\r[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072\riex ((New-Object System.Net.WebClient).DownloadString(\u0026#39;https://community.chocolatey.org/install.ps1\u0026#39;)) 更改默认下载路径\nchoco config set installLocation D:\\Application 安装jdk1.8\nchoco install jdk8 --install-directory=\u0026#34;D:\\Application\\Java\\jdk8\\\u0026#39;\u0026#34; 网址：[https://community.chocolatey.org/packages?q=java8]\n","permalink":"https://rqbaby.cloud/posts/chocolatey%E5%AE%89%E8%A3%85/","summary":"\u003cp\u003e更改安装路径\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$env:ChocolateyInstall = \u0026#39;D:\\Application\\Chocolatey\u0026#39;\r\n[Environment]::SetEnvironmentVariable(\u0026#39;ChocolateyInstall\u0026#39;, $env:ChocolateyInstall, \u0026#39;Machine\u0026#39;)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e安装\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eSet-ExecutionPolicy Bypass -Scope Process -Force\r\n[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072\r\niex ((New-Object System.Net.WebClient).DownloadString(\u0026#39;https://community.chocolatey.org/install.ps1\u0026#39;))\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e更改默认下载路径\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003echoco config set installLocation D:\\Application\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e安装jdk1.8\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003echoco install jdk8 --install-directory=\u0026#34;D:\\Application\\Java\\jdk8\\\u0026#39;\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e网址：[https://community.chocolatey.org/packages?q=java8]\u003c/p\u003e","title":"Chocolatey安装"},{"content":".npmrc 中手动加入：\nelectron_mirror=https://cdn.npmmirror.com/binaries/electron/\relectron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/ 教程：https://blog.csdn.net/qq_36835255/article/details/145202441\n","permalink":"https://rqbaby.cloud/posts/electron%E9%95%9C%E5%83%8F%E6%BA%90%E9%85%8D%E7%BD%AE/","summary":"\u003cp\u003e.npmrc 中手动加入：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eelectron_mirror=https://cdn.npmmirror.com/binaries/electron/\r\nelectron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e教程：https://blog.csdn.net/qq_36835255/article/details/145202441\u003c/p\u003e","title":"electron镜像源配置"},{"content":"https://macwk.com.cn/soft/navicat-premium-17#step-history\n","permalink":"https://rqbaby.cloud/posts/mac-navicat%E7%A0%B4%E8%A7%A3%E4%B8%8B%E8%BD%BD/","summary":"\u003cp\u003e\u003ca href=\"https://macwk.com.cn/soft/navicat-premium-17#step-history\"\u003ehttps://macwk.com.cn/soft/navicat-premium-17#step-history\u003c/a\u003e\u003c/p\u003e","title":"mac Navicat破解下载"},{"content":" ","permalink":"https://rqbaby.cloud/posts/springboot%E6%89%93%E5%8C%85/","summary":"\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250630142524.png\" alt=\"Pasted image 20250630142524\"\u003e\n\u003c/p\u003e","title":"springboot打包"},{"content":"安装：\n# 安装 curl\rsudo apt install curl\r# 安装 git\rsudo apt install git\r# 安装 nvm\rbash -c \u0026#34;$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh)\u0026#34; 重开终端，或重新打开 ssh 窗口 使用：\n命令行 作用 nvm ls 已安装的列表 nvm ls-remote 所有可安装版本 nvm install v12.20.1 安装某个版本Node nvm use 12.20.1 切换Node版本 node -v node.js 版本 nvm-update 更新nvm 卸载：\nbash -c \u0026#34;$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/uninstall.sh)\u0026#34; ","permalink":"https://rqbaby.cloud/posts/ubuntu-nvm%E4%B8%8B%E8%BD%BD/","summary":"\u003cp\u003e安装：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e# 安装 curl\r\nsudo apt install curl\r\n# 安装 git\r\nsudo apt install git\r\n# 安装 nvm\r\nbash -c \u0026#34;$(curl -fsSL https://gitee.com/RubyMetric/nvm-cn/raw/main/install.sh)\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003e重开终端，或重新打开 ssh 窗口\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e使用：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e命令行\u003c/th\u003e\n          \u003cth\u003e作用\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003envm ls\u003c/td\u003e\n          \u003ctd\u003e已安装的列表\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003envm ls-remote\u003c/td\u003e\n          \u003ctd\u003e所有可安装版本\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003envm install v12.20.1\u003c/td\u003e\n          \u003ctd\u003e安装某个版本Node\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003envm use 12.20.1\u003c/td\u003e\n          \u003ctd\u003e切换Node版本\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003enode -v\u003c/td\u003e\n          \u003ctd\u003enode.js 版本\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003envm-update\u003c/td\u003e\n          \u003ctd\u003e更新nvm\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e卸载：\u003c/p\u003e","title":"Ubuntu nvm下载"},{"content":" 上传sql文件 mysql -uroot -p 进入数据库，执行命令： CREATE DATABASE IF NOT EXISTS your_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE your_db; SOURCE /tmp/dump.sql; CREATE DATABASE IF NOT EXISTS xnl DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\rUSE xnl;\rSOURCE /home/ubuntu/xnl.sql; ","permalink":"https://rqbaby.cloud/posts/ubuntu%E6%89%8B%E5%8A%A8%E5%AF%BC%E5%85%A5sql%E6%96%87%E4%BB%B6/","summary":"\u003col\u003e\n\u003cli\u003e上传sql文件\u003c/li\u003e\n\u003cli\u003emysql -uroot -p 进入数据库，执行命令：\nCREATE DATABASE IF NOT EXISTS your_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nUSE your_db;\nSOURCE /tmp/dump.sql;\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCREATE DATABASE IF NOT EXISTS xnl DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\r\nUSE xnl;\r\nSOURCE /home/ubuntu/xnl.sql;\n\u003c/code\u003e\u003c/pre\u003e","title":"ubuntu手动导入sql文件"},{"content":" 创建备份脚本： 创建一个名为mysql_backup.sh的脚本文件，并添加以下内容：\n#!/bin/bash # 数据库配置信息 DB_USER=\u0026#34;root\u0026#34; DB_PASS=\u0026#34;your_password\u0026#34; DB_NAME=\u0026#34;testdb\u0026#34; BACKUP_DIR=\u0026#34;/home/backup\u0026#34; # 备份文件名 BACKUP_FILE=\u0026#34;$BACKUP_DIR/${DB_NAME}_$(date +%Y%m%d%H%M%S).sql.gz\u0026#34; # 执行备份命令 mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip \u0026gt; $BACKUP_FILE # 删除30天前的备份文件 find $BACKUP_DIR -type f -name \u0026#34;*.gz\u0026#34; -mtime +30 -exec rm {} \\; 注意：将your_password替换为实际的数据库密码。\n赋予脚本执行权限： chmod +x mysql_backup.sh 设置定时任务： 使用crontab命令设置定时任务，例如每天凌晨1点执行备份：\ncrontab -e 添加以下行：\n0 1 * * * /path/to/mysql_backup.sh 注意！ BACKUP_DIR=\u0026quot;/home/backup\u0026quot; 这个路径的backup文件夹需要手动创建\n五、备份策略的制定\n制定合理的备份策略对于保障数据安全至关重要。以下是一些建议：\n定期备份：根据数据重要性和更新频率，确定备份周期（如每日、每周）。 多重备份：在不同位置存储多个备份副本，以防单点故障。 备份验证：定期验证备份文件的完整性和可恢复性。 备份清理：根据备份策略，定期清理过期备份文件，释放存储空间。 六、备份文件的存储与恢复\n存储策略：\n本地存储：将备份文件存放在服务器本地磁盘，适用于数据量较小的情况。 远程存储：将备份文件传输到远程服务器或云存储服务，提高数据安全性。 恢复操作：\n当需要恢复数据库时，可以使用以下命令：\ngunzip \u0026lt; 备份文件路径/文件名.sql.gz | mysql -u 用户名 -p 数据库名 例如，恢复名为testdb的数据库：\ngunzip \u0026lt; /home/backup/testdb_backup.sql.gz | mysql -u root -p testdb ","permalink":"https://rqbaby.cloud/posts/ubuntu%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC/","summary":"\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e创建备份脚本\u003c/strong\u003e：\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e创建一个名为\u003ccode\u003emysql_backup.sh\u003c/code\u003e的脚本文件，并添加以下内容：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"c1\"\u003e#!/bin/bash\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"c1\"\u003e# 数据库配置信息\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nv\"\u003eDB_USER\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;root\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nv\"\u003eDB_PASS\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;your_password\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nv\"\u003eDB_NAME\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;testdb\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nv\"\u003eBACKUP_DIR\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;/home/backup\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"c1\"\u003e# 备份文件名\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"nv\"\u003eBACKUP_FILE\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$BACKUP_DIR\u003c/span\u003e\u003cspan class=\"s2\"\u003e/\u003c/span\u003e\u003cspan class=\"si\"\u003e${\u003c/span\u003e\u003cspan class=\"nv\"\u003eDB_NAME\u003c/span\u003e\u003cspan class=\"si\"\u003e}\u003c/span\u003e\u003cspan class=\"s2\"\u003e_\u003c/span\u003e\u003cspan class=\"k\"\u003e$(\u003c/span\u003edate +%Y%m%d%H%M%S\u003cspan class=\"k\"\u003e)\u003c/span\u003e\u003cspan class=\"s2\"\u003e.sql.gz\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"c1\"\u003e# 执行备份命令\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   mysqldump -u \u003cspan class=\"nv\"\u003e$DB_USER\u003c/span\u003e -p\u003cspan class=\"nv\"\u003e$DB_PASS\u003c/span\u003e \u003cspan class=\"nv\"\u003e$DB_NAME\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e gzip \u0026gt; \u003cspan class=\"nv\"\u003e$BACKUP_FILE\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   \u003cspan class=\"c1\"\u003e# 删除30天前的备份文件\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e   find \u003cspan class=\"nv\"\u003e$BACKUP_DIR\u003c/span\u003e -type f -name \u003cspan class=\"s2\"\u003e\u0026#34;*.gz\u0026#34;\u003c/span\u003e -mtime +30 -exec rm \u003cspan class=\"o\"\u003e{}\u003c/span\u003e \u003cspan class=\"se\"\u003e\\;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e注意：将\u003ccode\u003eyour_password\u003c/code\u003e替换为实际的数据库密码。\u003c/p\u003e","title":"ubuntu数据库备份脚本"},{"content":"管理员模式执行： Set-ExecutionPolicy -ExecutionPolicy Unrestricted\n","permalink":"https://rqbaby.cloud/posts/%E5%BC%80%E5%90%AFpowershell%E6%89%A7%E8%A1%8C%E6%9D%83%E9%99%90/","summary":"\u003cp\u003e管理员模式执行：\nSet-ExecutionPolicy -ExecutionPolicy Unrestricted\u003c/p\u003e","title":"开启PowerShell执行权限"},{"content":" 包名展开 ：关闭这个选项 ","permalink":"https://rqbaby.cloud/posts/android-studio-%E7%9B%AE%E5%BD%95%E6%98%BE%E7%A4%BA%E4%B8%8D%E5%85%A8/","summary":"\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250919144846.png\" alt=\"Pasted image 20250919144846\"\u003e\n\n包名展开 ：关闭这个选项\n\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250919145258.png\" alt=\"Pasted image 20250919145258\"\u003e\n\u003c/p\u003e","title":"Android studio 目录显示不全"},{"content":"git config \u0026ndash;global credential.helper store 配置永久保存密码 ","permalink":"https://rqbaby.cloud/posts/linux-git-%E9%85%8D%E7%BD%AE%E6%B0%B8%E4%B9%85%E5%AF%86%E7%A0%81/","summary":"\u003cp\u003egit config \u0026ndash;global credential.helper store   配置永久保存密码\n\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250723142608.png\" alt=\"Pasted image 20250723142608\"\u003e\n\u003c/p\u003e","title":"linux git 配置永久密码"},{"content":"npm get registry\r# 国内 淘宝 镜像源\rnpm config set registry https://registry.npmmirror.com/\r# 官方镜像源\rnpm config set registry https://registry.npmjs.org/ pnpm get registry\r# 国内 淘宝 镜像源\rpnpm config set registry https://registry.npmmirror.com/\r# 官方镜像源\rpnpm config set registry https://registry.npmjs.org/ npm install -g yarn@1.22.19\ryarn config get registry\r# 国内 淘宝 镜像源\ryarn config set registry https://registry.npmmirror.com/\r# 官方镜像源\ryarn config set registry https://registry.yarnpkg.com/ 清除缓存\nyarn cache clean --force ","permalink":"https://rqbaby.cloud/posts/npm-pnpm-yarn%E9%95%9C%E5%83%8F%E6%BA%90%E9%85%8D%E7%BD%AE/","summary":"\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enpm get registry\r\n# 国内 淘宝 镜像源\r\nnpm config set registry https://registry.npmmirror.com/\r\n# 官方镜像源\r\nnpm config set registry https://registry.npmjs.org/\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epnpm get registry\r\n# 国内 淘宝 镜像源\r\npnpm config set registry https://registry.npmmirror.com/\r\n# 官方镜像源\r\npnpm config set registry https://registry.npmjs.org/\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enpm install -g yarn@1.22.19\r\nyarn config get registry\r\n# 国内 淘宝 镜像源\r\nyarn config set registry https://registry.npmmirror.com/\r\n# 官方镜像源\r\nyarn config set registry https://registry.yarnpkg.com/\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e清除缓存\u003c/p\u003e","title":"npm pnpm yarn镜像源配置"},{"content":" 关闭代理 yarn install yarn pod 检查xcode workspace 三处arm64 twwapp中的三处、以及prods 运行，查看报错，选择wenling 再次运行，fix代码里的语法错误 再次运行，xcode执行成功后关闭终端、simulator，在webstorm重新运行 ","permalink":"https://rqbaby.cloud/posts/react-native%E8%BF%90%E8%A1%8Cios/","summary":"\u003col\u003e\n\u003cli\u003e关闭代理\u003c/li\u003e\n\u003cli\u003eyarn install\u003c/li\u003e\n\u003cli\u003eyarn pod\u003c/li\u003e\n\u003cli\u003e检查xcode workspace 三处arm64 twwapp中的三处、以及prods\u003c/li\u003e\n\u003cli\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250122100454.png\" alt=\"Pasted image 20250122100454\"\u003e\n\u003c/li\u003e\n\u003cli\u003e运行，查看报错，选择wenling\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250122100554.png\" alt=\"Pasted image 20250122100554\"\u003e\n\u003c/li\u003e\n\u003cli\u003e再次运行，fix代码里的语法错误\u003c/li\u003e\n\u003cli\u003e再次运行，xcode执行成功后关闭终端、simulator，在webstorm重新运行\u003c/li\u003e\n\u003c/ol\u003e","title":"React Native运行IOS"},{"content":"在运行Hbuilder的cli报出dll错误，下载并安装后问题解决 微软官方链接： https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170 下载链接： https://aka.ms/vs/17/release/vc_redist.x64.exe https://aka.ms/vs/17/release/vc_redist.x86.exe\n注意：X86 和X64 都需要下载！！！\n","permalink":"https://rqbaby.cloud/posts/windows%E6%89%80%E9%9C%80%E7%9A%84c++%E7%8E%AF%E5%A2%83%E4%B8%8B%E8%BD%BD/","summary":"\u003cp\u003e在运行Hbuilder的cli报出dll错误，下载并安装后问题解决\n微软官方链接：\n\u003ca href=\"https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170\"\u003ehttps://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170\u003c/a\u003e\n下载链接：\n\u003ca href=\"https://aka.ms/vs/17/release/vc_redist.x64.exe\"\u003ehttps://aka.ms/vs/17/release/vc_redist.x64.exe\u003c/a\u003e\n\u003ca href=\"https://aka.ms/vs/17/release/vc_redist.x86.exe\"\u003ehttps://aka.ms/vs/17/release/vc_redist.x86.exe\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e注意：X86 和X64 都需要下载！！！\u003c/p\u003e","title":"windows所需的C++环境下载"},{"content":"最近玩了下影刀RAP，查询了下影刀公开的RAP工作流，似乎没有很新的价格捕获工具，因此博主做了这次尝试，记录一下\n整体的流程和爬虫中的selenium有点像，博主是初步搭建了在淘宝、京东查询商品并捕获店铺名称、商品名称、详情链接和价格后，将信息存储到excel的工作流，还没有做分页点击获取，大家有好的建议可以评论下\n先看效果：\n[video(video-33ENHSLi-1773302011262)(type-csdn)(url-https://live.csdn.net/v/embed/517002)(image-https://i-blog.csdnimg.cn/img_convert/e04ab7ae9cfd161fcebd74aa02835ff3.jpeg)(title-影刀RAP淘宝、京东价格捕获工具演示)]\n整体的设计流程如下： 注意，需要在chrome浏览器先登录好淘宝以及京东，否则无法执行\n下面是详细配置信息： https://search.jd.com/Search?keyword=input_dialog.value 数据列表在配置中选择“批量获取数据”，在京东或淘宝选择自己要获取的元素即可，若需要获取商品详情链接，点击表格旁边的提取链接即可\nhttps://s.taobao.com/search?q=input_dialog.value 淘宝和京东同理 注意这里的新建路径需要自己调整下，博主设置的是桌面 插入表头： [\u0026ldquo;店铺名称\u0026rdquo;,\u0026ldquo;商品名称\u0026rdquo;,\u0026ldquo;商品链接\u0026rdquo;,\u0026ldquo;价格\u0026rdquo;] 注意这里需要点击一下python的图标，不然不会生效 若不需要筛选和排序功能可以删除，这里的排序可以叠加，点击python图标开启python模式，再以列表的形式写入即可（详细的可以看官方的使用说明） 配置完毕之后点击运行即可，创作不易，帮忙点个赞吧~\n","permalink":"https://rqbaby.cloud/posts/%E5%BD%B1%E5%88%80rpa%E6%9E%84%E5%BB%BA%E6%B7%98%E5%AE%9D%E4%BA%AC%E4%B8%9C%E4%BB%B7%E6%A0%BC%E6%8D%95%E8%8E%B7%E5%B7%A5%E5%85%B7/","summary":"\u003cp\u003e最近玩了下影刀RAP，查询了下影刀公开的RAP工作流，似乎没有很新的价格捕获工具，因此博主做了这次尝试，记录一下\u003c/p\u003e\n\u003cp\u003e整体的流程和爬虫中的selenium有点像，博主是初步搭建了在淘宝、京东查询商品并捕获店铺名称、商品名称、详情链接和价格后，将信息存储到excel的工作流，还没有做分页点击获取，大家有好的建议可以评论下\u003c/p\u003e","title":"影刀RPA构建淘宝、京东价格捕获工具"},{"content":"前言 这篇文章记录如何在 Ubuntu 服务器上部署一套可供 iPhone 原生使用的 IKEv2/IPsec 服务。\n适用场景：\n希望使用 iPhone 系统自带 IKEv2 功能 不想安装第三方客户端 服务器系统为 Ubuntu 24.04 或相近版本 服务端使用 strongSwan 本文使用脱敏示例，发布时请将下列占位符替换为你自己的信息：\n\u0026lt;SERVER_IP\u0026gt;：服务器公网 IP \u0026lt;USERNAME\u0026gt;：IKEv2 用户名 \u0026lt;PASSWORD\u0026gt;：IKEv2 密码 \u0026lt;SUBNET\u0026gt;：IKEv2 虚拟网段，例如 10.20.20.0/24 \u0026lt;CLIENT_IP_POOL\u0026gt;：客户端地址池，例如 10.20.20.0/24 \u0026lt;NET_IFACE\u0026gt;：服务器公网网卡名，例如 eth0 方案说明 本方案使用：\n协议：IKEv2/IPsec 服务端：strongSwan 认证方式：EAP-MSCHAPv2（用户名 + 密码） 证书方式：自签 CA + 服务端证书 客户端：iPhone 系统自带 IKEv2 如果你没有域名，也可以直接用裸 IP 部署，但需要：\n服务端证书中的 CN 和 SAN 使用服务器 IP iPhone 上的 服务器 和 远程ID 也填写同一个 IP 手动将自签 CA 证书导入 iPhone 并开启完全信任 一、安装 strongSwan 更新软件源并安装依赖：\nsudo apt update\rsudo apt install -y strongswan strongswan-pki libcharon-extra-plugins iptables-persistent 放行 IKEv2 常用端口：\nsudo ufw allow 500/udp\rsudo ufw allow 4500/udp 如果服务器未启用 ufw，也可以只在云安全组中放行 UDP 500 和 UDP 4500。\n二、生成 CA 和服务端证书 创建证书目录：\nsudo mkdir -p \u0026#34;/etc/ipsec.d/private\u0026#34; \u0026#34;/etc/ipsec.d/cacerts\u0026#34; \u0026#34;/etc/ipsec.d/certs\u0026#34; 生成 CA 私钥和 CA 证书：\nsudo ipsec pki --gen --type rsa --size 4096 --outform pem | sudo tee \u0026#34;/etc/ipsec.d/private/ca-key.pem\u0026#34; \u0026gt; /dev/null\rsudo ipsec pki --self --ca --lifetime 3650 \\\r--in \u0026#34;/etc/ipsec.d/private/ca-key.pem\u0026#34; --type rsa \\\r--dn \u0026#34;CN=My IKEv2 CA\u0026#34; --outform pem | sudo tee \u0026#34;/etc/ipsec.d/cacerts/ca-cert.pem\u0026#34; \u0026gt; /dev/null 生成服务端私钥和服务端证书：\nsudo ipsec pki --gen --type rsa --size 4096 --outform pem | sudo tee \u0026#34;/etc/ipsec.d/private/server-key.pem\u0026#34; \u0026gt; /dev/null\rsudo ipsec pki --pub --in \u0026#34;/etc/ipsec.d/private/server-key.pem\u0026#34; --type rsa | \\\rsudo ipsec pki --issue --lifetime 1825 \\\r--cacert \u0026#34;/etc/ipsec.d/cacerts/ca-cert.pem\u0026#34; \\\r--cakey \u0026#34;/etc/ipsec.d/private/ca-key.pem\u0026#34; \\\r--dn \u0026#34;CN=\u0026lt;SERVER_IP\u0026gt;\u0026#34; \\\r--san \u0026#34;\u0026lt;SERVER_IP\u0026gt;\u0026#34; \\\r--flag serverAuth --flag ikeIntermediate \\\r--outform pem | sudo tee \u0026#34;/etc/ipsec.d/certs/server-cert.pem\u0026#34; \u0026gt; /dev/null 设置权限：\nsudo chmod 600 \u0026#34;/etc/ipsec.d/private/ca-key.pem\u0026#34; \u0026#34;/etc/ipsec.d/private/server-key.pem\u0026#34;\rsudo chmod 644 \u0026#34;/etc/ipsec.d/cacerts/ca-cert.pem\u0026#34; \u0026#34;/etc/ipsec.d/certs/server-cert.pem\u0026#34; 验证文件是否存在：\nsudo ls -l \u0026#34;/etc/ipsec.d/private/ca-key.pem\u0026#34; \u0026#34;/etc/ipsec.d/cacerts/ca-cert.pem\u0026#34; \u0026#34;/etc/ipsec.d/private/server-key.pem\u0026#34; \u0026#34;/etc/ipsec.d/certs/server-cert.pem\u0026#34; 三、配置 strongSwan 写入 /etc/ipsec.conf：\nsudo tee \u0026#34;/etc/ipsec.conf\u0026#34; \u0026gt; /dev/null \u0026lt;\u0026lt;\u0026#39;EOF\u0026#39;\rconfig setup\runiqueids=never\rconn ios-ikev2\rkeyexchange=ikev2\rike=aes256-sha256-modp2048,aes128-sha256-modp2048!\resp=aes256-sha256,aes128-sha256!\rdpdaction=clear\rdpddelay=300s\rrekey=no\rleft=%any\rleftid=\u0026lt;SERVER_IP\u0026gt;\rleftcert=server-cert.pem\rleftsendcert=always\rleftsubnet=0.0.0.0/0\rright=%any\rrightid=%any\rrightauth=eap-mschapv2\rrightsourceip=\u0026lt;CLIENT_IP_POOL\u0026gt;\rrightdns=1.1.1.1,8.8.8.8\reap_identity=%identity\rauto=add\rEOF 写入 /etc/ipsec.secrets：\nsudo tee \u0026#34;/etc/ipsec.secrets\u0026#34; \u0026gt; /dev/null \u0026lt;\u0026lt;\u0026#39;EOF\u0026#39;\r: RSA \u0026#34;server-key.pem\u0026#34;\r\u0026lt;USERNAME\u0026gt; : EAP \u0026#34;\u0026lt;PASSWORD\u0026gt;\u0026#34;\rEOF 说明：\nleftid 必须与证书中的 CN / SAN 一致。 如果你使用裸 IP，则 iPhone 端的 服务器 和 远程ID 也必须填写同一个 IP。 四、开启 IP 转发 创建 sysctl 配置：\nsudo tee \u0026#34;/etc/sysctl.d/99-ikev2.conf\u0026#34; \u0026gt; /dev/null \u0026lt;\u0026lt;\u0026#39;EOF\u0026#39;\rnet.ipv4.ip_forward=1\rnet.ipv6.conf.all.forwarding=1\rEOF\rsudo sysctl --system 检查是否生效：\nsysctl net.ipv4.ip_forward 期望输出：\nnet.ipv4.ip_forward = 1 五、配置 NAT 和转发规则 先查看默认公网网卡：\nip route | awk \u0026#39;/default/ {print $5; exit}\u0026#39; 假设结果为 \u0026lt;NET_IFACE\u0026gt;，添加 NAT：\nsudo iptables -t nat -A POSTROUTING -s \u0026lt;SUBNET\u0026gt; -o \u0026lt;NET_IFACE\u0026gt; -j MASQUERADE 添加转发规则：\nsudo iptables -I FORWARD 1 -s \u0026lt;SUBNET\u0026gt; -j ACCEPT\rsudo iptables -I FORWARD 1 -d \u0026lt;SUBNET\u0026gt; -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 保存规则：\nsudo netfilter-persistent save 检查规则：\nsudo iptables -t nat -S\rsudo iptables -S FORWARD 期望至少存在：\n-A POSTROUTING -s \u0026lt;SUBNET\u0026gt; -o \u0026lt;NET_IFACE\u0026gt; -j MASQUERADE\r-A FORWARD -d \u0026lt;SUBNET\u0026gt; -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT\r-A FORWARD -s \u0026lt;SUBNET\u0026gt; -j ACCEPT 六、启动 strongSwan sudo systemctl restart strongswan-starter\rsudo systemctl enable strongswan-starter 检查服务状态：\nsudo ipsec statusall\rsudo ss -lunp | grep -E \u0026#39;:(500|4500)\\b\u0026#39; 正常状态通常包括：\nstrongSwan 已监听 UDP 500 和 UDP 4500 IKEv2 连接建立后 Security Associations 显示 1 up 七、导出 CA 证书并安装到 iPhone 导出证书到当前用户目录：\ncp \u0026#34;/etc/ipsec.d/cacerts/ca-cert.pem\u0026#34; \u0026#34;$HOME/ca-cert.cer\u0026#34; 如果需要下载到 Windows：\nscp \u0026#34;ubuntu@\u0026lt;SERVER_IP\u0026gt;:/home/ubuntu/ca-cert.cer\u0026#34; \u0026#34;C:\\Users\\YourName\\Desktop\\ca-cert.cer\u0026#34; 然后通过微信、邮件、AirDrop 等方式把 ca-cert.cer 发到 iPhone。\niPhone 上安装步骤：\n下载证书到文件 打开 设置 -\u0026gt; 通用 -\u0026gt; magic与设备管理 -\u0026gt; 配置描述文件 完成安装 打开 设置 -\u0026gt; 通用 -\u0026gt; 关于本机 -\u0026gt; 证书信任设置 找到刚安装的 CA，开启“完全信任” 注意：\n只安装证书不够 必须手动开启完全信任，否则 IKEv2 无法通过证书校验 八、iPhone 端 IKEv2 填写方法 在 iPhone 中进入：\n设置 -\u0026gt; 通用 -\u0026gt; magic 与设备管理 -\u0026gt; 添加配置\n填写如下：\n类型：IKEv2 描述：自定义，例如 MyIKEv2 服务器：\u0026lt;SERVER_IP\u0026gt; 远程ID：\u0026lt;SERVER_IP\u0026gt; 本地ID：留空 用户鉴定：用户名 用户名：\u0026lt;USERNAME\u0026gt; 密码：\u0026lt;PASSWORD\u0026gt; 代理：关闭 九、连接后如何验证 连接成功后，建议按顺序测试：\n访问 https://1.1.1.1 访问 https://8.8.8.8 访问 https://google.com 判断方法：\n如果 IP 地址能访问，但域名不能访问，优先检查 DNS 配置 如果 IP 地址也不能访问，优先检查 NAT、FORWARD、云安全组、防火墙 服务器端可以通过以下命令查看状态：\nsudo ipsec statusall 重点观察：\nSecurity Associations (1 up, 0 connecting) bytes_i 和 bytes_o 是否都在增长 如果出现：\nbytes_i 有增长 bytes_o = 0 通常说明：\n客户端流量已到服务器 但服务器没有把响应流量正确转发回客户端 优先检查 FORWARD 和 MASQUERADE 十、常见问题 1. 证书生成时报 Permission denied 错误示例：\nsudo ipsec pki ... \u0026gt; /etc/ipsec.d/... 原因：\n\u0026gt; 重定向由当前 shell 执行，不会跟随 sudo 提权 解决：\n使用 sudo tee 写入文件 2. 连接成功但无法访问任何网站 常见原因：\n未开启 IP 转发 缺少 NAT 缺少 FORWARD 放行规则 云安全组未放通必要端口 重点检查：\nsysctl net.ipv4.ip_forward\rsudo iptables -t nat -S\rsudo iptables -S FORWARD\rsudo ipsec statusall 3. 连接成功但只能访问 IP，不能访问域名 优先检查：\n/etc/ipsec.conf 中的 rightdns iPhone 是否拿到 magic DNS 可用示例：\nrightdns=1.1.1.1,8.8.8.8 4. plugin 'xxx': failed to load strongSwan 在证书生成或启动时，可能会输出部分可选插件未加载的警告。\n通常只要满足以下条件，就可以继续：\n核心证书文件已成功生成 strongSwan 可以正常启动 IKEv2 可以正常建立连接 十一、建议 如果只是自用，裸 IP + 自签 CA 的方式已经可以正常工作。\n如果后续需要更稳定、更易维护，建议逐步升级到：\n使用域名而不是裸 IP 使用公网可信证书而不是自签 CA 将 iptables 规则固化到统一的防火墙策略中 为不同设备分别创建独立账号 十二、总结 这套方案的核心点并不复杂，真正容易踩坑的地方主要有三个：\n证书身份必须与 iPhone 中填写的 服务器 / 远程ID 完全一致 自签 CA 必须手动安装到 iPhone，并开启完全信任 IKEv2 连接成功后，还必须确保服务器已完成 IP 转发、NAT 和 FORWARD 放行 只要这三部分都正确，iPhone 系统自带的 IKEv2 一般就可以稳定工作。\n","permalink":"https://rqbaby.cloud/posts/ios-%E5%8E%9F%E7%94%9F-ikev2-%E9%85%8D%E7%BD%AE%E6%95%99%E7%A8%8Bubuntu-+-strongswan/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e这篇文章记录如何在 Ubuntu 服务器上部署一套可供 iPhone 原生使用的 \u003ccode\u003eIKEv2/IPsec\u003c/code\u003e 服务。\u003c/p\u003e\n\u003cp\u003e适用场景：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e希望使用 iPhone 系统自带 IKEv2 功能\u003c/li\u003e\n\u003cli\u003e不想安装第三方客户端\u003c/li\u003e\n\u003cli\u003e服务器系统为 Ubuntu 24.04 或相近版本\u003c/li\u003e\n\u003cli\u003e服务端使用 \u003ccode\u003estrongSwan\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e本文使用脱敏示例，发布时请将下列占位符替换为你自己的信息：\u003c/p\u003e","title":"iOS 原生 IKEv2 配置教程（Ubuntu + strongSwan）"},{"content":"官方文档：https://docs.openclaw.ai/start/getting-started 需要先安装node22 使用nvm安装 windows使用下面的命令会自动安装node22，linux则需要自行手动安装，并安装git 安装命令 windows：\niwr -useb https://openclaw.ai/install.ps1 | iex linux/mac：\ncurl -fsSL https://openclaw.ai/install.sh | bash 运行引导程序（并安装服务）：\nopenclaw onboard --install-daemon 安装过程可参考 https://developer.aliyun.com/article/1709615 这篇文章，其中有些命令是旧版本的，例如clawdbot status，正确的是openclaw status 选择quickstart qwen模型，其他的则跳过，最后一步选择TUI，选择后会自动在后台运行openclaw，类似nohup\n常用命令：\n查看状态\ropenclaw status\r启动网关\ropenclaw gateway\r重启网关（修改openclaw.json后执行）\ropenclaw gateway restart\r查看仪表盘网址\ropenclaw dashboard\r检查修复\ropenclaw doctor --fix\r引导配置\ropenclaw onboard windows使用powershell执行即可，执行完成后，输入 openclaw dashboard 查看网址，复制Dashboard URL查看即可，若访问的是没有token的url，直接访问 127.0.0.1:18789 则会出现 disconnected (1008): device identity required\nlinux本机部署后，默认是在服务器内网环境的，可以进行端口映射，实现外网访问\n修改openclaw.json，添加controlUi 并将gateway下的bind由loopback 改为lan \u0026#34;controlUi\u0026#34;: {\r\u0026#34;allowInsecureAuth\u0026#34;: true\r},\r\u0026#34;bind\u0026#34;: \u0026#34;lan\u0026#34;, 完整gateway：\n\u0026#34;gateway\u0026#34;: {\r\u0026#34;controlUi\u0026#34;: {\r\u0026#34;allowInsecureAuth\u0026#34;: true\r},\r\u0026#34;auth\u0026#34;: {\r\u0026#34;mode\u0026#34;: \u0026#34;token\u0026#34;,\r\u0026#34;token\u0026#34;: \u0026#34;你的token\u0026#34;\r},\r\u0026#34;mode\u0026#34;: \u0026#34;local\u0026#34;,\r\u0026#34;port\u0026#34;: 18789,\r\u0026#34;bind\u0026#34;: \u0026#34;lan\u0026#34;,\r\u0026#34;tailscale\u0026#34;: {\r\u0026#34;mode\u0026#34;: \u0026#34;off\u0026#34;,\r\u0026#34;resetOnExit\u0026#34;: false\r}\r}, 修改后需要重启网关，执行：openclaw gateway restart\n腾讯云、服务器内部开放tcp端口（18789端口） ufw 方式开放端口： sudo apt install ufw\rsudo ufw status\rsudo ufw enable\rsudo ufw allow 18789/tcp 访问 服务器IP:18789/?token=XXXX （token通过openclaw dashboard 查看） 完整openclaw.json：\nubuntu@VM-0-7-ubuntu:~$ cat ~/.openclaw/openclaw.json\r{\r\u0026#34;meta\u0026#34;: {\r\u0026#34;lastTouchedVersion\u0026#34;: \u0026#34;2026.2.1\u0026#34;,\r\u0026#34;lastTouchedAt\u0026#34;: \u0026#34;2026-02-04T01:38:02.479Z\u0026#34;\r},\r\u0026#34;wizard\u0026#34;: {\r\u0026#34;lastRunAt\u0026#34;: \u0026#34;2026-02-04T01:38:02.475Z\u0026#34;,\r\u0026#34;lastRunVersion\u0026#34;: \u0026#34;2026.2.1\u0026#34;,\r\u0026#34;lastRunCommand\u0026#34;: \u0026#34;onboard\u0026#34;,\r\u0026#34;lastRunMode\u0026#34;: \u0026#34;local\u0026#34;\r},\r\u0026#34;commands\u0026#34;: {\r\u0026#34;native\u0026#34;: \u0026#34;auto\u0026#34;,\r\u0026#34;nativeSkills\u0026#34;: \u0026#34;auto\u0026#34;\r},\r\u0026#34;gateway\u0026#34;: {\r\u0026#34;controlUi\u0026#34;: {\r\u0026#34;allowInsecureAuth\u0026#34;: true\r},\r\u0026#34;auth\u0026#34;: {\r\u0026#34;mode\u0026#34;: \u0026#34;token\u0026#34;,\r\u0026#34;token\u0026#34;: \u0026#34;你的token\u0026#34;\r},\r\u0026#34;mode\u0026#34;: \u0026#34;local\u0026#34;,\r\u0026#34;port\u0026#34;: 18789,\r\u0026#34;bind\u0026#34;: \u0026#34;lan\u0026#34;,\r\u0026#34;tailscale\u0026#34;: {\r\u0026#34;mode\u0026#34;: \u0026#34;off\u0026#34;,\r\u0026#34;resetOnExit\u0026#34;: false\r}\r},\r\u0026#34;agents\u0026#34;: {\r\u0026#34;defaults\u0026#34;: {\r\u0026#34;maxConcurrent\u0026#34;: 4,\r\u0026#34;subagents\u0026#34;: {\r\u0026#34;maxConcurrent\u0026#34;: 8\r},\r\u0026#34;workspace\u0026#34;: \u0026#34;/home/ubuntu/.openclaw/workspace\u0026#34;,\r\u0026#34;models\u0026#34;: {\r\u0026#34;qwen-portal/coder-model\u0026#34;: {\r\u0026#34;alias\u0026#34;: \u0026#34;qwen\u0026#34;\r},\r\u0026#34;qwen-portal/vision-model\u0026#34;: {}\r},\r\u0026#34;model\u0026#34;: {\r\u0026#34;primary\u0026#34;: \u0026#34;qwen-portal/vision-model\u0026#34;\r}\r}\r},\r\u0026#34;messages\u0026#34;: {\r\u0026#34;ackReactionScope\u0026#34;: \u0026#34;group-mentions\u0026#34;\r},\r\u0026#34;plugins\u0026#34;: {\r\u0026#34;entries\u0026#34;: {\r\u0026#34;qwen-portal-auth\u0026#34;: {\r\u0026#34;enabled\u0026#34;: true\r}\r}\r},\r\u0026#34;models\u0026#34;: {\r\u0026#34;providers\u0026#34;: {\r\u0026#34;qwen-portal\u0026#34;: {\r\u0026#34;baseUrl\u0026#34;: \u0026#34;https://portal.qwen.ai/v1\u0026#34;,\r\u0026#34;apiKey\u0026#34;: \u0026#34;qwen-oauth\u0026#34;,\r\u0026#34;api\u0026#34;: \u0026#34;openai-completions\u0026#34;,\r\u0026#34;models\u0026#34;: [\r{\r\u0026#34;id\u0026#34;: \u0026#34;coder-model\u0026#34;,\r\u0026#34;name\u0026#34;: \u0026#34;Qwen Coder\u0026#34;,\r\u0026#34;reasoning\u0026#34;: false,\r\u0026#34;input\u0026#34;: [\r\u0026#34;text\u0026#34;\r],\r\u0026#34;cost\u0026#34;: {\r\u0026#34;input\u0026#34;: 0,\r\u0026#34;output\u0026#34;: 0,\r\u0026#34;cacheRead\u0026#34;: 0,\r\u0026#34;cacheWrite\u0026#34;: 0\r},\r\u0026#34;contextWindow\u0026#34;: 128000,\r\u0026#34;maxTokens\u0026#34;: 8192\r},\r{\r\u0026#34;id\u0026#34;: \u0026#34;vision-model\u0026#34;,\r\u0026#34;name\u0026#34;: \u0026#34;Qwen Vision\u0026#34;,\r\u0026#34;reasoning\u0026#34;: false,\r\u0026#34;input\u0026#34;: [\r\u0026#34;text\u0026#34;,\r\u0026#34;image\u0026#34;\r],\r\u0026#34;cost\u0026#34;: {\r\u0026#34;input\u0026#34;: 0,\r\u0026#34;output\u0026#34;: 0,\r\u0026#34;cacheRead\u0026#34;: 0,\r\u0026#34;cacheWrite\u0026#34;: 0\r},\r\u0026#34;contextWindow\u0026#34;: 128000,\r\u0026#34;maxTokens\u0026#34;: 8192\r}\r]\r}\r}\r},\r\u0026#34;auth\u0026#34;: {\r\u0026#34;profiles\u0026#34;: {\r\u0026#34;qwen-portal:default\u0026#34;: {\r\u0026#34;provider\u0026#34;: \u0026#34;qwen-portal\u0026#34;,\r\u0026#34;mode\u0026#34;: \u0026#34;oauth\u0026#34;\r}\r}\r}\r}\rubuntu@VM-0-7-ubuntu:~$ 在飞书中配置机器人，可参考： https://developer.aliyun.com/article/1709615 这篇文章 同样其中的命令需要由clawdbot更换为openclaw，如下：\nopenclaw plugins install @m1heng-clawd/feishu\ropenclaw config set channels.feishu.appId \u0026#34;飞书 app id\u0026#34;\ropenclaw config set channels.feishu.appSecret \u0026#34;飞书 app secret\u0026#34;\ropenclaw config set channels.feishu.enabled true\r# 推荐使用 websocket\ropenclaw config set channels.feishu.connectionMode websocket\ropenclaw config set channels.feishu.dmPolicy pairing\ropenclaw config set channels.feishu.groupPolicy allowlist\ropenclaw config set channels.feishu.requireMention true\ropenclaw gateway restart 注意：若只是个人使用，使用飞书个人版创建即可，若需要分享给好友，则需要在飞书创建企业后再创建机器人，飞书个人版无法将机器人分享给其他人\n","permalink":"https://rqbaby.cloud/posts/openclaw-%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8Bwindows+linux/","summary":"\u003cp\u003e官方文档：\u003ca href=\"https://docs.openclaw.ai/start/getting-started\"\u003ehttps://docs.openclaw.ai/start/getting-started\u003c/a\u003e\n需要先安装node22 使用nvm安装\nwindows使用下面的命令会自动安装node22，linux则需要自行手动安装，并安装git\n安装命令\nwindows：\u003c/p\u003e","title":"OpenClaw 安装教程（windows+Linux）"},{"content":"https://blog.csdn.net/hwh20095000060/article/details/121439611\n","permalink":"https://rqbaby.cloud/posts/ubuntu%E6%80%8E%E4%B9%88%E5%88%87%E6%8D%A2%E5%88%B0root%E7%94%A8%E6%88%B7%E5%88%87%E6%8D%A2%E5%88%B0root%E8%B4%A6%E5%8F%B7%E6%96%B9%E6%B3%95/","summary":"\u003cp\u003e\u003ca href=\"https://blog.csdn.net/hwh20095000060/article/details/121439611\"\u003ehttps://blog.csdn.net/hwh20095000060/article/details/121439611\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020260225162240.png\" alt=\"Pasted image 20260225162240\"\u003e\n\u003c/p\u003e","title":"ubuntu怎么切换到root用户,切换到root账号方法"},{"content":"https://mumu.163.com/help/20240903/40912_1178625.html\nD:\\App\\MuMuPlayer\\nx_device\\12.0\\shell\u0026gt; adb.exe connect 127.0.0.1:7555\n新版本adb.exe 路径 \u0026ldquo;D:\\App\\MuMuPlayer\\nx_device\\12.0\\shell\\adb.exe\u0026rdquo; \u0026ldquo;D:\\App\\MuMuPlayer\\nx_main\\adb.exe\u0026rdquo;\nuniapp调试运行到mumu模拟器 D:\\App\\HBuilderX\\plugins\\launcher-tools\\tools\\adbs\\adb.exe\n","permalink":"https://rqbaby.cloud/posts/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-mumu%E6%A8%A1%E6%8B%9F%E5%99%A8%E5%92%8C-android-studio-%E8%B0%83%E8%AF%95%E5%BA%94%E7%94%A8/","summary":"\u003cp\u003e\u003ca href=\"https://mumu.163.com/help/20240903/40912_1178625.html\"\u003ehttps://mumu.163.com/help/20240903/40912_1178625.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eD:\\App\\MuMuPlayer\\nx_device\\12.0\\shell\u0026gt; adb.exe connect 127.0.0.1:7555\u003c/p\u003e\n\u003cp\u003e新版本adb.exe 路径\n\u0026ldquo;D:\\App\\MuMuPlayer\\nx_device\\12.0\\shell\\adb.exe\u0026rdquo;\n\u0026ldquo;D:\\App\\MuMuPlayer\\nx_main\\adb.exe\u0026rdquo;\u003c/p\u003e\n\u003ch2 id=\"uniapp调试运行到mumu模拟器\"\u003euniapp调试运行到mumu模拟器\u003c/h2\u003e\n\u003cp\u003eD:\\App\\HBuilderX\\plugins\\launcher-tools\\tools\\adbs\\adb.exe\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020250919141806.png\" alt=\"Pasted image 20250919141806\"\u003e\n\u003c/p\u003e","title":"如何使用 MuMu模拟器和 Android Studio 调试应用"},{"content":"前提：购买一台境外服务器，最好是美国节点，便于访问ai网站（如Gemini、Claude）\n切换root账户 进行安装 su root\rbash \u0026lt;(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/master/install.sh) 出现下面的提示时，输入y确定 Would you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]: y 根据提示设置3X-UI的面板端口 Please set up the panel port: 54321\rYour Panel Port is: 54321\rPort set successfully: 54321\rUsername and password updated successfully\rBase URI path set successfully 选择2模式，然后一路按回车就完事了 Choose SSL certificate setup method:\r1. Let\u0026#39;s Encrypt for Domain (90-day validity, auto-renews)\r2. Let\u0026#39;s Encrypt for IP Address (6-day validity, auto-renews)\rNote: Both options require port 80 open. IP certs use shortlived profile.\rChoose an option (default 2 for IP): 2\rUsing Let\u0026#39;s Encrypt for IP certificate (shortlived profile)...\rDo you have an IPv6 address to include? (leave empty to skip): Setting up Let\u0026#39;s Encrypt IP certificate (shortlived profile)...\rNote: IP certificates are valid for ~6 days and will auto-renew.\rPort 80 must be open and accessible from the internet.\rInstalling acme.sh for SSL certificate management...\racme.sh installed successfully 重置管理员账号密码，root账户下，输入 x-ui 进入控制终端，输入6，如下 开启 54321、443 端口\nsudo ufw allow 54321,443/tcp\rsudo ufw status 在腾讯云/阿里云/ucloud 防火墙中开放54321、443端口 访问x-ui面板，root账户输入 x-ui settings 复制Access URL，在浏览器中访问\nroot@10-11-183-195:/home/ubuntu# x-ui settings\rThe OS release is: ubuntu\r[INF] current panel settings as follows:\rPanel is secure with SSL\rhasDefaultCredential: false\rport: 54321\rwebBasePath: /jctEtK95lYLdk8BmSc/ Access URL: https://你的IP地址:54321/jctEtK95lYLdk8BmSc/ x-ui面板配置 输入账户密码，进入面板，点击入站列表，点击添加入站 端口：443 安全选择 Reality Target 输入www.microsoft.com:443 SNI 输入 www.microsoft.com 点击Get New Cert以及Get New Seed，生成公钥私钥，这里还会自动生成Short IDs，后续配置yaml会用到 点击完成 点击添加客户端，可以修改下电子邮箱，推荐修改为用户名方便区分，这里的ID后续配置yaml会用到，点击添加客户端按钮即可： 下载clash verge 官网： https://github.com/clash-verge-rev/clash-verge-rev/releases Github地址： https://github.com/clash-verge-rev/clash-verge-rev/releases\nclash verge配置 本地使用记事本新建一个文件，将下方配置粘贴进去并修改，然后将文件名后缀改为yaml 需要修改：服务器IP、uuid、public-key、short-id 这里是两个节点的配置，做了基础的规则配置，若需要修改节点数量或者修改规则可以让ai改一下\n# 端口和基础设置 mixed-port: 7890 allow-lan: true mode: rule log-level: info ipv6: false # 建议关闭，防止DNS泄露 # DNS 设置 (优化：引入 DoH 防污染与国内外分流) dns: enable: true listen: 0.0.0.0:53 enhanced-mode: fake-ip fake-ip-range: 198.18.0.1/16 nameserver: - https://doh.pub/dns-query # 腾讯 DoH，防劫持 - https://dns.alidns.com/dns-query # 阿里 DoH fallback: - https://dns.google/dns-query # Google DoH (用于解析国外域名) - https://cloudflare-dns.com/dns-query fallback-filter: geoip: true geoip-code: CN # 代理组策略 (优化：增加 AI 专属分组，修复自动选择逻辑) proxy-groups: - name: 🚀 节点选择 type: select proxies: - 🌍 自动选择 - \u0026#34;美国\u0026#34; - \u0026#34;新加坡\u0026#34; - DIRECT - name: 🤖 AI 服务 type: select proxies: - \u0026#34;美国\u0026#34; # AI 服务通常对美国原生 IP 支持更好，建议默认放前面 - \u0026#34;新加坡\u0026#34; - 🚀 节点选择 - name: 🌍 自动选择 type: url-test url: http://www.gstatic.com/generate_204 interval: 300 tolerance: 50 proxies: - \u0026#34;美国\u0026#34; - \u0026#34;新加坡\u0026#34; # 代理节点配置 (保持不变) proxies: - name: \u0026#34;美国\u0026#34; type: vless server: 服务器IP地址 port: 443 uuid: x-ui面板中的用户id，见步骤9 network: tcp tls: true udp: true flow: xtls-rprx-vision servername: www.microsoft.com client-fingerprint: chrome reality-opts: public-key: x-ui面板中的站点公钥，见步骤9 short-id: 对应x-ui面板中的Short IDs，注意Short IDs是用逗号隔开的，这里只需要复制一个id，见步骤9 - name: \u0026#34;新加坡\u0026#34; type: vless server: 服务器IP地址 port: 443 uuid: x-ui面板中的用户id，见步骤9 network: tcp tls: true udp: true flow: xtls-rprx-vision servername: www.microsoft.com client-fingerprint: chrome reality-opts: public-key: x-ui面板中的站点公钥，见步骤9 short-id: 对应x-ui面板中的Short IDs，注意Short IDs是用逗号隔开的，这里只需要复制一个id，见步骤9 # 规则设置 (优化：完善 AI、开发工具及局域网规则) rules: # 1. 局域网防环路直连 (非常重要，防止本地开发服务走代理) - DOMAIN-SUFFIX,local,DIRECT - IP-CIDR,127.0.0.0/8,DIRECT - IP-CIDR,192.168.0.0/16,DIRECT - IP-CIDR,10.0.0.0/8,DIRECT - IP-CIDR,172.16.0.0/12,DIRECT # 2. 🤖 核心 AI 服务 (单独走 AI 策略组) - DOMAIN-SUFFIX,openai.com,🤖 AI 服务 - DOMAIN-SUFFIX,chatgpt.com,🤖 AI 服务 - DOMAIN-SUFFIX,anthropic.com,🤖 AI 服务 # Claude - DOMAIN-SUFFIX,claude.ai,🤖 AI 服务 - DOMAIN-KEYWORD,gemini,🤖 AI 服务 # Google Gemini - DOMAIN-SUFFIX,midjourney.com,🤖 AI 服务 - DOMAIN-SUFFIX,discord.com,🤖 AI 服务 # Midjourney 强依赖 Discord - DOMAIN-SUFFIX,huggingface.co,🤖 AI 服务 # 开源 AI 社区 - DOMAIN-SUFFIX,civitai.com,🤖 AI 服务 # AI 绘图模型社区 # 3. 👨‍💻 开发者与技术依赖 - DOMAIN-SUFFIX,github.com,🚀 节点选择 - DOMAIN-SUFFIX,githubusercontent.com,🚀 节点选择 - DOMAIN-SUFFIX,docker.com,🚀 节点选择 # 解决 Docker pull 镜像慢/失败问题 - DOMAIN-SUFFIX,docker.io,🚀 节点选择 - DOMAIN-SUFFIX,stackoverflow.com,🚀 节点选择 # 4. 🌍 常见国外服务 - DOMAIN-SUFFIX,google.com,🚀 节点选择 - DOMAIN-SUFFIX,googleapis.com,🚀 节点选择 - DOMAIN-SUFFIX,youtube.com,🚀 节点选择 - DOMAIN-SUFFIX,twitter.com,🚀 节点选择 - DOMAIN-SUFFIX,x.com,🚀 节点选择 - DOMAIN-SUFFIX,telegram.org,🚀 节点选择 # 5. 🇨🇳 国内流量直连 - GEOSITE,cn,DIRECT # 依赖 Clash Meta 的 Geo 数据，精确匹配国内域名 - GEOIP,CN,DIRECT - DOMAIN-SUFFIX,cn,DIRECT # 6. 兜底规则 (剩下的全部走代理) - MATCH,🚀 节点选择 安装clash verge后，点击左侧导航栏的订阅，点击新建，选择local，选择刚刚编辑好的yaml文件 保存后可以进行测试，没有显示红色的Timeout就大功告成了 最后推荐在clash verge里开启虚拟网卡以及tun模式，这样能正常访问cursor或Antigravity ","permalink":"https://rqbaby.cloud/posts/3x-ui-%E9%85%8D%E7%BD%AE/","summary":"\u003cp\u003e前提：购买一台境外服务器，最好是美国节点，便于访问ai网站（如Gemini、Claude）\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e切换root账户 进行安装\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esu root\r\n\r\nbash \u0026lt;(curl -Ls https://raw.githubusercontent.com/MHSanaei/3x-ui/master/install.sh)\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e出现下面的提示时，输入y确定\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eWould you like to customize the Panel Port settings? (If not, a random port will be applied) [y/n]: y\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"3\"\u003e\n\u003cli\u003e根据提示设置3X-UI的面板端口\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ePlease set up the panel port: 54321\r\n\r\nYour Panel Port is: 54321\r\n\r\nPort set successfully: 54321\r\n\r\nUsername and password updated successfully\r\n\r\nBase URI path set successfully\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"4\"\u003e\n\u003cli\u003e选择2模式，然后一路按回车就完事了\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eChoose SSL certificate setup method:\r\n\r\n1. Let\u0026#39;s Encrypt for Domain (90-day validity, auto-renews)\r\n\r\n2. Let\u0026#39;s Encrypt for IP Address (6-day validity, auto-renews)\r\n\r\nNote: Both options require port 80 open. IP certs use shortlived profile.\r\n\r\nChoose an option (default 2 for IP): 2\r\n\r\nUsing Let\u0026#39;s Encrypt for IP certificate (shortlived profile)...\r\n\r\nDo you have an IPv6 address to include? (leave empty to skip): \r\n\r\nSetting up Let\u0026#39;s Encrypt IP certificate (shortlived profile)...\r\n\r\nNote: IP certificates are valid for ~6 days and will auto-renew.\r\n\r\nPort 80 must be open and accessible from the internet.\r\n\r\nInstalling acme.sh for SSL certificate management...\r\n\r\nacme.sh installed successfully\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"5\"\u003e\n\u003cli\u003e\n\u003cp\u003e重置管理员账号密码，root账户下，输入 \u003ccode\u003ex-ui\u003c/code\u003e 进入控制终端，输入6，如下\n\u003cimg loading=\"lazy\" src=\"/uploads/Pasted%20image%2020260226100243.png\" alt=\"Pasted image 20260226100243\"\u003e\n\u003c/p\u003e","title":"3X-UI 配置"},{"content":" title: \u0026ldquo;欢迎使用 rqbaby.blog\u0026rdquo; date: 2026-04-07T17:30:00+08:00 draft: false tags: [\u0026ldquo;开始\u0026rdquo;, \u0026ldquo;Hugo\u0026rdquo;, \u0026ldquo;PaperMod\u0026rdquo;] categories: [\u0026ldquo;公告\u0026rdquo;] summary: \u0026ldquo;站点已完成 Hugo + PaperMod 初始化，并接入 WebDAV 自动同步方案。\u0026rdquo; cover: image: \u0026quot;\u0026quot; slug: \u0026ldquo;welcome\u0026rdquo; 这是博客的第一篇文章。\n后续文章将从 WebDAV 同步到 content/posts，图片将同步到 static/uploads。\n","permalink":"https://rqbaby.cloud/posts/welcome/","summary":"\u003chr\u003e\n\u003ch2 id=\"slug-welcome\"\u003etitle: \u0026ldquo;欢迎使用 rqbaby.blog\u0026rdquo;\ndate: 2026-04-07T17:30:00+08:00\ndraft: false\ntags: [\u0026ldquo;开始\u0026rdquo;, \u0026ldquo;Hugo\u0026rdquo;, \u0026ldquo;PaperMod\u0026rdquo;]\ncategories: [\u0026ldquo;公告\u0026rdquo;]\nsummary: \u0026ldquo;站点已完成 Hugo + PaperMod 初始化，并接入 WebDAV 自动同步方案。\u0026rdquo;\ncover:\nimage: \u0026quot;\u0026quot;\nslug: \u0026ldquo;welcome\u0026rdquo;\u003c/h2\u003e\n\u003cp\u003e这是博客的第一篇文章。\u003c/p\u003e","title":"welcome"}]