├── docs ├── .nojekyll ├── CNAME ├── java │ ├── shiro │ │ ├── _sidebar.md │ │ ├── shiro-spring.md │ │ └── shiro-springboot.md │ ├── payment │ │ ├── weixinpay.md │ │ ├── alipay.md │ │ └── _sidebar.md │ ├── springCloud │ │ ├── loadBalancer.md │ │ ├── alibaba │ │ │ └── _sidebar.md │ │ ├── _sidebar.md │ │ └── start.md │ ├── springboot │ │ ├── cache.md │ │ ├── test.md │ │ ├── images │ │ │ ├── 20.png │ │ │ ├── image-20210324110123986.png │ │ │ └── image-20210324111339548.png │ │ ├── official-document.md │ │ ├── devtools.md │ │ ├── _sidebar.md │ │ ├── springInitializer.md │ │ └── templateengine.md │ ├── javaweb │ │ └── _sidebar.md │ ├── template │ │ └── _sidebar.md │ ├── mq │ │ ├── _sidebar.md │ │ ├── rabbitmq │ │ │ └── _sidebar.md │ │ └── rocketmq │ │ │ ├── _sidebar.md │ │ │ ├── concept.md │ │ │ └── install.md │ ├── cross_domain │ │ ├── _sidebar.md │ │ └── what.md │ ├── modules │ │ └── _sidebar.md │ ├── webservice │ │ ├── _sidebar.md │ │ └── apachecxf.md │ ├── basic │ │ ├── version_feature │ │ │ ├── jdk9-11 │ │ │ │ └── _sidebar.md │ │ │ └── _sidebar.md │ │ ├── _sidebar.md │ │ └── IO │ │ │ └── nio2.md │ ├── hibernate │ │ ├── _sidebar.md │ │ ├── transaction.md │ │ ├── loadmethod.md │ │ ├── cache.md │ │ └── status.md │ ├── message_push │ │ └── _sidebar.md │ ├── redis │ │ ├── sprinboot_redis.md │ │ ├── _sidebar.md │ │ └── jedis.md │ ├── storage │ │ └── _sidebar.md │ ├── spring5_source_code │ │ └── _sidebar.md │ ├── elasticsearch │ │ └── _sidebar.md │ ├── spring_security │ │ └── _sidebar.md │ └── aop │ │ └── aop-basic.md ├── utils │ ├── idea_plugins.md │ └── browser_plugins.md ├── project │ ├── vcs │ │ └── git │ │ │ ├── area.md │ │ │ ├── _sidebar.md │ │ │ └── introduction.md │ └── leyoumall │ │ ├── Introduction │ │ ├── _sidebar.md │ │ └── list.md │ │ └── _sidebar.md ├── _navbar.md ├── docker │ └── _sidebar.md ├── frontend │ ├── vue │ │ ├── _sidebar.md │ │ └── code │ │ │ ├── no-computed.html │ │ │ ├── custom-command.html │ │ │ ├── two-way-binding.html │ │ │ ├── computed.html │ │ │ ├── computed-methods.html │ │ │ ├── v-if.html │ │ │ ├── dynamic-param.html │ │ │ ├── v-else.html │ │ │ ├── one-filter.html │ │ │ ├── v-bind-dynamic-attr.html │ │ │ ├── component-global.html │ │ │ ├── component-local.html │ │ │ ├── watch.html │ │ │ ├── v-else-if.html │ │ │ ├── v-bind.html │ │ │ ├── v-bind-class.html │ │ │ ├── component-props.html │ │ │ ├── Listen-events.html │ │ │ ├── custom-command-param.html │ │ │ ├── multiple-filter.html │ │ │ ├── axios.html │ │ │ ├── fetch.html │ │ │ ├── component-event.html │ │ │ ├── component-each.html │ │ │ ├── v-for.html │ │ │ ├── router.html │ │ │ └── component-view.html │ ├── node │ │ ├── code │ │ │ ├── node_mysql │ │ │ │ ├── main.js │ │ │ │ └── dao.js │ │ │ ├── npm-published-test │ │ │ │ ├── index.js │ │ │ │ └── package-lock.json │ │ │ ├── router_20200427.zip │ │ │ ├── clboy-npm-test │ │ │ │ ├── say.js │ │ │ │ └── package.json │ │ │ ├── quote.js │ │ │ ├── requestHandlers.js │ │ │ ├── router_20200427 │ │ │ │ ├── router.js │ │ │ │ ├── requestHandlers.js │ │ │ │ ├── index.js │ │ │ │ └── server.js │ │ │ ├── server.js │ │ │ ├── file_20200427 │ │ │ │ ├── 20200427.txt │ │ │ │ ├── index.js │ │ │ │ └── requestHandlers.js │ │ │ ├── hello.js │ │ │ ├── get-param.js │ │ │ ├── post-param.js │ │ │ └── post-param-form.html │ │ └── md │ │ │ ├── get-param.md │ │ │ ├── _sidebar.md │ │ │ ├── file.md │ │ │ ├── module.md │ │ │ ├── event-loop.md │ │ │ ├── npm-publish-module.md │ │ │ ├── router.md │ │ │ └── npm-install-module.md │ └── modules │ │ └── _sidebar.md ├── others │ ├── facorites │ │ └── _sidebar.md │ ├── markdown │ │ ├── _sidebar.md │ │ └── markdown基本语法.md │ └── deepin │ │ ├── _sidebar.md │ │ ├── dock-icon-error.md │ │ ├── shortcut-key-switch-system-proxy.md │ │ └── deepin的使用.md ├── resources │ ├── images │ │ ├── logo.png │ │ └── favicon.ico │ ├── minds │ │ ├── java │ │ │ ├── java06.json │ │ │ ├── java01.json │ │ │ ├── java30.json │ │ │ ├── java04.json │ │ │ ├── java20.json │ │ │ ├── java21.json │ │ │ ├── java23.json │ │ │ ├── java27.json │ │ │ ├── java22.json │ │ │ ├── java13.json │ │ │ ├── java24.json │ │ │ ├── java26.json │ │ │ ├── java16.json │ │ │ ├── java09.json │ │ │ ├── class01.json │ │ │ ├── java02.json │ │ │ ├── java18.json │ │ │ ├── java28.json │ │ │ ├── java17.json │ │ │ ├── java25.json │ │ │ ├── java12.json │ │ │ ├── java29.json │ │ │ ├── java08.json │ │ │ ├── java15.json │ │ │ └── java11.json │ │ ├── ssm │ │ │ ├── myBatis-design.json │ │ │ ├── mybatis-components.json │ │ │ ├── mybatis-relative-merits.json │ │ │ ├── mybatis-collection.json │ │ │ ├── mybatis-param.json │ │ │ ├── mybatis-spring.json │ │ │ ├── mybatis-mapper-xml03.json │ │ │ ├── mybatis-discriminator-cache.json │ │ │ ├── mybatis-analysis.json │ │ │ ├── mybatis-init-exec.json │ │ │ └── mybatis-dynamic-sql.json │ │ └── spring │ │ │ ├── cache.json │ │ │ ├── cache-comparison.json │ │ │ ├── cache-relative-merits.json │ │ │ ├── spring-mvc-dispatcherServlet.json │ │ │ ├── web-load-process.json │ │ │ ├── spring-mvc-exception.json │ │ │ ├── spring-mvc-prop-tag.json │ │ │ ├── spring-b-a.json │ │ │ ├── spring-mvc-web-prop.json │ │ │ ├── spring-ioc-container.json │ │ │ ├── spring-mvc-special-bean.json │ │ │ ├── spring-mvc-process.json │ │ │ └── spring-ioc.json │ └── html │ │ └── qrcode.html ├── common │ └── minds │ │ ├── _sidebar.md │ │ └── introduction.md ├── README.md ├── _coverpage.md ├── temp.txt ├── mysql │ ├── unionquery.md │ ├── limitquery.md │ ├── _sidebar.md │ ├── dbandsql.md │ ├── sortquery.md │ ├── practice03.md │ ├── install.md │ ├── basicquery.md │ ├── function.md │ ├── variable.md │ └── groupfunctions.md └── _sidebar.md ├── .csdn-sync.json ├── blog.md ├── .halo1-sync.json └── README.md /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | note.clboy.cn -------------------------------------------------------------------------------- /docs/java/shiro/_sidebar.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/java/payment/weixinpay.md: -------------------------------------------------------------------------------- 1 | # 微信支付 -------------------------------------------------------------------------------- /docs/java/springCloud/loadBalancer.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/utils/idea_plugins.md: -------------------------------------------------------------------------------- 1 | # idea常用插件 -------------------------------------------------------------------------------- /docs/java/payment/alipay.md: -------------------------------------------------------------------------------- 1 | # 支付宝支付 2 | 3 | -------------------------------------------------------------------------------- /docs/java/springboot/cache.md: -------------------------------------------------------------------------------- 1 | # 缓存抽象 2 | 3 | > TODO -------------------------------------------------------------------------------- /docs/java/springboot/test.md: -------------------------------------------------------------------------------- 1 | # 单元测试 2 | 3 | > TODO -------------------------------------------------------------------------------- /docs/project/vcs/git/area.md: -------------------------------------------------------------------------------- 1 | # git中的三大区域 2 | 3 | -------------------------------------------------------------------------------- /.csdn-sync.json: -------------------------------------------------------------------------------- 1 | {"docs/frontend/modules/sync-post-commit.md":132662633} -------------------------------------------------------------------------------- /docs/_navbar.md: -------------------------------------------------------------------------------- 1 | - [主页](/) 2 | - [个人博客](https://www.clboy.cn) 3 | 4 | -------------------------------------------------------------------------------- /docs/docker/_sidebar.md: -------------------------------------------------------------------------------- 1 | - docker 2 | - [快速开始](docker/quick_start.md) -------------------------------------------------------------------------------- /docs/java/javaweb/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Java WEB 2 | - [Jsp](java/javaweb/jsp.md) -------------------------------------------------------------------------------- /docs/java/template/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 模板引擎 2 | - [beetl](java/template/beetl.md) -------------------------------------------------------------------------------- /docs/frontend/vue/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Vue 2 | - [Vue2](frontend/vue/start.md) 3 | 4 | -------------------------------------------------------------------------------- /docs/java/shiro/shiro-spring.md: -------------------------------------------------------------------------------- 1 | # shiro整合spring 2 | 3 | 4 | 5 | ## Demo 6 | 7 | > Github: -------------------------------------------------------------------------------- /docs/java/shiro/shiro-springboot.md: -------------------------------------------------------------------------------- 1 | # shiro整合springboot 2 | 3 | 4 | 5 | ## Demo 6 | 7 | > Github: -------------------------------------------------------------------------------- /docs/others/facorites/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 收藏夹 2 | 3 | - [软件分享](others/facorites/software-share01) 4 | 5 | -------------------------------------------------------------------------------- /docs/others/markdown/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Markdown 2 | - [基本语法](others/markdown/markdown基本语法.md) 3 | 4 | -------------------------------------------------------------------------------- /docs/resources/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudlandboy/myNote/HEAD/docs/resources/images/logo.png -------------------------------------------------------------------------------- /docs/java/payment/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 第三方支付 2 | - [支付宝支付](java/payment/alipay) 3 | - [微信支付](java/payment/weixinpay) 4 | 5 | -------------------------------------------------------------------------------- /docs/java/springboot/images/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudlandboy/myNote/HEAD/docs/java/springboot/images/20.png -------------------------------------------------------------------------------- /docs/resources/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudlandboy/myNote/HEAD/docs/resources/images/favicon.ico -------------------------------------------------------------------------------- /docs/frontend/node/code/node_mysql/main.js: -------------------------------------------------------------------------------- 1 | const dao=require("./dao"); 2 | 3 | dao.remove(6); 4 | 5 | dao.queryAll(); 6 | -------------------------------------------------------------------------------- /docs/java/mq/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 消息队列 2 | - [RabbitMQ](java/mq/rabbitmq/_sidebar.md) 3 | - [RocketMQ](java/mq/rocketmq/_sidebar.md) -------------------------------------------------------------------------------- /docs/java/cross_domain/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 跨域解决方案 2 | - [为什么有跨域问题](java/cross_domain/what.md) 3 | - [cors解决跨域](java/cross_domain/cors.md) -------------------------------------------------------------------------------- /docs/frontend/node/code/npm-published-test/index.js: -------------------------------------------------------------------------------- 1 | const say=require("clboy-npm-test") 2 | say.sayHi(); 3 | say.sayHello(); 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/frontend/node/code/router_20200427.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudlandboy/myNote/HEAD/docs/frontend/node/code/router_20200427.zip -------------------------------------------------------------------------------- /docs/common/minds/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 思维导图 2 | 3 | - [介绍](common/minds/introduction.md) 4 | 5 | - [JAVA思维导图](common/minds/minds-java.md) 6 | 7 | -------------------------------------------------------------------------------- /docs/java/modules/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 我的JAVA工具集 2 | 3 | [spring-boot-mybatis-plus-page-starter](java/modules/spring-boot-mybatis-plus-page-starter.md) -------------------------------------------------------------------------------- /docs/java/webservice/_sidebar.md: -------------------------------------------------------------------------------- 1 | - webService 2 | - [入门](java/webservice/Introduction.md) 3 | - [Apache CXF入门](java/webservice/apachecxf.md) 4 | 5 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # 云梦 2 | 3 | [dailysentence](./resources/html/dailysentence.html ':include :type=iframe width=100% height=800px frameborder=0 seamless') 4 | -------------------------------------------------------------------------------- /docs/frontend/node/md/get-param.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /docs/java/basic/version_feature/jdk9-11/_sidebar.md: -------------------------------------------------------------------------------- 1 | - JDK9至11 2 | - [模块系统 jdk9](java/basic/version_feature/jdk9-11/module_system.md) -------------------------------------------------------------------------------- /docs/java/mq/rabbitmq/_sidebar.md: -------------------------------------------------------------------------------- 1 | - RabbitMQ3.8.1 2 | - [安装](java/mq/rabbitmq/install.md) 3 | - [使用](java/mq/rabbitmq/starter.md) -------------------------------------------------------------------------------- /docs/java/springboot/images/image-20210324110123986.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudlandboy/myNote/HEAD/docs/java/springboot/images/image-20210324110123986.png -------------------------------------------------------------------------------- /docs/java/springboot/images/image-20210324111339548.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudlandboy/myNote/HEAD/docs/java/springboot/images/image-20210324111339548.png -------------------------------------------------------------------------------- /docs/java/hibernate/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Hibernate 2 | - [配置文件](java/hibernate/properties.md) 3 | - [实体的状态](java/hibernate/status.md) 4 | - [缓存](java/hibernate/cache.md) 5 | -------------------------------------------------------------------------------- /docs/project/vcs/git/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Git 2 | - [简介和安装](vcs/git/introduction.md) 3 | - [使用Git管理项目文件](vcs/git/manager_file.md) 4 | - [git中的三大区域](vcs/git/area.md) 5 | 6 | -------------------------------------------------------------------------------- /docs/java/message_push/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 实时消息推送 2 | 3 | [Springboot整合Webscoket注解版](java/message_push/springboot_ws.md) springboot 2.4.3 4 | 5 | -------------------------------------------------------------------------------- /docs/java/basic/version_feature/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 版本新特性 2 | 3 | - [jdk8](java/basic/version_feature/jdk8/_sidebar.md) 4 | 5 | - [jdk9至11](java/basic/version_feature/jdk9-11/_sidebar.md) -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![logo](resources/images/logo.svg) 4 | 5 | # 云梦 2019 6 | 7 | [View](#云梦) 8 | 9 | 10 | 11 | 12 | 13 | ![color](#B3E6F9) -------------------------------------------------------------------------------- /docs/frontend/modules/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 我的JS工具集 2 | - [docsify文档加密解密](frontend/modules/docsify-decrypt-content) 3 | - [picgo重命名上传文件名插件](frontend/modules/picgo-plugin-dynamic-object-name.md) 4 | -------------------------------------------------------------------------------- /docs/others/deepin/_sidebar.md: -------------------------------------------------------------------------------- 1 | - deepin 2 | - [从安装deepin到配置java开发环境](others/deepin/001.md) 3 | - [deepin的使用](others/deepin/deepin的使用.md) 4 | - [Linux任务栏图标显示错误](others/deepin/dock-icon-error.md) 5 | 6 | -------------------------------------------------------------------------------- /docs/java/redis/sprinboot_redis.md: -------------------------------------------------------------------------------- 1 | # Springboot中使用Redis 2 | 3 | > TODO 4 | 5 | ## 依赖 6 | 7 | ## redisTemplate 8 | 9 | ## StringRedisTemplate 10 | 11 | ## 自定义Template 12 | 13 | ## 封装工具类 14 | 15 | ## 缓存抽象(注解) -------------------------------------------------------------------------------- /docs/java/storage/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 文件储存 2 | - [FastDFS](java/storage/fastdfs) 3 | 4 | - [Springboot整合FastDfs](java/storage/springboot_fastdfs) 5 | 6 | - [Springboot整合七牛云文件储存](java/storage/springboot_qiniu) 7 | 8 | -------------------------------------------------------------------------------- /docs/java/redis/_sidebar.md: -------------------------------------------------------------------------------- 1 | - redis 2 | 3 | - [Redis基础](java/redis/quick_start.md) 4 | 5 | - [Redis集群](java/redis/cluster.md) 6 | - [使用Jedis客户端](java/redis/jedis.md) 7 | - [Springboot中使用redis](java/redis/sprinboot_redis.md) -------------------------------------------------------------------------------- /docs/java/mq/rocketmq/_sidebar.md: -------------------------------------------------------------------------------- 1 | RocketMQ 4.9.4 2 | 3 | - [安装](java/mq/rocketmq/install.md) 4 | - [基本概念](java/mq/rocketmq/concept.md) 5 | - [Springboot集成](java/mq/rocketmq/springboot-integration.md) 6 | 7 | -------------------------------------------------------------------------------- /docs/frontend/node/code/clboy-npm-test/say.js: -------------------------------------------------------------------------------- 1 | function sayHi(){ 2 | console.log('hi! 你好啊!'); 3 | } 4 | 5 | function sayHello(){ 6 | console.log('hello!你好啊!'); 7 | } 8 | 9 | exports.sayHi=sayHi; 10 | exports.sayHello=sayHello -------------------------------------------------------------------------------- /docs/frontend/node/code/quote.js: -------------------------------------------------------------------------------- 1 | var http=require("http") 2 | var hello=require("./hello") 3 | 4 | //调用 hi() 函数,间接地就调用了hello.js 里的 sayHello()函数 5 | hello.hi(); 6 | 7 | //基于hello.service() 函数创建服务 8 | http.createServer(hello.service).listen(8888); -------------------------------------------------------------------------------- /docs/frontend/node/code/requestHandlers.js: -------------------------------------------------------------------------------- 1 | function listCategory() { 2 | return "商品分类列表"; 3 | } 4 | 5 | function listProduct() { 6 | return "商品列表"; 7 | } 8 | 9 | exports.listCategory = listCategory; 10 | exports.listProduct = listProduct -------------------------------------------------------------------------------- /blog.md: -------------------------------------------------------------------------------- 1 | # 博客说明 2 | 3 | 由于本人比较懒,平时写东西都是用的typora软件,然后提交到github使用docsify生成的文档自动更新。一般不会过来更新博客的东西 4 | 5 | 而且我感觉博客的整体目录结构没有单页面站点清晰,只是更利于seo 6 | 7 | 所以,如果你对我的博客比较敢兴趣可以关注顶部导航栏 [我的笔记站点](https://note.clboy.cn/) 8 | 9 | 最近在写:[spring security](http://note.clboy.cn/#/java/spring_security/_sidebar) -------------------------------------------------------------------------------- /docs/frontend/node/code/router_20200427/router.js: -------------------------------------------------------------------------------- 1 | function route(handle, pathname) { 2 | if (typeof handle[pathname] === 'function') { 3 | return handle[pathname](); 4 | } else { 5 | return pathname + ' is not defined'; 6 | } 7 | } 8 | exports.route = route; -------------------------------------------------------------------------------- /docs/frontend/node/code/router_20200427/requestHandlers.js: -------------------------------------------------------------------------------- 1 | function listCategory() { 2 | return "商品分类列表"; 3 | } 4 | 5 | function listProduct() { 6 | return "商品列表"; 7 | } 8 | 9 | exports.listCategory = listCategory; 10 | exports.listProduct = listProduct -------------------------------------------------------------------------------- /docs/java/spring5_source_code/_sidebar.md: -------------------------------------------------------------------------------- 1 | - spring5底层原理 2 | - [容器接口](java/spring5_source_code/applicationContext.md) 3 | - [Bean生命周期](java/spring5_source_code/beanLifeCycle.md) 4 | - [Scope](java/spring5_source_code/scope.md) 5 | - [Aop](java/spring5_source_code/aop.md) 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/java/springCloud/alibaba/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Spring Cloud Alibaba 2 | 3 | 4 | 5 | - [起步](java/springCloud/alibaba/getting.md) 6 | - [整合负载均衡](java/springCloud/alibaba/loadBalancer.md) 7 | - [Sentinel](java/springCloud/alibaba/sentinel.md) 8 | - [配置管理](java/springCloud/alibaba/config.md) 9 | -------------------------------------------------------------------------------- /.halo1-sync.json: -------------------------------------------------------------------------------- 1 | {"docs/java/springCloud/alibaba/config.md":69,"docs/frontend/modules/sync-post-commit.md":71,"docs/java/spring5_source_code/aop.md":72,"docs/java/spring5_source_code/applicationContext.md":73,"docs/java/spring5_source_code/beanLifeCycle.md":74,"docs/java/spring5_source_code/scope.md":75} -------------------------------------------------------------------------------- /docs/frontend/node/code/clboy-npm-test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clboy-npm-test", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "say.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /docs/project/leyoumall/Introduction/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 乐优商城 2 | - [项目资源清单](project/leyoumall/Introduction/list.md) 3 | - [自定义组件使用指南](project/leyoumall/Introduction/custom_component.md) 4 | - [thymeleaf快速上手](project/leyoumall/Introduction/thymeleaf-quick-start.md) 5 | - [用户中心接口说明](project/leyoumall/Introduction/user-interface.md) 6 | 7 | -------------------------------------------------------------------------------- /docs/frontend/node/code/server.js: -------------------------------------------------------------------------------- 1 | //引入http模块 2 | var http=require("http"); 3 | //处理请求函数 4 | function service(request, response) { 5 | response.writeHead(200, {'Content-Type': 'text/plain'}); 6 | response.end('Hello Node.js'); 7 | }; 8 | //创建服务器,参数是处理请求的函数 9 | var server = http.createServer(service); 10 | //绑定端口 11 | server.listen(8888); 12 | -------------------------------------------------------------------------------- /docs/frontend/node/code/router_20200427/index.js: -------------------------------------------------------------------------------- 1 | const requestHandlers=require("./requestHandlers") 2 | const router=require("./router") 3 | const server=require("./server") 4 | 5 | const handle={ 6 | "/listCategory":requestHandlers.listCategory, 7 | "/listProduct":requestHandlers.listProduct 8 | } 9 | 10 | //启动服务 11 | server.start(router.route,handle); -------------------------------------------------------------------------------- /docs/java/springboot/official-document.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Spring Boot官方文档 4 | 5 | 6 | 7 | ## 最新版本文档 8 | 9 | https://docs.spring.io/spring-boot/docs/current/reference/html/ 10 | 11 | 12 | 13 | ## 历史版本文档 14 | 15 | `https://docs.spring.io/spring-boot/docs/你要查看的版本号/reference/html/` 16 | 17 | 下面这个地址可以查看所有历史文档目录: 18 | 19 | https://docs.spring.io/spring-boot/docs/ 20 | 21 | -------------------------------------------------------------------------------- /docs/java/elasticsearch/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Elasticsearch7.5.0 2 | - [Elasticsearch](java/elasticsearch/elasticsearch.md) 3 | - [Elasticsearch客户端](java/elasticsearch/java_elasticsearch.md) 4 | - [Spring Data Elasticsearch](java/elasticsearch/springdata-elasticsearch.md) 5 | - [官方中文文档](https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html) -------------------------------------------------------------------------------- /docs/frontend/node/code/file_20200427/20200427.txt: -------------------------------------------------------------------------------- 1 | Car 2 | Moto 3 | Vehicle 4 | blog 5 | book 6 | Business 7 | Advertising 8 | Associations 9 | Construction 10 | Customer 11 | Commerce 12 | Logistics 13 | Maintenance 14 | Marketing 15 | Metals 16 | Mining 17 | Publish 18 | Print 19 | Estate 20 | Transport 21 | Real 22 | Business 23 | Job 24 | Employ 25 | Computer -------------------------------------------------------------------------------- /docs/frontend/node/code/file_20200427/index.js: -------------------------------------------------------------------------------- 1 | const requestHandlers=require("./requestHandlers") 2 | const router=require("../router_20200427/router") 3 | const server=require("../router_20200427/server") 4 | 5 | const handle={ 6 | "/readFile":requestHandlers.readFile, 7 | "/writeFile":requestHandlers.writeFile 8 | } 9 | 10 | //启动服务 11 | server.start(router.route,handle); -------------------------------------------------------------------------------- /docs/java/redis/jedis.md: -------------------------------------------------------------------------------- 1 | # Jedis 2 | 3 | > Jedis 是 Redis 官方首选的 Java 客户端开发包。 4 | 5 | 6 | 7 | ## 依赖 8 | 9 | https://mvnrepository.com/artifact/redis.clients/jedis 10 | 11 | ```xml 12 | 13 | 14 | redis.clients 15 | jedis 16 | 3.5.2 17 | 18 | ``` 19 | 20 | ## 源代码 21 | 22 | -------------------------------------------------------------------------------- /docs/frontend/node/code/hello.js: -------------------------------------------------------------------------------- 1 | function service(request, response) { 2 | response.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'}); 3 | response.end('Hello Node.js'); 4 | } 5 | 6 | function sayHello(){ 7 | console.log('hello node.js'); 8 | } 9 | 10 | //允许外部通过 hi() 这个函数名称调用 sayHello() 这个函数 11 | exports.hi = sayHello; 12 | //允许外部通过 service() 同名调用 13 | exports.service = service; -------------------------------------------------------------------------------- /docs/temp.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | pom.xml 8 |
9 | 10 | 11 | 12 | https://cdn.tencentfs.clboy.cn/images/project/leyoumall/ 13 | 14 | https://api.ixiaowai.cn/gqapi/gqapi.php -------------------------------------------------------------------------------- /docs/common/minds/introduction.md: -------------------------------------------------------------------------------- 1 | # 介绍 2 | 3 | > 查看地址: 4 | 5 | [在线简易思维导图](/resources/html/mindView.html ':ignore') 6 | 7 | [基于KityMinder-Editor修改的思维导图](http://mind.clboy.cn/) 8 | 9 | 10 | 11 | ## 特别说明 12 | 13 | 思维导图均来自与互联网,并非本人原创,只是看过后稍作修改转为JSON,拿来与大家分享。 14 | 15 | 如有涉及到版权问题,联系立删。 16 | 17 | 18 | 19 | > 思维导图来源: 20 | 21 | 22 | 23 | - [java思维导图社区](https://gitee.com/java-mindmap) 24 | - 百度谷歌等各大搜索引擎 :joy: 25 | 26 | -------------------------------------------------------------------------------- /docs/frontend/node/code/npm-published-test/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "clboy-npm-test": { 6 | "version": "1.0.0", 7 | "resolved": "https://registry.npmjs.org/clboy-npm-test/-/clboy-npm-test-1.0.0.tgz", 8 | "integrity": "sha512-i3kubulC/9TwPun6/7f14BWILbaxaiAPLoaFDPgOH0nPS8lJF4aK2f3NpNkLLA2AqFsx2vpulE9bxg+QuR7yhw==" 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /docs/frontend/node/code/file_20200427/requestHandlers.js: -------------------------------------------------------------------------------- 1 | const fs=require("fs") //引入fs模块 2 | 3 | //同步读取文件的方法 4 | function readFile(){ 5 | let text=fs.readFileSync('20200427.txt'); 6 | return text; 7 | } 8 | 9 | //同步写入文件的方法 10 | function writeFile(){ 11 | fs.writeFileSync('20200427.txt','hello world!'); 12 | return "写入完成!现在文件内容为:\r\n"+readFile(); 13 | } 14 | 15 | exports.readFile=readFile; 16 | exports.writeFile=writeFile; -------------------------------------------------------------------------------- /docs/frontend/vue/code/no-computed.html: -------------------------------------------------------------------------------- 1 |
2 | 单价:
3 | 数量:
4 | 价格:¥{{num*10}} 5 |
6 | 7 | -------------------------------------------------------------------------------- /docs/frontend/node/md/_sidebar.md: -------------------------------------------------------------------------------- 1 | - NodeJS 2 | 3 | - [ES6](frontend/node/md/es6) 4 | - [EventLoop](frontend/node/md/event-loop) 5 | - [初识Node](frontend/node/md/started) 6 | - [模块系统](frontend/node/md/module) 7 | - [路由](frontend/node/md/router) 8 | - [文件操作](frontend/node/md/file) 9 | - [npm安装模块](frontend/node/md/npm-install-module) 10 | - [npm发布模块](frontend/node/md/npm-publish-module) 11 | - [连接Mysql](frontend/node/md/mysql) 12 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/custom-command.html: -------------------------------------------------------------------------------- 1 |
2 | hello world 3 |
4 | hello world 5 |
6 | 7 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/two-way-binding.html: -------------------------------------------------------------------------------- 1 |
2 | 输入文本+50 3 |

4 | 正常绑定:{{a1+50}} 5 |

6 |

7 | 加上.number修饰符:{{a2+50}} 8 |

9 |
10 | 11 | -------------------------------------------------------------------------------- /docs/resources/minds/java/java06.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java基本概念"},"children":[{"data":{"text":"面对对象"},"children":[]},{"data":{"text":"多态"},"children":[]},{"data":{"text":"继承"},"children":[]},{"data":{"text":"封装"},"children":[]},{"data":{"text":"抽象"},"children":[]},{"data":{"text":"类"},"children":[]},{"data":{"text":"对象"},"children":[]},{"data":{"text":"实例"},"children":[]},{"data":{"text":"方法"},"children":[]},{"data":{"text":"重载"},"children":[]}]},"template":"default","theme":"tianpan","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/vue/code/computed.html: -------------------------------------------------------------------------------- 1 |
2 | 输入字符串:
3 | 反转字符串:{{reverseStr}} 4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/utils/browser_plugins.md: -------------------------------------------------------------------------------- 1 | # 浏览器插件 2 | 3 | 4 | 5 | ## Octotree 6 | 7 | > 可以像IDEA一样,以文件树的格式在线阅读Github上源码 8 | > 9 | > 官网:https://www.octotree.io/ 10 | 11 | 12 | 13 | ## Ghelper 14 | 15 | > 适用于开发人员,跨境工作者和研究机构。可以用来访问Goole的一些应用 16 | > 17 | > 官网:https://googlehelper.net/ 18 | 19 | 20 | 21 | ## JSON Formatter 22 | 23 | > 格式化JSON 24 | 25 | 26 | 27 | ## Tampermonkey 28 | 29 | > 一款免费的浏览器扩展和最为流行的用户脚本管理器 30 | > 31 | > 官网:https://www.tampermonkey.net/ 32 | > 33 | > 脚本库:https://greasyfork.org/zh-CN/scripts 34 | 35 | -------------------------------------------------------------------------------- /docs/frontend/node/code/get-param.js: -------------------------------------------------------------------------------- 1 | var http = require('http'); 2 | var url=require('url'); //引入url模块 3 | var util=require('util') //引入util模块 4 | 5 | function service(req,res){ 6 | res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'}); 7 | //解析url参数 8 | let param=url.parse(req.url,true); 9 | param=param.query; 10 | for(k in param){ 11 | res.write(k+":"+param[k]); 12 | res.write("\n"); 13 | } 14 | res.end(); 15 | } 16 | 17 | var server=http.createServer(service); 18 | server.listen(8888); -------------------------------------------------------------------------------- /docs/frontend/vue/code/computed-methods.html: -------------------------------------------------------------------------------- 1 |
2 | 输入字符串:
3 | 反转字符串:{{getReverseStr()}} 4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-if.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/java/springCloud/_sidebar.md: -------------------------------------------------------------------------------- 1 | - SpringCloudGreenwich.SR4 2 | - [系统架构演变](java/springCloud/start.md) 3 | - [远程调用方式](java/springCloud/rpc.md) 4 | - [初识SpringCloud](java/springCloud/getting.md) 5 | - [Eureka高可用和详解](java/springCloud/eureka.md) 6 | - [负载均衡Ribbon](java/springCloud/ribbon.md) 7 | - [Hystrix](java/springCloud/hystrix.md) 8 | - [Feign](java/springCloud/feign.md) 9 | - [Zuul网关](java/springCloud/zuul.md) 10 | - [Spring Cloud Alibaba](java/springCloud/alibaba/_sidebar.md) 11 | - [Spring Cloud Gateway](java/springCloud/spring_gateway.md) 12 | -------------------------------------------------------------------------------- /docs/frontend/node/code/router_20200427/server.js: -------------------------------------------------------------------------------- 1 | var http=require("http"); 2 | var url=require("url"); 3 | 4 | function start(route,handle){ 5 | 6 | function onRequest(request,response){ 7 | let pathname=url.parse(request.url).pathname; 8 | console.log(pathname); 9 | let resContent=route(handle,pathname); 10 | response.writeHead(200,{"Content-Type":"text/plane;charset=utf-8"}); 11 | response.write(resContent); 12 | response.end(); 13 | } 14 | 15 | //调用start方法后就创建服务器,处理函数就是onRequest,监听端口为8888 16 | http.createServer(onRequest).listen(8888); 17 | } 18 | 19 | exports.start=start; -------------------------------------------------------------------------------- /docs/frontend/vue/code/dynamic-param.html: -------------------------------------------------------------------------------- 1 |
2 | 组件外的值:
3 | 4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-else.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | 7 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/one-filter.html: -------------------------------------------------------------------------------- 1 |
2 | 输入英文,首字母自动大写:
3 | 结果:{{str|capitalize}} 4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-bind-dynamic-attr.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/resources/minds/ssm/myBatis-design.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"MyBatis框架整体设计"},"children":[{"data":{"text":"框架图","expandState":"expand"},"children":[{"data":{"id":"bztid4bnylc0","created":1578801334535,"text":" ","image":"https://i.postimg.cc/85D59mFZ/202001121155.png","imageTitle":"202001121155.png","imageSize":{"width":200,"height":158}},"children":[]}]},{"data":{"text":"部件关系,层次结构图"},"children":[{"data":{"id":"bztien45f800","created":1578801453804,"text":" ","image":"https://i.postimg.cc/RhYvS7F5/202001121157.png","imageTitle":"202001121157.png","imageSize":{"width":155,"height":200}},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/vue/code/component-global.html: -------------------------------------------------------------------------------- 1 | 10 |
11 | 12 | 13 | 14 |
15 | 16 | 21 | -------------------------------------------------------------------------------- /docs/mysql/unionquery.md: -------------------------------------------------------------------------------- 1 | # 联合查询 2 | 3 | 合并、联合,将多次查询结果合并成一个结果 4 | 5 | ## 语法 6 | 7 | ``` 8 | 查询语句1 9 | union 【all】 10 | 查询语句2 11 | union 【all】 12 | ... 13 | ``` 14 | 15 | ## 意义 16 | 17 | 1. 将一条比较复杂的查询语句拆分成多条语句 18 | 2. 适用于查询多个表的时候,查询的列基本是一致 19 | 20 | ## 特点 21 | 22 | 1. 要求多条查询语句的查询列数是一致的! 23 | 2. 要求多条查询语句的查询的每一列的类型和顺序最好一致 24 | 3. union关键字默认去重,如果使用union all 可以包含重复项 25 | 26 | ## 案例 27 | 28 | 1. 查询部门编号>90或邮箱包含a的员工信息 29 | 30 | ``` sql 31 | SELECT * FROM employees WHERE email LIKE '%a%' OR department_id>90; 32 | ``` 33 | 34 | ``` sql 35 | SELECT * FROM employees WHERE email LIKE '%a%' 36 | UNION 37 | SELECT * FROM employees WHERE department_id>90; 38 | ``` -------------------------------------------------------------------------------- /docs/frontend/node/code/post-param.js: -------------------------------------------------------------------------------- 1 | var http=require("http"); 2 | var querystring=require("querystring");//引入 querystring 库,帮助解析用的 3 | var util=require("util"); 4 | 5 | function service(req,res){ 6 | // 定义了一个post变量,用于暂存请求体的信息 7 | var post = ''; 8 | 9 | // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中 10 | req.on('data',(chunk)=>{ 11 | post+=chunk; 12 | }) 13 | 14 | // 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。 15 | req.on('end',()=>{ 16 | post=querystring.parse(post); 17 | res.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'}); 18 | res.end(util.inspect(post)); 19 | }) 20 | } 21 | 22 | http.createServer(service).listen(8888); -------------------------------------------------------------------------------- /docs/frontend/vue/code/component-local.html: -------------------------------------------------------------------------------- 1 | 10 |
11 | 12 | 13 | 14 |
15 | 16 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/watch.html: -------------------------------------------------------------------------------- 1 |
2 |

3 |

监测到你将{{b}} 改为了{{c}}

4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/java/basic/_sidebar.md: -------------------------------------------------------------------------------- 1 | - java基础 2 | 3 | - 集合 4 | - [数组复习](java/basic/collection/array.md) 5 | - [linkedList](java/basic/collection/linkedList.md) 6 | - [map](java/basic/collection/map.md) 7 | - 多线程 8 | - [线程的基本概念](java/basic/thread/001.md) 9 | - [实现线程的几种方式](java/basic/thread/002.md) 10 | - [线程的生命周期](java/basic/thread/003.md) 11 | - [线程安全](java/basic/thread/004.md) 12 | - [等待唤醒机制](java/basic/thread/005.md) 13 | - [happenBefore,volitale,dcl](java/basic/thread/006.md) 14 | - [线程池](/java/basic/thread/pool.md) 15 | - IO与NIO 16 | - [NIO](java/basic/IO/nio.md) 17 | - [NIO.2](java/basic/IO/nio2.md) 18 | - [版本新特性](java/basic/version_feature/_sidebar.md) 19 | 20 | -------------------------------------------------------------------------------- /docs/project/vcs/git/introduction.md: -------------------------------------------------------------------------------- 1 | # 简介和安装 2 | 3 | ## git是什么 4 | 5 | > Git是目前世界上最先进的分布式版本控制系统 6 | 7 | ## 何为版本控制系统 8 | 9 | > 你可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。 10 | > 11 | > 当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节 12 | > 13 | > 可以恢复以前的版本 14 | 15 | 16 | 17 | ## 安装Git 18 | 19 | ### windows 20 | 21 | > 下载安装包:https://git-scm.com/download/win 22 | 23 | 然后按默认选项安装即可 24 | 25 | 安装完成后,在开始菜单里找到“Git”->“Git Bash”,打开一个类似命令行窗口的东西,就说明Git安装成功! 26 | 27 | ### Linux 28 | 29 | > 使用相应的包管理工具 `install git` 即可 30 | > 31 | > 例如: 32 | 33 | #### debian 34 | 35 | ```shell 36 | apt install git 37 | ``` 38 | 39 | 40 | 41 | #### centos 42 | 43 | ```shell 44 | yum install git 45 | ``` 46 | 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 个人笔记 2 | 3 | > 这是我的个人笔记,方便日后复习和速查 4 | 5 | 6 | 7 | ## 在线地址 8 | 9 | - [https://note.clboy.cn](https://note.clboy.cn) 10 | 11 | - 备用:[https://cloudlandboy.github.io/myNote](https://cloudlandboy.github.io/myNote) 12 | 13 | 14 | 15 | ## 离线查看 16 | 17 | 1. 确保已经安装了 `node` 环境 18 | 19 | 2. 全局安装 `docsify-cli` 20 | 21 | ```shell 22 | npm i docsify-cli -g 23 | ``` 24 | 25 | 3. clone到本地并启动 26 | 27 | ```shell 28 | git clone https://github.com/cloudlandboy/myNote.git 29 | cd myNote/ 30 | docsify serve docs/ 31 | ``` 32 | 33 | 4. 打开浏览器并访问 [http://127.0.0.1:3000/](http://127.0.0.1:3000/) 34 | 35 | 36 | 37 | 图片无法查看说明 38 | 39 | 由于笔记中的所有媒体资源都是存放在租用的服务商对象存储桶中,为防止流量流出造成额外费用负担,故而禁止了被其他网站引用。 40 | 41 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/cache.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"缓存作用","note":"缓存是实际工作中非常常用的一种提高性能的方法。而在java中,所谓缓存,就是将程序或系统经常要调用的对象存在内存中,再次调用时可以快速从内存中获取对象,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。\n\n在增删改查中,数据库查询占据了数据库操作的80%以上,而非常频繁的磁盘I/O读取操作,会导致数据库性能极度低下。而数据库的重要性就不言而喻了:\n\n数据库通常是企业应用系统最核心的部分\n数据库保存的数据量通常非常庞大\n数据库查询操作通常很频繁,有时还很复杂\n在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存"},"children":[{"data":{"text":"操作系统磁盘缓存->减少磁盘机械操作","priority":1},"children":[]},{"data":{"text":"数据库缓存->减少文件系统I/O","priority":2},"children":[]},{"data":{"text":"应用程序缓存->减少对数据库的查询","priority":3},"children":[]},{"data":{"text":"Web服务器缓存->减少应用服务器请求","priority":4},"children":[]},{"data":{"text":"客户端浏览器缓存->减少对网站的访问","priority":5},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/springboot/devtools.md: -------------------------------------------------------------------------------- 1 | # SpringBoot工程热部署 2 | 3 | > 我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间,我们可以在修改代码后不重启就能生效,在 pom.xml 中添加如下配置就可以实现这样的功能,我们称之为热部署。 4 | 5 | ## 添加依赖 6 | 7 | ```xml 8 | 9 | 10 | org.springframework.boot 11 | spring-boot-devtools 12 | 13 | ``` 14 | 15 | ## IDEA自动编译 16 | 17 | > Intellij IEDA默认情况下不会自动编译,需要对IDEA进行自动编译的设置,不然还需要按`Ctrl+F9`进行编译 18 | 19 | ![image-20210324110123986](https://cdn.tencentfs.clboy.cn/images/2021/20210911203238052.png) 20 | 21 | > 然后使用快捷键` Shift+Ctrl+Alt+/`,选择 `Registry...` 22 | 23 | ![image-20210324111339548](https://cdn.tencentfs.clboy.cn/images/2021/20210911203238241.png) 24 | 25 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-else-if.html: -------------------------------------------------------------------------------- 1 |
2 |

{{count}}

3 | 4 |
5 |
6 |
7 |
8 | 9 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-bind.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | 随机图片 4 |

5 |

6 | 7 |

8 |
9 | 10 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-bind-class.html: -------------------------------------------------------------------------------- 1 | 16 |
17 |
18 | box 19 |
20 |
21 | 22 | -------------------------------------------------------------------------------- /docs/resources/minds/java/java01.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"Java 简介","note":"Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。\n\nJava具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。"},"children":[{"data":{"text":"Java三大体系","expandState":"collapse","layout_mind_offset":{"x":-21,"y":0}},"children":[{"data":{"text":"JavaSE (J2SE)","note":"(Java2 Platform Standard Edition,java平台标准版)"},"children":[]},{"data":{"text":"JavaEE (J2EE)","note":"(Java 2 Platform,Enterprise Edition,java平台企业版)"},"children":[]},{"data":{"text":"JavaME (J2ME)","note":"(Java 2 Platform Micro Edition,java平台微型版)"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/node/code/post-param-form.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Node.js获取 POST 请求内容 7 | 13 | 14 | 15 |
16 |

姓名:

17 |

性别:男  

18 |

生日:

19 |

20 |
21 | 22 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/component-props.html: -------------------------------------------------------------------------------- 1 | 10 |
11 | 12 | 13 | 14 |
15 | 16 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/Listen-events.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | VUE监听事件 7 | 8 | 9 | 10 |
11 | 12 | 13 |
14 | 15 | 28 | 29 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/custom-command-param.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 | 8 | -------------------------------------------------------------------------------- /docs/java/spring_security/_sidebar.md: -------------------------------------------------------------------------------- 1 | - Spring Security springboot 2.6.13 2 | - [ 认证与授权基础知识](java/spring_security/basic.md) 3 | - [过滤器和过滤器链](java/spring_security/filter.md) 4 | - [HTTP基础认证](java/spring_security/http_basic.md) 5 | - [spring security配置](java/spring_security/config_class.md) 6 | - [自定义Filter](java/spring_security/custom_filter.md) 7 | - [密码和编码器](java/spring_security/password.md) 8 | - [Spring Security核心组件](java/spring_security/core.md) 9 | - [Spring Security定制化](java/spring_security/customization.md) 10 | - [认证流程和源码解析](java/spring_security/authentication_process.md) 11 | - [构建基于JWT的认证](java/spring_security/jwt_auth.md) 12 | - [多因子认证(MFA)](java/spring_security/mfa.md) 13 | - [授权](java/spring_security/authorization.md) 14 | - [OAuth2](java/spring_security/oauth2.md) 15 | -------------------------------------------------------------------------------- /docs/frontend/node/md/file.md: -------------------------------------------------------------------------------- 1 | # 文件操作 2 | 3 | > Node.js 文件系统(fs 模块) 4 | 5 | 6 | 7 | ## 准备测试用的文件 8 | 9 | 测试用的文件 10 | 11 | 12 | 13 | ## 异步和同步 14 | 15 | Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。 16 | 17 | 异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。 18 | 19 | 建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。 20 | 21 | 22 | 23 | ## 同步读写文件 24 | 25 | 创建业务处理模块 `requestHandlers.js` 26 | 27 | [requestHandlers.js](../code/file_20200427/requestHandlers.js ':include :type=code') 28 | 29 | ?> `router.js` 和 `server.js` 均和上节一样 30 | 31 | 主模块index.js 32 | 33 | [index.js](../code/file_20200427/index.js ':include :type=code') 34 | 35 | **测试** 36 | 37 | - 读取文件:http://localhost:8888/readFile 38 | - 写入文件:http://localhost:8888/writeFile -------------------------------------------------------------------------------- /docs/resources/minds/java/java30.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java8新特性","expandState":"expand"},"children":[{"data":{"text":"Lambda 表达式","note":"Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。"},"children":[]},{"data":{"text":"方法引用","note":"方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。"},"children":[]},{"data":{"text":"默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。"},"children":[]},{"data":{"text":"新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。"},"children":[]},{"data":{"text":"Stream API","note":"新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。"},"children":[]},{"data":{"text":"Date Time API − 加强对日期与时间的处理。"},"children":[]},{"data":{"text":"Optional 类","note":"Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。"},"children":[]},{"data":{"text":"Nashorn, JavaScript 引擎","note":"Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。"},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/aop/aop-basic.md: -------------------------------------------------------------------------------- 1 | 10 | # Aop 11 | 12 | 13 | 14 | ## Aspect 15 | 16 | > 切面,即一个横跨多个核心逻辑的功能,或者称之为系统关注点; 17 | 18 | 19 | 20 | ## Joinpoint 21 | 22 | > 连接点,即定义在应用程序流程的何处插入切面的执行; 23 | 24 | 25 | 26 | ## Pointcut 27 | 28 | > 切入点,即一组连接点的集合; 29 | 30 | 31 | 32 | ## Advice 33 | 34 | > 增强,指特定连接点上执行的动作; 35 | 36 | 37 | 38 | ## Weaving 39 | 40 | > 织入,指将切面整合到程序的执行流程中; 41 | 42 | 43 | 44 | ## Target Object 45 | 46 | > 目标对象,即真正执行业务的核心逻辑对象; 47 | 48 | 49 | 50 | ## Introduction 51 | 52 | > 引介,指为一个已有的Java对象动态地增加新的接口; 53 | 54 | 55 | 56 | ## AOP Proxy 57 | 58 | > AOP代理,是客户端持有的增强后的对象引用。 59 | 60 | 61 | 62 | ## Interceptor 63 | 64 | > 拦截器,是一种实现增强的方式; -------------------------------------------------------------------------------- /docs/mysql/limitquery.md: -------------------------------------------------------------------------------- 1 | # 分页查询 2 | 3 | ## 应用场景 4 | 5 | 当要显示的数据,一页显示不全,需要分页提交sql请求 6 | 7 | ## 语法 8 | 9 | ``` 10 | select 查询列表 11 | from 表 12 | 【join type】 join 表2 13 | on 连接条件 14 | where 筛选条件 15 | group by 分组字段 16 | having 分组后的筛选 17 | order by 排序的字段】 18 | limit 【offset,】size; 19 | ``` 20 | 21 | `offset`要显示条目的起始索引(起始索引从0开始) 22 | 23 | `size` 要显示的条目个数 24 | 25 | ## 分页公式 26 | 27 | `(page-1)*size,size` 28 | 29 | ## 案例 30 | 31 | 1. 查询前五条员工信息 32 | 33 | ``` sql 34 | SELECT * FROM employees LIMIT 0,5; 35 | # 或者 36 | SELECT * FROM employees LIMIT 5; 37 | ``` 38 | 39 | 40 | 41 | 2. 查询第11条~第25条 42 | 43 | ``` sql 44 | SELECT * FROM employees LIMIT 10,15; 45 | ``` 46 | 47 | 3. 有奖金的员工信息,并且工资较高的前10名显示出来 48 | 49 | ``` sql 50 | SELECT 51 | * 52 | FROM 53 | employees 54 | WHERE commission_pct IS NOT NULL 55 | ORDER BY salary DESC 56 | LIMIT 10; 57 | ``` 58 | 59 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/multiple-filter.html: -------------------------------------------------------------------------------- 1 |
2 | 输入英文,首字母和尾字母自动大写:
3 | 结果:{{str|capitalize|capitalizeLastLetter}} 4 |
5 | 6 | -------------------------------------------------------------------------------- /docs/resources/minds/java/java04.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java 开发环境配置"},"children":[{"data":{"text":"下载JDK","priority":1},"children":[]},{"data":{"text":"配置环境变量","priority":2},"children":[]},{"data":{"text":"JAVA_HOME 设置","priority":3},"children":[]},{"data":{"text":"PATH设置","priority":4,"note":"系统创建好的,存储的是 .exe 可执行文件程序的目录,针对 JDK 可配置其 bin 目录,目录下的 `javac`、`java`、`javadoc` 命令就可以随时使用了。"},"children":[]},{"data":{"text":"CLASSPATH 设置","priority":5,"note":null,"expandState":"collapse"},"children":[{"data":{"id":"bzrvvdxu2t40","created":1578636320537,"text":"自己动手创建的,存储的是 .class 字节码文件的目录。"},"children":[]},{"data":{"id":"bzrvvkimcrc0","created":1578636334854,"text":".;就是class字节码文件的所在目录"},"children":[]},{"data":{"id":"bzrvvmrjluw0","created":1578636339748,"text":"注意: . 号代表的是当前目录"},"children":[]}]},{"data":{"text":"测试JDK是否安装成功","priority":6},"children":[]},{"data":{"text":"安装java开发工具(eclipse、IntelliJ IDEA)","priority":7},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/vue/code/axios.html: -------------------------------------------------------------------------------- 1 | 11 |
12 | 13 | 14 | 15 | 16 | 17 |
{{k}}{{v}}
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/fetch.html: -------------------------------------------------------------------------------- 1 | 11 |
12 | 13 | 14 | 15 | 16 | 17 |
{{k}}{{v}}
18 |
19 | 20 | 36 | -------------------------------------------------------------------------------- /docs/java/webservice/apachecxf.md: -------------------------------------------------------------------------------- 1 | # apache CXF入门 2 | 3 | maven依赖: 4 | 5 | ```xml 6 | 7 | org.apache.cxf 8 | cxf-rt-frontend-jaxws 9 | 3.0.1 10 | 11 | 12 | org.apache.cxf 13 | cxf-rt-transports-http 14 | 3.0.1 15 | 16 | ``` 17 | 18 | 19 | 20 | ## 整合Spring开发 21 | 22 | 第一步:创建动态web项目 23 | 24 | 第二步:导入CXF相关jar包 25 | 26 | 第三步:在web.xml中配置CXF框架提供的一个Servlet 27 | 28 | ```xml 29 | 30 | CXFServlet 31 | org.apache.cxf.transport.servlet.CXFServlet 32 | 33 | 34 | CXFServlet 35 | /service/* 36 | 37 | ``` 38 | 39 | 案例: 40 | 41 | [WebService入门](https://gitee.com/syl_zzrfdsn/HelloWebService) -------------------------------------------------------------------------------- /docs/java/hibernate/transaction.md: -------------------------------------------------------------------------------- 1 | ``` java 2 | package club.zzrfdsnsyl.demo.c_transcation; 3 | 4 | import org.hibernate.Session; 5 | import org.hibernate.Transaction; 6 | import org.junit.Test; 7 | 8 | import club.zzrfdsnsyl.Utils.HbUtil; 9 | import club.zzrfdsnsyl.domain.Customer; 10 | 11 | public class HbTranscation { 12 | 13 | @Test 14 | public void transcation() { 15 | Session session = HbUtil.getCurrentSession(); 16 | Session session2 = HbUtil.getCurrentSession(); 17 | System.out.println(session==session2); 18 | 19 | 20 | Transaction transcation = session.beginTransaction(); //获取并开启事物 21 | Customer customer = session.get(Customer.class, 1L); 22 | customer.setCust_phone("13954123687"); 23 | 24 | transcation.commit();//提交事物 25 | 26 | // transcation.rollback();//回滚事物 27 | 28 | //getCurrentSession()获得的session会在提交或回滚事物后会自动关闭 写不写都行 29 | session.close(); 30 | 31 | System.out.println(customer); 32 | } 33 | } 34 | 35 | ``` 36 | 37 | -------------------------------------------------------------------------------- /docs/mysql/_sidebar.md: -------------------------------------------------------------------------------- 1 | - mysql 2 | - [数据库和SQL概述](mysql/dbandsql.md) 3 | - [mysql的安装与使用](mysql/install.md) 4 | - [基本查询](mysql/basicquery.md) 5 | - [条件查询](mysql/filterquery.md) 6 | - [排序查询](mysql/sortquery.md) 7 | - [单行函数](mysql/singlerowfunctions.md) 8 | - [分组函数](mysql/groupfunctions.md) 9 | - [分组查询](mysql/groupquery.md) 10 | - [连接查询](mysql/joinquery.md) 11 | - [子查询](mysql/subquery.md) 12 | - [分页查询](mysql/limitquery.md) 13 | - [联合查询](mysql/unionquery.md) 14 | - [DML(数据操纵语言)](mysql/dml.md) 15 | - [DDL(数据定义语言)](mysql/ddl.md) 16 | - [事务](mysql/transaction.md) 17 | - [视图](mysql/view.md) 18 | - [变量](mysql/variable.md) 19 | - [存储过程](mysql/procedure.md) 20 | - [存储函数](mysql/function.md) 21 | - [流程控制结构](mysql/processcontrol.md) 22 | - [SQL练习-01](mysql/practice01.md) 23 | - [SQL练习-02](mysql/practice02.md) 24 | - [SQL练习-03(取两表不同数据)](mysql/practice03.md) 25 | - [存储引擎](mysql/storage_engine.md) 26 | - [索引](mysql/index.md) 27 | - [SQL优化](mysql/sql_optimization.md) 28 | 29 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/component-event.html: -------------------------------------------------------------------------------- 1 | 10 |
11 | 12 | 13 | 14 |
15 | 16 | -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-components.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"mybatis源码的几个主要部件"},"children":[{"data":{"text":"SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能;"},"children":[]},{"data":{"text":"Executor:MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护;"},"children":[]},{"data":{"text":"StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。"},"children":[]},{"data":{"text":"ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数;"},"children":[]},{"data":{"text":"ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;"},"children":[]},{"data":{"text":"TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换;"},"children":[]},{"data":{"text":"MappedStatement:MappedStatement维护了一条节点的封装;"},"children":[]},{"data":{"text":"SqlSource:负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回;"},"children":[]},{"data":{"text":"BoundSql:表示动态生成的SQL语句以及相应的参数信息;"},"children":[]},{"data":{"text":"Configuration:MyBatis所有的配置信息都维持在Configuration对象之中;"},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/mq/rocketmq/concept.md: -------------------------------------------------------------------------------- 1 | # RocketMQ的基本概念 2 | 3 | 4 | 5 | ## Producer(消息生产者) 6 | 7 | 生产者(Producer)就是消息的发送者 8 | 9 | ## Topic(消息主题) 10 | 11 | 消息的主题,表示一类消息的集合名称,如果你学习过RabbitMQ,Topic就类似与RoutingKey 12 | 13 | ## Consumer(消息消费者) 14 | 15 | 消息生成者发送 指定的Topic 消息,消息消费者订阅 指定的Topic 消息进行消费 16 | 17 | ## Broker(代理服务器) 18 | 19 | 消息中转角色,负责存储消息、转发消息 20 | 21 | ## NameServer(名字服务器) 22 | 23 | 可以理解为它是一个服务发现组件,注册中心。Broker会将自己注册到NameServer, 24 | 25 | 生产者和消费者从NameServer中获取Broker地址 26 | 27 | ## Producer-Group(生产者组) 28 | 29 | 生产者组。代表发送同一类消息的生产者 30 | 31 | ## Consumer-Group(消费者组) 32 | 33 | 消费者组,和生产者组类似,消费同一类消息的多个 consumer 实例组成一个消费者组 34 | 35 | ## 消息传播模式 36 | 37 | ### 集群 38 | 39 | 生成者发送一条消息,该消息只会被消费者分组下的其中一个消费者消费,同RabbitMQ中多个消费者监听同一个队列 40 | 41 | ### 广播 42 | 43 | 生成者发送一条消息,消费者分组下的每一个消费者都会收到消息,同RabbitMQ中多个队列绑定同一个交换机 44 | 45 | 46 | 47 | ## 消费模式 48 | 49 | ### 推模式 50 | 51 | 推模式下,Broker收到消息后主动推送消息给客户端,优点是及时性较好,但如果客户端没有做好流控,一旦服务端推送大量消息到客户端时,就会导致客户端消息堆积甚至崩溃 52 | 53 | ### 拉模式 54 | 55 | 拉模式下,客户端需要主动到服务端取数据,优点是客户端可以依据自己的消费能力进行消费,但拉取的频率也需要用户自己控制,拉取频繁容易造成服务端和客户端的压力,拉取间隔长又容易造成消费不及时 -------------------------------------------------------------------------------- /docs/java/mq/rocketmq/install.md: -------------------------------------------------------------------------------- 1 | # RocketMQ的安装 2 | 3 | ## 使用二进制包部署 4 | 5 | 6 | 7 | 官方文档已经详细介绍了该如何安装: 8 | 9 | https://rocketmq.apache.org/zh/docs/4.x/introduction/02quickstart 10 | 11 | 12 | 13 | 安装官网文档下载二进制包后很容易就把NameServer和Broker启动起来了,安装我这里就总结下注意点 14 | 15 | 首先RocketMQ使用java开发的,所以要准备安装的机器上要有java环境,另外在环境变量中要通过 `JAVA_HOME` 去指定java的安装目录 16 | 17 | 建议第一次启动的时候不要用nohub命令,让其直接在控制台启动,查看一次完整的启动流程日志,比如我之前直接在环境变量path中配置的jdk目录,并没有 `JAVA_HOME` 这个变量,直接运行会给出错误提示,使用nohub反而第一时间看不出问题。确保能够在机器上正常启动之后再加上nohub在后台运行 18 | 19 | 20 | 21 | ## 部署控制面板 22 | 23 | RocketMQ不像RabibitMQ那样安装之后就自带了可视化的web界面,RocketMQ的web可视化界面需要单独部署 24 | 25 | 官方文档给出了docker部署和源码部署两种方式: 26 | 27 | https://rocketmq.apache.org/zh/docs/4.x/deployment/03Dashboard#1-docker-%E9%95%9C%E5%83%8F%E5%AE%89%E8%A3%85 28 | 29 | 为了方便可直接用docker部署,注意将映射到宿主机的端口8080修改为别的,不要和正在运行的服务冲突 30 | 31 | ```shell 32 | docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 20001:8080 -t apacherocketmq/rocketmq-dashboard:latest 33 | ``` 34 | 35 | 启动后访问 http://127.0.0.1:20001 就能看到控制台界面了,但是会报错,连接不上NameServer,因为我们填写的是127.0.0.1,可以在控制台运维面板中修改为宿主机ip 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/cache-comparison.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"缓存对比","expandState":"expand"},"children":[{"data":{"text":"简介","expandState":"expand","layout":null},"children":[{"data":{"text":"redis","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"属于独立的运行程序,需要单独安装后,使用Java中的Jedis来操纵。\n因为它是独立,所以如果你写个单元测试程序,放一些数据在redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的。","layout":null},"children":[]}]},{"data":{"text":"ehcache","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"与Redis明显不同,它与java程序是绑在一起的,java程序活着,它就活着。\n譬如,写一个独立程序放数据,再写一个独立程序拿数据,那么是拿不到数据的。\n只能在独立程序中才能拿到数据。","layout":null},"children":[]}]}]},{"data":{"text":"集群","expandState":"expand","layout":null},"children":[{"data":{"text":"redis","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"Redis可以做主从来集群,\n例如,在A电脑上装个Redis,作为主库;\n在其他电脑上装Redis,作为从库;这样主库拥有读和写的功能,而从库只拥有读的功能。\n每次主库的数据都会同步到从库中。","layout":null},"children":[]}]},{"data":{"text":"ehcache","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"创建一个ehcache.xml文件,里面配置cache的信息,这个配置是包含了集群的配置","layout":null},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/project/leyoumall/_sidebar.md: -------------------------------------------------------------------------------- 1 | - 乐优商城 2 | 3 | - [项目资料](project/leyoumall/Introduction/_sidebar.md ':target=_blank') 4 | - [项目背景](project/leyoumall/background.md) 5 | - [项目搭建](project/leyoumall/create.md) 6 | - [搭建后台管理前端页面](project/leyoumall/manageweb.md) 7 | - [品牌管理和图片上传](project/leyoumall/brand.md) 8 | - [商品规格管理](project/leyoumall/item-spec-manage.md) 9 | - [商品管理](project/leyoumall/goods-manage.md) 10 | - [Elasticsearch](/#/java/elasticsearch/elasticsearch.md ' :ignore :target=_blank') 11 | - [Spring Data Elasticsearch](/#/java/elasticsearch/springdata-elasticsearch ':ignore :target=_blank') 12 | - [基本商品搜索](project/leyoumall/basi-search.md) 13 | - [商品搜索过滤](project/leyoumall/search-filter.md) 14 | - [商品详情和静态化](project/leyoumall/goods-info.md) 15 | - [Rabbitmq](/#/java/mq/rabbitmq/_sidebar.md ' :ignore :target=_blank') 16 | - [基于AMQP对项目改造](project/leyoumall/amqp-data-sync.md) 17 | - [用户注册](project/leyoumall/user-register.md) 18 | - [用户登录授权中心](project/leyoumall/jwt.md) 19 | - [购物车服务](project/leyoumall/shopping-cart.md) 20 | - [订单支付](project/leyoumall/order-pay.md) 21 | - [支付宝支付(沙箱)](project/leyoumall/alipay.md) 22 | 23 | -------------------------------------------------------------------------------- /docs/frontend/vue/code/component-each.html: -------------------------------------------------------------------------------- 1 | 10 |
11 | 12 |
13 | 14 | -------------------------------------------------------------------------------- /docs/java/hibernate/loadmethod.md: -------------------------------------------------------------------------------- 1 | # 加载策略 2 | 3 | ## 类级别的加载策略 4 | 5 | `get`:**立即检索**。get方法一执行,立即查询所有字段的数据。 6 | 7 | `load`:**延迟检索**。默认情况,load方法执行后,如果只使用OID的值不进行查询,如果要使用其他属性值才查询 8 | 9 | 需要断点调试查看 10 | 11 | ```java 12 | package club.zzrfdsnsyl.demo.a_OID; 13 | 14 | import org.hibernate.Session; 15 | import org.hibernate.Transaction; 16 | import org.junit.Test; 17 | 18 | import club.zzrfdsnsyl.Utils.HbUtil; 19 | import club.zzrfdsnsyl.domain.Customer; 20 | 21 | /** 22 | * 就是 sessino.get()和.load() 23 | * @author SYL 24 | * 25 | */ 26 | public class OID { 27 | 28 | @Test 29 | public void t1() { 30 | Session session = HbUtil.getCurrentSession(); 31 | Transaction transaction = session.beginTransaction(); 32 | Customer customer = session.get(Customer.class, 1L); 33 | System.out.println(customer); 34 | transaction.commit(); 35 | session.close(); 36 | } 37 | @Test 38 | public void t2() { 39 | Session session = HbUtil.getCurrentSession(); 40 | Transaction transaction = session.beginTransaction(); 41 | Customer customer = session.load(Customer.class, 2L); 42 | System.out.println(customer); 43 | transaction.commit(); 44 | session.close(); 45 | } 46 | } 47 | 48 | ``` 49 | 50 | 51 | 52 | ## 关联级别的加载策略 53 | 54 | -------------------------------------------------------------------------------- /docs/frontend/node/md/module.md: -------------------------------------------------------------------------------- 1 | # 模块系统 2 | 3 | 在node.js中,所谓的模块,就是别人写的 js,比如在前面教程中的 server.js 里引入 http模块,url模块 4 | 5 | 6 | 7 | ## 创建模块 8 | 9 | 首先创建一个`hello.js` 10 | 11 | 定义了两个函数 12 | 13 | ```js 14 | function service(request, response) { 15 | response.writeHead(200, {'Content-Type': 'text/plain;charset=utf-8'}); 16 | response.end('Hello Node.js'); 17 | } 18 | 19 | function sayHello(){ 20 | console.log('hello node.js'); 21 | } 22 | ``` 23 | 24 | 但是,这两个函数并不能通过外部调用,除非通过 exports 指定如何去调用他们 25 | 26 | Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。 27 | 28 | ```js 29 | //允许外部通过 hi() 这个函数名称调用 sayHello() 这个函数 30 | exports.hi = sayHello; 31 | //允许外部通过 service() 同名调用 32 | exports.service = service; 33 | ``` 34 | 35 | 如此这般 hello 这个模块就准备好了 36 | 37 | 38 | 39 | ## 引用模块 40 | 41 | 在同一目录下创建`quote.js`文件, 使用`require('./hello')`引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js),如果不加上 `./` ,就会到 node安装目录下去寻找 ,是找不到滴。。。 42 | 43 | [quote](../code/quote.js ':include :type=code') 44 | 45 | hello.js quote.js 46 | 47 | 访问测试 http://127.0.0.1:8888/ -------------------------------------------------------------------------------- /docs/resources/minds/java/java20.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java StringBuffer \n和 StringBuilder 类"},"children":[{"data":{"text":"与String类区别","expandState":"collapse"},"children":[{"data":{"text":"StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象"},"children":[]}]},{"data":{"text":"StringBuffer与StringBuilder区别","expandState":"collapse"},"children":[{"data":{"text":"StringBuffer的方法是线程安全的(不能同步访问)"},"children":[]},{"data":{"text":"StringBuilder 相较于 StringBuffer 有速度优势"},"children":[]}]},{"data":{"text":"public StringBuffer append(String s)","expandState":"collapse"},"children":[{"data":{"text":"将指定的字符串追加到此字符序列。"},"children":[]}]},{"data":{"text":"public StringBuffer reverse()","expandState":"collapse"},"children":[{"data":{"text":"将此字符序列用其反转形式取代。"},"children":[]}]},{"data":{"text":"public delete(int start, int end)","expandState":"collapse"},"children":[{"data":{"text":"移除此序列的子字符串中的字符。"},"children":[]}]},{"data":{"text":"public insert(int offset, int i)","expandState":"collapse"},"children":[{"data":{"text":"将 int 参数的字符串表示形式插入此序列中。"},"children":[]}]},{"data":{"text":"replace(int start, int end, String str)","expandState":"collapse"},"children":[{"data":{"text":"使用给定 String 中的字符替换此序列的子字符串中的字符。"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/others/deepin/dock-icon-error.md: -------------------------------------------------------------------------------- 1 | # Linux任务栏图标显示错误 2 | 3 | 4 | 5 | 最近在使用realVnc查看器创建连接时候发现连接窗口的dock栏图标不正确,居然给我显示 Motrix的图标,喽!就介个死样子 6 | 7 | ![image-20221114152841689](https://cdn.tencentfs.clboy.cn/images/2022/20221115090440196.png) 8 | 9 | 解决方法,查看 `~/.local/share/applications` 目录下的所有 `desktop` 文件中 `StartupWMClass` 属性的值是不是未定义,一般这个值设为应用的名称,保证唯一,不和其他应用程序冲突 10 | 11 | ```properties 12 | [Desktop Entry] 13 | Encoding=UTF-8 14 | Type=Application 15 | Name=Motrix 16 | Icon=/home/clboy/.local/share/appimages/icons/motrix.png 17 | Categories=Network 18 | Exec="/home/clboy/.local/share/appimages/Motrix-1.6.11.AppImage" 19 | StartupWMClass= 20 | ``` 21 | 22 | 修改后 23 | 24 | ```properties 25 | [Desktop Entry] 26 | Encoding=UTF-8 27 | Type=Application 28 | Name=Motrix 29 | Icon=/home/clboy/.local/share/appimages/icons/motrix.png 30 | Categories=Network 31 | Exec="/home/clboy/.local/share/appimages/Motrix-1.6.11.AppImage" 32 | StartupWMClass=Motrix 33 | ``` 34 | 35 | 36 | 37 | [参考:Different icons in dock for the same application](https://askubuntu.com/questions/1411410/different-icons-in-dock-for-the-same-application-gnome-terminal) 38 | 39 | [参考:desktop文件的StartupWMClass字段代表什么?](https://qastack.cn/ubuntu/367396/what-does-the-startupwmclass-field-of-a-desktop-file-represent) -------------------------------------------------------------------------------- /docs/frontend/vue/code/v-for.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 6 | 7 |

索引指定别名 (或对象key)

8 | 11 | 14 | 17 | 18 |

纯数字遍历

19 | {{i}} 20 | 21 |

与v-if使用

22 | {{i}} 23 |
24 | 25 | 32 | -------------------------------------------------------------------------------- /docs/java/cross_domain/what.md: -------------------------------------------------------------------------------- 1 | # 跨域问题 2 | 3 | 跨域:浏览器对于javascript的同源策略的限制 。 4 | 5 | 以下情况都属于跨域: 6 | 7 | | 跨域原因说明 | 示例 | 8 | | ------------------ | -------------------------------------- | 9 | | 域名不同 | `www.jd.com` 与 `www.taobao.com` | 10 | | 域名相同,端口不同 | `www.jd.com:8080` 与 `www.jd.com:8081` | 11 | | 二级域名不同 | `item.jd.com` 与 `miaosha.jd.com` | 12 | 13 | 如果**域名和端口都相同,但是请求路径不同**,不属于跨域,如: 14 | 15 | `www.jd.com/item` 16 | 17 | `www.jd.com/goods` 18 | 19 | http和https也属于跨域 20 | 21 | 而我们刚才是从`manage.leyou.com`去访问`api.leyou.com`,这属于二级域名不同,跨域了。 22 | 23 | 24 | 25 | ## 为什么有跨域问题? 26 | 27 | 跨域不一定都会有跨域问题。 28 | 29 | 因为跨域问题是浏览器对于ajax请求的一种安全限制:**一个页面发起的ajax请求,只能是与当前页域名相同的路径**,这能有效的阻止跨站攻击。 30 | 31 | 因此:**跨域问题 是针对ajax的一种限制**。 32 | 33 | 但是这却给我们的开发带来了不便,而且在实际生产环境中,肯定会有很多台服务器之间交互,地址和端口都可能不同,怎么办? 34 | 35 | 36 | 37 | ## 解决跨域问题的方案 38 | 39 | 目前比较常用的跨域解决方案有3种: 40 | 41 | - Jsonp 42 | 43 | 最早的解决方案,利用script标签可以跨域的原理实现。 44 | 45 | 限制: 46 | 47 | - 需要服务的支持 48 | - 只能发起GET请求 49 | 50 | - nginx反向代理 51 | 52 | 思路是:利用nginx把跨域反向代理为不跨域,支持各种请求方式 53 | 54 | 缺点:需要在nginx进行额外配置,语义不清晰 55 | 56 | - CORS 57 | 58 | 规范化的跨域请求解决方案,安全可靠。 59 | 60 | 优势: 61 | 62 | - 在服务端进行控制是否允许跨域,可自定义规则 63 | - 支持各种请求方式 64 | 65 | 缺点: 66 | 67 | - 会产生额外的请求 -------------------------------------------------------------------------------- /docs/resources/minds/java/java21.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java数组","expandState":"expand"},"children":[{"data":{"text":"声明数组变量","expandState":"collapse"},"children":[{"data":{"text":"dataType[] arrayRefVar; // 首选的方法"},"children":[]},{"data":{"text":"dataType arrayRefVar[]; // 效果相同,但不是首选方法"},"children":[]}]},{"data":{"text":"创建数组","expandState":"collapse"},"children":[{"data":{"text":"arrayRefVar = new dataType[arraySize];"},"children":[]},{"data":{"text":"dataType[] arrayRefVar = {value0, value1, ..., valuek};"},"children":[]},{"data":{"text":"数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1"},"children":[]},{"data":{"text":" ","image":"https://i.postimg.cc/WbLQmmMq/202001101711.jpg","imageTitle":"202001101711.jpg","imageSize":{"width":200,"height":108}},"children":[]}]},{"data":{"text":"处理数组","expandState":"collapse"},"children":[{"data":{"text":"数组的元素类型和数组的大小都是确定的,使用基本循环或者 foreach 循环处理数组元素","note":"```\ndouble[] myList = {1.9, 2.9, 3.4, 3.5};\n\n// 打印所有数组元素\nfor (double element: myList) {\n\tSystem.out.println(element);\n}\n\n```"},"children":[]}]},{"data":{"text":"多维数组","expandState":"collapse"},"children":[{"data":{"text":"多维数组的动态初始化(以二维数组为例)"},"children":[]},{"data":{"text":"type[ ][ ] arrayName = new type[arraylenght1][arraylenght2];"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/spring/cache-relative-merits.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"特性与缺憾","expandState":"expand","note":"现在市场上主流的缓存框架有ehcache、redis、memcached。spring cache可以通过简单的配置就可以搭配使用起来"},"children":[{"data":{"text":"特性","expandState":"collapse","layout":null},"children":[{"data":{"text":"1.通过少量的配置 annotation 注解即可使得既有代码支持缓存","layout":null},"children":[]},{"data":{"text":"2.支持开箱即用 Out-Of-The-Box,即不用安装和部署额外第三方组件即可使用缓存","layout":null},"children":[]},{"data":{"text":"3.支持 Spring Express Language,能使用对象的任何属性或者方法来定义缓存的 key 和 condition","layout":null},"children":[]},{"data":{"text":"4.支持 AspectJ,并通过其实现任何方法的缓存支持 (默认基于AOP方案,采用AspectJ会更灵活)","layout":null},"children":[]},{"data":{"text":"5.支持自定义 key 和自定义缓存管理者,具有相当的灵活性和扩展性","layout":null},"children":[]},{"data":{"text":"6.支持各种缓存实现,默认是基于ConcurrentMap实现的ConcurrentMapCache,同时支持ehcache实现。若要使用Redis等缓存,引入redis的实现包即可。","layout":null},"children":[]}]},{"data":{"text":"缺憾","expandState":"collapse","layout":null},"children":[{"data":{"text":"1.不支持TTL,也就是不能设置expires time。\n这点挺遗憾的,spring-cache认为这是各个cache实现自己去完成的事情,有方案但是只能设置统一的过期时间,这明显不够灵活。\n比如用户的抽奖次数、有效期等业务,当天有效,或者3天、一周有效,我们倾向于设置缓存有效期解决这个问题,而spring-cache却无法完成。\n ","layout":null},"children":[]},{"data":{"text":"2.无法根据查询结果中的内容生成缓存key,比如getUser(uid)方法,想通过查询出来的user.email生成缓存key就无法实现了。","layout":null},"children":[]},{"data":{"text":"3.调试起来麻烦","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/_sidebar.md: -------------------------------------------------------------------------------- 1 | - **Java** 2 | - [Java基础](java/basic/_sidebar.md) 3 | - [JavaWeb](java/javaweb/_sidebar.md) 4 | - [Mysql](mysql/_sidebar.md) 5 | - [Redis](java/redis/_sidebar.md) 6 | - [Hibernate](java/hibernate/_sidebar.md) 7 | - [WebService](java/webservice/_sidebar.md) 8 | - [Spring Boot](java/springboot/_sidebar.md) 9 | - [Spring Cloud](java/springCloud/_sidebar.md) 10 | - [Spring Security](java/spring_security/_sidebar.md) 11 | - [spring5底层原理](java/spring5_source_code/_sidebar.md) 12 | - [解决跨域](java/cross_domain/_sidebar.md) 13 | - [实时消息推送](java/message_push/_sidebar.md) 14 | - [Elasticsearch](java/elasticsearch/_sidebar.md) 15 | - [消息队列](java/mq/_sidebar.md) 16 | - [文件储存](java/storage/_sidebar) 17 | - [第三方支付](java/payment/_sidebar) 18 | - [模板引擎](java/template/_sidebar.md) 19 | - [Docker](docker/_sidebar) 20 | - [我的JAVA工具集](java/modules/_sidebar) 21 | - [我的JS工具集](frontend/modules/_sidebar) 22 | - 版本控制 23 | - [Git](vcs/git/_sidebar.md) 24 | - **前端** 25 | - [NodeJS](/frontend/node/md/_sidebar.md) 26 | - [Vue](frontend/vue/_sidebar.md) 27 | - **综合** 28 | 29 | - [思维导图](common/minds/_sidebar.md) 30 | - **项目** 31 | - [商城项目](project/leyoumall/_sidebar.md) 32 | - **其他** 33 | - [deepin](others/deepin/_sidebar.md) 34 | 35 | - [IDEA](others/idea/_sidebar.md) 36 | - [markdown](others/markdown/_sidebar.md) 37 | - [收藏夹](others/facorites/_sidebar.md) 38 | -------------------------------------------------------------------------------- /docs/others/markdown/markdown基本语法.md: -------------------------------------------------------------------------------- 1 | # markdown 基本语法 2 | 3 | ## 标题 4 | 5 | # # 一级标题 6 | # \#\# 二级标题 7 | ## \#\#\# 三级标题 8 | ### \#\#\#\# 四级标题 9 | ### \#\#\#\#\# 五级标题 10 | ###### \#\#\#\#\#\# 六级标题 11 | 12 | ## 强调 13 | 14 | `**加粗**` **加粗** 15 | `*斜体*` *斜体* 16 | `下划线 ` 下划线 17 | `~~删除线~~` ~~删除线~~ 18 | `* * *` 水平线 19 | * * * 20 | `> 引用内容` 21 | >引用 22 | >>两个\> 23 | >> 24 | >>>三个\> 25 | 26 | ## 列表 27 | 28 | `* 文字` 或者 `+ 文字` 或者 `- 文字` 29 | 30 | * 无序列表 31 | * 无序列表 32 | * 无序列表 33 | 34 | `序号. 文字` 35 | 1. 有序列表 36 | 2. 有序列表 37 | 3. 有序列表 38 | 39 | ## 复选框 40 | 41 | * [ ] `* [ ]` 复选框 42 | * [x] `* [x]`选中的复选框 43 | 44 | ## 插入图片和链接 45 | 46 | ### 插入链接: 47 | 48 | `[链接文字](链接网址 "标题")`[cloudlanboy](https://www.clboy.cn "cloudlandboy的博客") 49 | 50 | ### 插入图片: 51 | 52 | `![alt text](/path/to/img.jpg "Title")` 53 | ![花海](https://ss0.baidu.com/73x1bjeh1BF3odCf/it/u=138126325,1485620701&fm=85&s=7FAB2EC3909A35D01E299C1A030010D2 "标题") 54 | 55 | ## 代码块 56 | 行内代码块: \`代码内容\` `Java` `Javascript` `CSS` `HTML` 57 | 代码块: 58 | 59 | ```java 60 | @Test 61 | public void test(){ 62 | System.out.println("这是块级代码块"); 63 | } 64 | ``` 65 | ## 其他 66 | 67 | **添加脚注:**`[^脚注名]:脚注内容 ` [^1] 68 | 69 | ## 学习更多 70 | 71 | **参考文章:**[【集锦】Markdown 语法快速上手](https://www.jianshu.com/c/65c0f5f216cc) 72 | 73 | [^1]:这只是一个脚注的详细描述 74 | 75 | -------------------------------------------------------------------------------- /docs/resources/minds/java/java23.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java流(Stream)、文件(File)和IO","expandState":"expand"},"children":[{"data":{"text":"读写文件","expandState":"collapse"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/Gp48CTXr/202001101742.jpg","imageTitle":"Gp48CTXr/202001101742.jpg","imageSize":{"width":200,"height":111}},"children":[]},{"data":{"text":"一个流被定义为一个数据序列。输入流用于从源读取数据,输出流用于向目标写数据。"},"children":[]}]},{"data":{"text":"文件和I/O","expandState":"collapse"},"children":[{"data":{"text":"FileReader","expandState":"collapse"},"children":[{"data":{"text":"从InputStreamReader类继承而来"},"children":[]},{"data":{"text":"按字符读取流中数据"},"children":[]}]},{"data":{"text":"FileWriter","expandState":"collapse"},"children":[{"data":{"text":"从OutputStreamReader类继承而来"},"children":[]},{"data":{"text":"按字符向流中写入数据"},"children":[]}]}]},{"data":{"text":"Java中的目录","expandState":"collapse"},"children":[{"data":{"text":"创建目录","expandState":"collapse"},"children":[{"data":{"text":"mkdir( )方法创建一个文件夹"},"children":[]},{"data":{"text":"mkdirs()方法创建一个文件夹和它的所有父文件夹"},"children":[]}]},{"data":{"text":"读取目录","expandState":"collapse"},"children":[{"data":{"text":"isDirectory()方法判断是否是目录"},"children":[]},{"data":{"text":"list() 方法提取包含的文件和文件夹的列表"},"children":[]}]},{"data":{"text":"删除目录或文件","expandState":"collapse"},"children":[{"data":{"text":"delete() 方法,删除目录需要目录为空,否则删除失败"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/springboot/_sidebar.md: -------------------------------------------------------------------------------- 1 | - SpringBoot 2.2.1 2 | - [hello world](java/springboot/helloworld.md) 3 | - [Spring Initializer创建项目](java/springboot/springInitializer.md) 4 | - [配置文件](java/springboot/properties.md) 5 | - [自动配置](java/springboot/autoconfig.md) 6 | - [日志](java/springboot/log.md) 7 | - [web开发](java/springboot/helloweb.md) 8 | - [thymeleaf模板引擎](java/springboot/templateengine.md) 9 | - [SpringMVC配置](java/springboot/springmvcconfig.md) 10 | - [SpringBoot工程热部署](java/springboot/devtools.md) 11 | - [RestfulCRUD](java/springboot/restfulcrud.md) 12 | - [错误处理机制](java/springboot/errorhandler.md) 13 | - [配置嵌入式Servlet容器](java/springboot/configservletcontainer.md) 14 | - [Docker](java/springboot/docker.md) 15 | - [SpringBoot与数据库连接](java/springboot/jdbc.md) 16 | - [整合Mybatis](java/springboot/mybatis.md) 17 | - [SpringBoot整合JPA](java/springboot/jpa.md) 18 | - [SpringBoot启动流程](java/springboot/startprocess.md) 19 | - [自定义Starter](java/springboot/customizestarter.md) 20 | - [参数验证-JSR303](java/springboot/jsr.md) 21 | - [单元测试](java/springboot/test.md) 22 | - [缓存抽象](java/springboot/cache.md) 23 | - [Actuator监控](java/springboot/actuator.md) 24 | - [推荐:Spring Boot官方文档](java/springboot/official-document.md) 25 | - [推荐:SpringBoot各种整合案例 ](https://github.com/xkcoding/spring-boot-demo ':target=_blank') 26 | - [推荐:Github源码阅读插件](utils/browser_plugins?id=octotree ':target=_blank') 27 | -------------------------------------------------------------------------------- /docs/mysql/dbandsql.md: -------------------------------------------------------------------------------- 1 | # 数据库和SQL概述 2 | 3 | ## 数据库的好处 4 | 5 | - 实现数据持久化 6 | - 使用完整的管理系统统一管理,易于查询 7 | 8 | ## 数据库的概念 9 | 10 | DB 11 | DBMS 12 | SQL 13 | 数据库(database):存储数据的“仓库”。它保存了一系列有组织的数据。 14 | 数据库管理系统(Database Management System)。数据库是通过DBMS创 15 | 建和操作的容器 16 | 结构化查询语言(Structure Query Language):专门用来与数据库通信的语 17 | 言 18 | 19 | 常见的数据库管理系统:MySQL、Oracle、DB2、SqlServe 20 | 21 | ## SQL语言 22 | 23 | 数据库是不认识JAVA语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言SQL语句,它是数据库的代码。 24 | 25 | 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和[程序设计语言](http://baike.baidu.com/view/128511.htm),用于存取数据以及查询、更新和管理[关系数据库系统](http://baike.baidu.com/view/549699.htm)。 26 | 27 | 创建数据库、创建数据表、向数据表中添加一条条数据信息均需要使用SQL语句。 28 | 29 | ### DML 30 | 31 | DML(Data Manipulation Language):数据操纵语句,用于添加、删除、修改、查询数据库记录,并检查数据完整性。包括如下SQL语句等: 32 | 33 | - INSERT:添加数据到数据库中 34 | - UPDATE:修改数据库中的数据 35 | - DELETE:删除数据库中的数据 36 | - **SELECT:选择(查询)数据** 37 | - SELECT是SQL语言的基础,最为重要。 38 | 39 | ### DDL 40 | 41 | DDL(Data Definition Language):数据定义语句,用于库和表的创建、修改、删除。包括如下SQL语句等: 42 | 43 | - CREATE TABLE:创建数据库表 44 | - ALTER TABLE:更改表结构、添加、删除、修改列长度 45 | - DROP TABLE:删除表 46 | - CREATE INDEX:在表上建立索引 47 | - DROP INDEX:删除索引 48 | 49 | ### DCL 50 | 51 | DCL(Data Control Language):数据控制语句,用于定义用户的访问权限和安全级别包括如下SQL语句等: 52 | 53 | - GRANT:授予访问权限 54 | - REVOKE:撤销访问权限 55 | - COMMIT:提交事务处理 56 | - ROLLBACK:事务处理回退 57 | - SAVEPOINT:设置保存点 58 | - LOCK:对数据库的特定部分进行锁定 59 | 60 | ### DQL 61 | 62 | 数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等 -------------------------------------------------------------------------------- /docs/frontend/vue/code/router.html: -------------------------------------------------------------------------------- 1 |
2 | 8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/mysql/sortquery.md: -------------------------------------------------------------------------------- 1 | # 排序查询 2 | 3 | ORDER BY 4 | 5 | - 使用 ORDER BY 子句排序 6 | - ASC(ascend): 升序 7 | - DESC(descend): 降序 8 | 9 | ## 语法 10 | 11 | ``` sql 12 | select 查询列表 13 | 14 | from 表名 15 | 16 | 【where 筛选条件】 17 | 18 | order by 排序的字段或表达式; 19 | 20 | ``` 21 | 22 | ## 特点 23 | 24 | 1. asc代表的是升序,可以省略 25 | 2. order by子句可以支持 单个字段、别名、表达式、函数、多个字段 26 | 3. order by子句在查询语句的最后面,除了limit子句 27 | 28 | ## 案例 29 | 30 | ### 单个字段排序 31 | 32 | 1. 查询员工表按薪水降序 33 | 34 | ``` 35 | SELECT * FROM employees ORDER BY salary DESC; 36 | ``` 37 | 38 | 2. 查询部门编号>=90的员工信息,并按员工编号降序 39 | 40 | ``` sql 41 | SELECT * 42 | FROM employees 43 | WHERE department_id>=90 44 | ORDER BY employee_id DESC; 45 | ``` 46 | 47 | ### 按表达式排序 48 | 49 | 1. 查询员工信息 按年薪降序 50 | 51 | ``` sql 52 | SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 53 | FROM employees 54 | ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC; 55 | ``` 56 | 57 | 58 | 59 | ### 按别名排序 60 | 61 | 1. 查询员工信息 按年薪升序 62 | 63 | ``` sql 64 | SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪 65 | FROM employees 66 | ORDER BY 年薪 ASC; 67 | ``` 68 | 69 | ### 按函数排序 70 | 71 | 1. 查询员工名,并且按名字的长度降序 72 | 73 | ``` sql 74 | SELECT LENGTH(last_name),last_name 75 | FROM employees 76 | ORDER BY LENGTH(last_name) DESC; 77 | ``` 78 | 79 | ### 多个字段排序 80 | 81 | 1. 查询员工信息,要求先按工资降序,再按employee_id升序 82 | 83 | ``` sql 84 | SELECT * 85 | FROM employees 86 | ORDER BY salary DESC,employee_id ASC; 87 | ``` 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /docs/resources/minds/java/java27.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java序列化","expandState":"expand"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"对象序列化的机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型"},"children":[]},{"data":{"text":"将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化"},"children":[]},{"data":{"text":"整个过程都是 Java 虚拟机(JVM)独立的"},"children":[]}]},{"data":{"text":"满足两个条件","expandState":"collapse"},"children":[{"data":{"text":"实现 java.io.Serializable 对象","priority":1},"children":[]},{"data":{"text":"该类的所有属性必须是可序列化的。如果有一个属性不是可序列化的,则该属性必须注明是短暂的","priority":2},"children":[]}]},{"data":{"text":"序列化对象","expandState":"collapse"},"children":[{"data":{"text":"ObjectOutputStream 类用来序列化一个对象"},"children":[]},{"data":{"text":"注意","expandState":"collapse"},"children":[{"data":{"text":"序列化并不保存静态变量","priority":1},"children":[]},{"data":{"text":"要想将父类对象也序列化,就需要让父类也实现Serializable 接口","priority":2},"children":[]}]}]},{"data":{"text":"反序列化对象","expandState":"collapse"},"children":[{"data":{"text":"ObjectInputStream 类用来反序列化一个对象"},"children":[]}]},{"data":{"text":"transient关键字","expandState":"collapse"},"children":[{"data":{"text":"当某个字段被声明为transient后,默认序列化机制就会忽略该字段"},"children":[]}]},{"data":{"text":"例子","expandState":"expand","image":"https://i.postimg.cc/tgV66v88/20200110184346.png","imageTitle":"20200110184346.png","imageSize":{"width":200,"height":83}},"children":[]},{"data":{"text":"应用","expandState":"collapse"},"children":[{"data":{"text":"网络传输、RMI等场景"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/springboot/springInitializer.md: -------------------------------------------------------------------------------- 1 | # Spring Initializer创建项目 2 | 3 | IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目; 4 | 5 | 选择我们需要的模块;向导会联网创建Spring Boot项目; 6 | 7 | !> 需要联网 8 | 9 | ## IDEA 10 | 11 | 1. 创建项目时选择Spring Initializr 12 | 13 | ![idea01](https://cdn.tencentfs.clboy.cn/images/2021/20210911203213533.png) 14 | 15 | 16 | 17 | 2. 完善项目信息 18 | 19 | ![idea02](https://cdn.tencentfs.clboy.cn/images/2021/20210911203213959.png) 20 | 21 | !> 出现 **Artifact contains illegal characters** 是因为`Artifact`中使用了大写,只能是全小写,单词之间用`-`分隔 22 | 23 | 3. 选择需要的starter 24 | 25 | ![idea03](https://cdn.tencentfs.clboy.cn/images/2021/20210911203214402.png) 26 | 27 | 4. 创建完成后 不要的文件可以删除 28 | 29 | ![idea04](https://cdn.tencentfs.clboy.cn/images/2021/20210911203214820.png) 30 | 31 | 32 | 33 | 34 | 35 | ## Eclipse 36 | 37 | 1. 需要安装插件,或者使用STS版本 38 | 39 | 2. 创建项目时选择Spring Starter Project 40 | 41 | ![eclipse01](https://cdn.tencentfs.clboy.cn/images/2021/20210911203215233.png) 42 | 43 | 3. 完善信息 44 | 45 | ![eclipse02](https://cdn.tencentfs.clboy.cn/images/2021/20210911203215658.png) 46 | 47 | 4. 选择需要的选择需要的starter 48 | 49 | ![eclipse03](https://cdn.tencentfs.clboy.cn/images/2021/20210911203216091.png) 50 | 51 | 52 | 53 | 54 | 55 | **默认生成的Spring Boot项目** 56 | 57 | - 主程序已经生成好了,我们只需要完成我们自己的逻辑 58 | - `resources`文件夹中目录结构 59 | - `static`:保存所有的静态资源; js、css、images; 60 | - `templates`:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,`默认`不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf); 61 | - `application.properties`:Spring Boot应用的配置文件;可以修改一些默认设置; 62 | 63 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-mvc-dispatcherServlet.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"DispatcherServlet"},"children":[{"data":{"text":"1、Controller","expandState":"expand","note":"处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;"},"children":[]},{"data":{"text":"2、HandlerMapping","note":"请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;"},"children":[]},{"data":{"text":"3、HandlerAdapter","note":"HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且调用处理器的handleRequest方法进行功能处理;"},"children":[]},{"data":{"text":"4、ViewResolver","note":"ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;"},"children":[]},{"data":{"text":"5、LocalResover","note":"本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;"},"children":[]},{"data":{"text":"6、ThemeResovler","note":"主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;"},"children":[]},{"data":{"text":"7、MultipartResolver","note":"文件上传解析,用于支持文件上传;"},"children":[]},{"data":{"text":"8、HandlerExceptionResolver","note":"处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);"},"children":[]},{"data":{"text":"9、RequestToViewNameTranslator","layout_mind_offset":{"x":-27.99998170274921,"y":-1},"note":"当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;"},"children":[]},{"data":{"text":"10、FlashMapManager","note":"用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述。","layout":null},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-relative-merits.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"11、mybatis的优缺点","expandState":"expand"},"children":[{"data":{"text":"优点","priority":1,"expandState":"expand"},"children":[{"data":{"text":"1. 易于上手和掌握。"},"children":[]},{"data":{"text":"2. sql写在xml里,便于统一管理和优化。"},"children":[]},{"data":{"text":"3. 解除sql与程序代码的耦合。"},"children":[]},{"data":{"text":"4. 提供映射标签,支持对象与数据库的orm字段关系映射"},"children":[]},{"data":{"text":"5. 提供对象关系映射标签,支持对象关系组建维护"},"children":[]},{"data":{"text":"6. 提供xml标签,支持编写动态sql。"},"children":[]}]},{"data":{"text":"缺点","priority":2,"expandState":"expand"},"children":[{"data":{"text":"1. sql工作量很大,尤其是字段多、关联表多时,更是如此。"},"children":[]},{"data":{"text":"2. sql依赖于数据库,导致数据库移植性差。"},"children":[]},{"data":{"text":"3. 由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。"},"children":[]},{"data":{"text":"4. 字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。","note":"(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)"},"children":[]},{"data":{"text":"5. DAO层过于简单,对象组装的工作量较大。"},"children":[]},{"data":{"text":"6. 不支持级联更新、级联删除。"},"children":[]},{"data":{"text":"7. 编写动态sql时,不方便调试,尤其逻辑复杂时。"},"children":[]},{"data":{"text":"8 提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。"},"children":[]},{"data":{"text":"9. 若不查询主键字段,容易造成查询出的对象有“覆盖”现象。"},"children":[]},{"data":{"text":"10. 参数的数据类型支持不完善。","note":"(如参数为Date类型时,容易报没有get、set方法,需在参数上加@param)"},"children":[]},{"data":{"text":"11. 多参数时,使用不方便,功能不够强大。","note":"(目前支持的方法有map、对象、注解@param以及默认采用012索引位的方式)"},"children":[]},{"data":{"text":"12. 缓存使用不当,容易产生脏数据。"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/node/md/event-loop.md: -------------------------------------------------------------------------------- 1 | # EventLoop 2 | 3 | JavaScript 是一门单线程执行的编程语言。也就是说,同一时间只能做一件事情。 4 | 5 | ![image-20231212175734822](https://cdn.tencentfs.clboy.cn/images/2023/20231212175737268.png) 6 | 7 | 单线程执行任务队列的问题: 8 | 9 | 如果前一个任务非常耗时,则后续的任务就不得不一直等待,从而导致程序假死的问题。 10 | 11 | 为了防止某个耗时任务导致程序假死的问题,JavaScript 把待执行的任务分为了两类: 12 | 13 | ## 同步任务 14 | 15 | - 又叫做非耗时任务,指的是在主线程上排队执行的那些任务 16 | - 只有前一个任务执行完毕,才能执行后一个任务 17 | 18 | 19 | 20 | ## 异步任务 21 | 22 | - 又叫做耗时任务,异步任务由 JavaScript 委托给宿主环境进行执行 23 | - 当异步任务执行完成后,会通知 JavaScript 主线程执行异步任务的回调函数 24 | 25 | 26 | 27 | ![image-20231212180129729](https://cdn.tencentfs.clboy.cn/images/2023/20231212193338644.png) 28 | 29 | 1. 同步任务由 JavaScript 主线程次序执行 30 | 2. 异步任务委托给宿主环境执行 31 | 3. 已完成的异步任务对应的回调函数,会被加入到任务队列中等待执行 32 | 4. JavaScript 主线程的执行栈被清空后,会读取任务队列中的回调函数,次序执行 33 | 5. JavaScript 主线程不断重复上面的第 4 步 34 | 35 | 36 | 37 | JavaScript 主线程从 *任务队列* 中读取异步任务的回调函数,放到执行栈中依次执行。这个过程是循环不断的 38 | 39 | 所以整个的这种运行机制又称为 EventLoop(事件循环)。 40 | 41 | ![image-20231212193330550](https://cdn.tencentfs.clboy.cn/images/2023/20231212193355898.png) 42 | 43 | 44 | 45 | ## 宏任务和微任务 46 | 47 | JavaScript 把异步任务又做了进一步的划分,异步任务又分为两类,分别是: 48 | 49 | - **宏任务** 50 | - 异步 Ajax 请求 51 | - setTimeout、setInterval 52 | - 文件操作 53 | - 其它宏任务 54 | - **微任务** 55 | - Promise.then、.catch 和 .finally 56 | - process.nextTick 57 | - 其它微任务 58 | 59 | ![image-20231212193751384](https://cdn.tencentfs.clboy.cn/images/2023/20231212193805305.png) 60 | 61 | 62 | 63 | 每一个宏任务执行完之后,都会检查是否存在待执行的微任务,如果有,则执行完所有微任务之后,再继续执行下一个宏任务。 64 | 65 | ![image-20231212193852874](https://cdn.tencentfs.clboy.cn/images/2023/20231212193857032.png) 66 | -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-collection.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"元素集合collection","expandState":"expand"},"children":[{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"\r\n \r\n \r\n \r\n","background":"#c7edcc"},"children":[]}]},{"data":{"text":"对应实体代码","expandState":"collapse"},"children":[{"data":{"text":"private List posts;","background":"#c7edcc"},"children":[]}]},{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"集合元素的作用几乎和关联是相同的。"},"children":[]},{"data":{"text":"要映射嵌套结果集合到 List 中,我们使用集合元素。就像关联元素一样,我们可以从 连接中使用嵌套查询,或者嵌套结果。"},"children":[]}]},{"data":{"text":"集合的嵌套查询","expandState":"collapse"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/HkK592MR/202001122143.png","imageTitle":"202001122143.png","imageSize":{"width":200,"height":96}},"children":[]}]},{"data":{"text":"集合的嵌套结果","expandState":"collapse"},"children":[{"data":{"text":"属性ofType说明","expandState":"collapse"},"children":[{"data":{"text":"关联集合的元素类型"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/0QvsTTmS/20200112213523.png","imageTitle":"20200112213523.png","imageSize":{"width":200,"height":81},"layout":null},"children":[]}]},{"data":{"text":"说明","expandState":"collapse"},"children":[{"data":{"text":"联合了博客表和文章,博客和文章是一对多的关系"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/others/deepin/shortcut-key-switch-system-proxy.md: -------------------------------------------------------------------------------- 1 | # 快捷键快速设置系统代理 2 | 3 | > 演示环境 4 | > 5 | > 代理软件:clash 6 | > 7 | > 桌面系统:deepin 8 | 9 | 10 | 11 | ## 脚本文件 12 | 13 | `/home/clboy/clash/switch.sh` 14 | 15 | ```sh 16 | #!/bin/sh 17 | PORT=8889 18 | SOCKS_PORT=1080 19 | WORK_DIRECTORY='/home/clboy/clash' 20 | PROXY_EXEC_COMMAND='/home/clboy/clash/clash -f /home/clboy/clash/clash.yaml -d /home/clboy/clash' 21 | 22 | CURRENT_MODE=`gsettings get org.gnome.system.proxy mode` 23 | if [ "$CURRENT_MODE" = "'none'" ] 24 | then 25 | nohup ${PROXY_EXEC_COMMAND} > "$WORK_DIRECTORY/proxy.log" 2>&1 & 26 | gsettings set org.gnome.system.proxy mode 'manual' 27 | gsettings set org.gnome.system.proxy.http host '127.0.0.1' 28 | gsettings set org.gnome.system.proxy.http port "$PORT" 29 | gsettings set org.gnome.system.proxy.ftp host '127.0.0.1' 30 | gsettings set org.gnome.system.proxy.ftp port "$PORT" 31 | gsettings set org.gnome.system.proxy.https host '127.0.0.1' 32 | gsettings set org.gnome.system.proxy.https port "$PORT" 33 | gsettings set org.gnome.system.proxy.socks host '127.0.0.1' 34 | gsettings set org.gnome.system.proxy.socks port "$SOCKS_PORT" 35 | notify-send -i /home/clboy/clash/logo.png '开启系统代理' 36 | else 37 | CLASH_PID=`ps -aux | grep -v grep | grep "$PROXY_EXEC_COMMAND" | awk '{print $2}'` 38 | if [ -n "$CLASH_PID" ] 39 | then 40 | kill -9 $CLASH_PID 41 | fi 42 | gsettings set org.gnome.system.proxy mode 'none' 43 | notify-send -i /home/clboy/clash/logo.png '关闭系统代理' 44 | fi 45 | ``` 46 | 47 | ## 设置系统快捷键 48 | 49 | ![image-20220913160650186](https://cdn.tencentfs.clboy.cn/images/2022/20220913160715549.png) 50 | 51 | 这样就可以使用 `ctrl+shift+p` 快捷键快速开启和关闭 -------------------------------------------------------------------------------- /docs/resources/html/qrcode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 二维码生成 9 | 10 | 11 | 12 |
13 |

14 | 16 |

17 |

18 | 20 |

21 | 22 | 23 | 39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/web-load-process.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"web.xml加载过程","note":"- 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的Application。\n\n\n- 当要启动某个web项目时,服务器软件或容器如(tomcat)会第一步加载项目中的web.xml文件,通过其中的各种配置来启动项目,只有其中配置的各项均无误时,项目才能正确启动。web.xml有多项标签,在其加载的过程中顺序依次为:context-param >> listener >> fileter >> servlet​。(同类多个节点以出现顺序依次加载)","hyperlink":"https://www.jianshu.com/p/7c4bbf1ba998","hyperlinkTitle":""},"children":[{"data":{"text":"启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: 。","priority":1,"layout":null},"children":[]},{"data":{"text":"紧接着,容器创建一个ServletContext(application),这个WEB项目所有部分都将共享这个上下文。","priority":2,"layout":null},"children":[]},{"data":{"text":"容器以的name作为键,value作为值,将其转化为键值对,存入ServletContext。","priority":3,"layout":null},"children":[]},{"data":{"text":"容器创建中的类实例,根据配置的class类路径来创建监听,在监听中会有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中获得:\r\nServletContext application =ServletContextEvent.getServletContext();\r\ncontext-param的值= application.getInitParameter(\"context-param的键\");\r\n得到这个context-param的值之后,你就可以做一些操作了。","priority":4,"layout":null},"children":[]},{"data":{"text":"举例:你可能想在项目启动之前就打开数据库,那么这里就可以在中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。\n这个监听是自己写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用前释放资源。\n比如:说数据库连接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统调用Listener的该方法。","layout":null},"children":[]},{"data":{"text":"接着,容器会读取,根据指定的类路径来实例化过滤器。","priority":5,"layout":null},"children":[]}]},"template":"right","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java22.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java日期时间","expandState":"expand"},"children":[{"data":{"text":"Date","expandState":"collapse"},"children":[{"data":{"text":"常用方法","expandState":"expand"},"children":[{"data":{"text":"boolean after(Date date)","expandState":"collapse"},"children":[{"data":{"text":"若当调用此方法的Date对象在指定日期之后返回true,否则返回false。"},"children":[]}]},{"data":{"text":"boolean before(Date date)","expandState":"collapse"},"children":[{"data":{"text":"若当调用此方法的Date对象在指定日期之前返回true,否则返回false。"},"children":[]}]},{"data":{"text":"int compareTo(Date date)","expandState":"collapse"},"children":[{"data":{"text":"比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。"},"children":[]}]},{"data":{"text":"long getTime( )","expandState":"collapse"},"children":[{"data":{"text":"返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。"},"children":[]}]},{"data":{"text":"String toString( )","expandState":"collapse"},"children":[{"data":{"text":"转换Date对象为String表示形式,并返回该字符串。"},"children":[]},{"data":{"text":"Mon May 04 09:51:52 CDT 2013"},"children":[]}]}]}]},{"data":{"text":"SimpleDateFormat","expandState":"collapse"},"children":[{"data":{"text":"常用格式","expandState":"collapse"},"children":[{"data":{"text":"yyyy.MM.dd hh:mm:ss","note":null},"children":[]},{"data":{"id":"bzs0bybbeqg0","created":1578648903154,"text":" ","image":"https://i.postimg.cc/Qdbkt7gT/20200110173425.png","imageTitle":"Qdbkt7gT/20200110173425.png","imageSize":{"width":200,"height":31}},"children":[]}]}]},{"data":{"id":"bzs0dehnejc0","created":1578649016730,"text":"常用日期和时间的格式化编码","note":"`y`\t四位年份\n`M`\t月份\n`d`\t一个月的日期\n`h`\t A.M./P.M. (1\\~12)格式小时\n`H`\t一天中的小时 (0~23)\n`m`\t分钟数\n`s`\t秒数\n`S`\t毫秒数\n`E`\t星期几\n`D`\t一年中的日子\n`F`\t一个月中第几周的周几\n`w`\t一年中第几周\n`W`\t一个月中第几周"},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/hibernate/cache.md: -------------------------------------------------------------------------------- 1 | # Hibernate缓存 2 | 3 | ## 一级缓存 4 | 5 | 一级缓存:又称为session级别的缓存。 6 | 7 | 当获得一次会话(session),hibernate在session中创建多个集合(map),用于存放操作数据(PO对象),**为程序优化服务**,如果之后需要相应的数据,hibernate优先从session缓存中获取,如果有就使用;如果没有再查询数据库。 8 | 9 | **当session关闭时,一级缓存销毁。** 10 | 11 | 12 | 13 | ```java 14 | package club.zzrfdsnsyl.demo.b_cache; 15 | 16 | import org.hibernate.Session; 17 | import org.hibernate.Transaction; 18 | import org.junit.Test; 19 | 20 | import club.zzrfdsnsyl.Utils.HbUtil; 21 | import club.zzrfdsnsyl.domain.Customer; 22 | 23 | /** 24 | * 一级缓存 25 | * @author SYL 26 | * 27 | */ 28 | public class First_cache { 29 | 30 | @Test 31 | public void test_first_cache() { 32 | Session session = HbUtil.openSession(); 33 | Customer customer = session.get(Customer.class, 1L); 34 | Customer customer2 = session.get(Customer.class, 1L); 35 | System.out.println(customer==customer2); 36 | System.out.println(customer.equals(customer2)); 37 | session.close(); 38 | } 39 | 40 | 41 | /** 42 | * 持久化就是把对象放到session缓存 43 | */ 44 | @Test 45 | public void test() { 46 | Session session = HbUtil.openSession(); 47 | Customer customer=new Customer(); 48 | customer.setCust_id(1L); //游离状态 有OID没有与session绑定 49 | customer.setCust_name("百度公司");; 50 | session.update(customer); //持久化状态 51 | Customer customer2 = session.get(Customer.class,1L); 52 | System.out.println(customer2.getCust_name()); //从缓存中找 有则不会去数据库 53 | session.close(); 54 | } 55 | } 56 | 57 | ``` 58 | 59 | ## 清除一级缓存 60 | 61 | 1. `session.clear()` 清除所有缓存 62 | 2. `session.evict(obj)` 清除指定的对象缓存 63 | 64 | 65 | 66 | ## 一级缓存快照 67 | 68 | 快照:与一级缓存存放位置是一样,对一级缓存数据备份。 69 | 70 | 保证数据库的数据与 一级缓存的数据必须一致。 71 | 72 | 如果一级缓存**修改了**,在执行commit提交时,将自动刷新一级缓存。执行update语句,将一级缓存的数据更新到数据库。 73 | 74 | 75 | 76 | !> HQL的结果会进行一级缓存,SQL的结果不会添加到一级缓存 77 | 78 | -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-param.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"#{}和${}的区别","expandState":"expand"},"children":[{"data":{"text":"#{}","expandState":"collapse"},"children":[{"data":{"text":"解读","expandState":"expand"},"children":[{"data":{"text":"使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值"},"children":[]},{"data":{"text":"PreparedStatement ps = conn.prepareStatement(sql);\r\nps.setInt(1,id);","background":"#c7edcc"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"执行SQL:Select * from emp where name = #{employeeName}"},"children":[]},{"data":{"text":"参数:employeeName=\"Smith\""},"children":[]},{"data":{"text":"解析后执行的SQL:Select * from emp where name = 'Smith'"},"children":[]}]},{"data":{"text":"#方式能够很大程度防止sql注入"},"children":[]}]},{"data":{"text":"${}","expandState":"collapse"},"children":[{"data":{"text":"解读","expandState":"collapse"},"children":[{"data":{"text":"有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY"},"children":[]},{"data":{"text":"$将传入的数据直接显示生成在sql中"},"children":[]},{"data":{"text":"Statement st = conn.createStatement();\r\nResultSet rs = st.executeQuery(sql);"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"执行SQL:Select * from emp where name = ${employeeName}"},"children":[]},{"data":{"text":"参数:employeeName=\"Smith\""},"children":[]},{"data":{"text":"解析后执行的SQL:Select * from emp where name =Smith","note":"此时Smith如果不是一个列名就会报错,\n正确的写法是\n\nSelect * from emp where name ='${Smith}'"},"children":[]}]}]},{"data":{"text":"总结","expandState":"collapse"},"children":[{"data":{"text":"#方式能够很大程度防止sql注入,$方式无法防止Sql注入"},"children":[]},{"data":{"text":"$方式一般用于传入数据库对象"},"children":[]},{"data":{"text":"使用$要么不允许用户输入这些字段,要么自行转义并检验。"},"children":[]},{"data":{"text":"一般能用#的就别用$"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java13.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java修饰符","expandState":"expand"},"children":[{"data":{"text":"概念","expandState":"collapse","layout":null},"children":[{"data":{"text":"修饰符用来定义类、方法或者变量,通常放在语句的最前端。","layout":null},"children":[]}]},{"data":{"text":"访问控制修饰符","expandState":"collapse","layout":null},"children":[{"data":{"text":"Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限","layout":null},"children":[]},{"data":{"text":"访问控制","expandState":"expand","note":"| 访问权限 | 类 | 包 | 子类 | 其他包 |\n| -------- | ---- | ---- | ---- | ------ |\n| public | ∨ | ∨ | ∨ | ∨ |\n| protect | ∨ | ∨ | ∨ | × |\n| default | ∨ | ∨ | × | × |\n| private | ∨ | × | × | × |","layout":null},"children":[]},{"data":{"text":"访问控制和继承","expandState":"collapse","layout":null},"children":[{"data":{"text":"父类中声明为 public 的方法在子类中也必须为 public。","layout":null},"children":[]},{"data":{"text":"父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。","layout":null},"children":[]},{"data":{"text":"父类中声明为 private 的方法,不能够被继承。","layout":null},"children":[]}]}]},{"data":{"text":"非访问修饰符","expandState":"collapse","layout":null},"children":[{"data":{"text":"static 修饰符,用来创建类方法和类变量。","layout":null},"children":[]},{"data":{"text":"final 修饰符,用来修饰类、方法和变量","layout":null,"expandState":"collapse"},"children":[{"data":{"id":"bzrxeo00wi00","created":1578640652466,"text":"final 修饰的类不能够被继承"},"children":[]},{"data":{"id":"bzrxeqyvyew0","created":1578640658928,"text":"修饰的方法不能被继承类重新定义"},"children":[]},{"data":{"id":"bzrxetvis5k0","created":1578640665255,"text":"修饰的变量为常量,是不可修改的。"},"children":[]}]},{"data":{"text":"abstract 修饰符,用来创建抽象类和抽象方法。","layout":null},"children":[]},{"data":{"text":"synchronized 和 volatile 修饰符,主要用于线程的编程。","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java24.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java异常处理","expandState":"expand"},"children":[{"data":{"text":"异常发生的原因","expandState":"collapse"},"children":[{"data":{"text":"用户输入了非法数据。"},"children":[]},{"data":{"text":"要打开的文件不存在。"},"children":[]},{"data":{"text":"网络通信时连接中断,或者JVM内存溢出"},"children":[]}]},{"data":{"text":"Throwable","expandState":"collapse"},"children":[{"data":{"text":"Error","note":"Error:表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。"},"children":[]},{"data":{"text":"Exception","expandState":"collapse"},"children":[{"data":{"text":"所有的异常类是从 java.lang.Exception 类继承的子类"},"children":[]},{"data":{"text":"Exception 类是 Throwable 类的子类"},"children":[]},{"data":{"text":"比如:IOException,RuntimeException"},"children":[]}]}]},{"data":{"text":"捕获异常","expandState":"collapse"},"children":[{"data":{"text":"try/catch","note":"```\ntry{\n\t// 程序代码\n}catch(异常类型1 异常的变量名1){\n\t// 程序代码\n}catch(异常类型2 异常的变量名2){\n\t// 程序代码\n}catch(异常类型2 异常的变量名2){\n\t// 程序代码\n}\n\n```"},"children":[]},{"data":{"text":"throws/throw","expandState":"collapse"},"children":[{"data":{"text":"如果一个方法没有捕获一个检查性异常,那么该方法必须使用 throws 关键字来声明"},"children":[]},{"data":{"text":"throws 关键字放在方法签名的尾部"},"children":[]},{"data":{"text":"也可以使用 throw 关键字抛出一个异常"},"children":[]},{"data":{"text":"一个方法可以声明抛出多个异常,多个异常之间用逗号隔开"},"children":[]}]},{"data":{"text":"finally","expandState":"collapse"},"children":[{"data":{"text":"finally 关键字用来创建在 try 代码块后面执行的代码块。"},"children":[]},{"data":{"text":"无论是否发生异常,finally 代码块中的代码总会被执行。"},"children":[]},{"data":{"text":"在 finally 代码块中,可以运行清理类型等收尾善后性质的语句。"},"children":[]},{"data":{"text":"finally 代码块出现在 catch 代码块最后","note":"```\ntry{\n\t// 程序代码\n}catch(异常类型1 异常的变量名1){\n\t// 程序代码\n}catch(异常类型2 异常的变量名2){\n\t// 程序代码\n}finally{\n\t// 程序代码\n}\n\n```"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-mvc-exception.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"异常处理方式","expandState":"expand","hyperlink":"https://www.jianshu.com/p/7c4bbf1ba998","hyperlinkTitle":""},"children":[{"data":{"text":"HandlerExceptionResolver","expandState":"collapse","note":"Spring的处理器异常解析器`HandlerExceptionResolver`接口的实现负责处理各类控制器执行过程中出现的异常。也是上面提到的,是`DispatcherServlet`中的特殊bean,可以自定义配置处理。\n\n某种程度上讲,`HandlerExceptionResolver`与你在web应用描述符`web.xml`文件中能定义的异常映射(exception mapping)很相像,不过它比后者提供了更灵活的方式。比如它能提供异常被抛出时正在执行的是哪个处理器这样的信息。"},"children":[{"data":{"text":"可以实现全局异常控制"},"children":[]},{"data":{"text":"HandlerExceptionResolver接口中定义了一个resolveException方法,用于处理Controller中的异常。"},"children":[]},{"data":{"id":"bzuosxxtz340","created":1578921061081,"text":"Exception ex参数即Controller抛出的异常。返回值类型是ModelAndView,可以通过这个返回值来设置异常时显示的页面。"},"children":[]}]},{"data":{"text":"SimpleMappingExceptionResolver","expandState":"collapse"},"children":[{"data":{"text":"Spring提供的一个默认的异常实现类SimpleMappingExceptionResolver"},"children":[]}]},{"data":{"text":"@ExceptionHandler","expandState":"collapse"},"children":[{"data":{"text":"可以实现局局异常控制"},"children":[]},{"data":{"text":"如果@ExceptionHandler方法是在控制器内部定义的,那么它会接收并处理由控制器(或其任何子类)中的@RequestMapping方法抛出的异常。"},"children":[]},{"data":{"text":"如果你将@ExceptionHandler方法定义在@ControllerAdvice类中,那么它会处理相关控制器中抛出的异常。"},"children":[]}]},{"data":{"text":"web.xml的error-page标签","expandState":"collapse"},"children":[{"data":{"text":"简单处理异常和跳转,灵活程度不及HandlerExceptionResolver的异常处理"},"children":[]}]},{"data":{"id":"bzuov8u7ibc0","created":1578921241534,"text":"HandlerExceptionResolver和web.xml中配置的error-page会有冲突吗?","note":"如果`resolveException`返回了`ModelAndView`,会优先根据返回值中的页面来显示。不过,`resolveException`可以返回`null`,此时则展示`web.xml`中的`error-page`的`500`状态码配置的页面。\n当`web.xml`中有相应的`error-page`配置,则可以在实现`resolveException`方法时返回`null`。\n"},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java26.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java泛型","expandState":"expand"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型"},"children":[]}]},{"data":{"text":"泛型方法","expandState":"collapse"},"children":[{"data":{"text":"简单定义","note":"```\npublic class Test{}\n\n```"},"children":[]},{"data":{"text":"简单实例化","note":"```\nTest t = new Test();\n\n```"},"children":[]},{"data":{"text":"规则","expandState":"collapse"},"children":[{"data":{"text":"所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前。"},"children":[]},{"data":{"text":"每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。"},"children":[]},{"data":{"text":"类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。"},"children":[]},{"data":{"text":"泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。"},"children":[]}]}]},{"data":{"text":"泛型类","expandState":"collapse"},"children":[{"data":{"text":"泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开"},"children":[]},{"data":{"text":"一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符"},"children":[]},{"data":{"text":"因为他们接受一个或多个参数,这些类被称为参数化的类或参数化的类型"},"children":[]},{"data":{"text":"例子","image":"https://i.postimg.cc/dtKyy99x/20200110183927.png","imageTitle":"dtKyy99x/20200110183927.png","imageSize":{"width":200,"height":132}},"children":[]}]},{"data":{"text":"类型通配符","expandState":"collapse"},"children":[{"data":{"text":"类型通配符一般是使用?代替具体的类型参数","expandState":"collapse"},"children":[{"data":{"text":"List在逻辑上是List,List 等所有List<具体类型实参>的父类"},"children":[]}]},{"data":{"text":"类型通配符上限","expandState":"collapse"},"children":[{"data":{"text":"List如此定义就是通配符泛型值接受Number及其下层子类类型"},"children":[]}]},{"data":{"text":"类型通配符下限","expandState":"collapse"},"children":[{"data":{"text":"List表示类型只能接受Number及其三层父类类型"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java16.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java循环结构","expandState":"expand"},"children":[{"data":{"text":"while 循环","expandState":"collapse","note":"```\nwhile( 布尔表达式 ) {\n\t//循环内容\n}\n\n```"},"children":[{"data":{"text":"只要布尔表达式为 true,循环体会一直执行下去","expandState":"expand"},"children":[]}]},{"data":{"text":"do…while 循环","expandState":"collapse","note":"```\ndo {\n\t//代码语句\n}while(布尔表达式);\n\n```"},"children":[{"data":{"text":"对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次","expandState":"expand"},"children":[]}]},{"data":{"text":"for 循环","expandState":"collapse","note":"```\nfor(初始化; 布尔表达式; 更新) {\n\t//代码语句\n}\n\n```"},"children":[{"data":{"text":"最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。","expandState":"expand"},"children":[]},{"data":{"text":"然后,检测布尔表达式的值。如果为 true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。","expandState":"expand"},"children":[]},{"data":{"text":"执行一次循环后,更新循环控制变量。","expandState":"expand"},"children":[]},{"data":{"text":"再次检测布尔表达式。循环执行上面的过程。","expandState":"expand"},"children":[]}]},{"data":{"text":"Java 增强 for 循环","expandState":"collapse","note":"```\nfor(声明语句 : 表达式){\n\t//代码句子\n}\n\n```"},"children":[{"data":{"text":"声明新的局部变量,该变量的类型必须和数组元素的类型匹配","expandState":"expand"},"children":[]},{"data":{"text":"其作用域限定在循环语句块,其值与此时数组元素的值相等。","expandState":"expand"},"children":[]}]},{"data":{"text":"break 关键字","expandState":"collapse"},"children":[{"data":{"text":"break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。","expandState":"expand"},"children":[]},{"data":{"text":"break 跳出最里层的循环,并且继续执行该循环下面的语句。","expandState":"expand"},"children":[]}]},{"data":{"text":"continue 关键字","expandState":"collapse"},"children":[{"data":{"text":"continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。","expandState":"expand"},"children":[]},{"data":{"text":"在 for 循环中,continue 语句使程序立即跳转到更新语句。","expandState":"expand"},"children":[]},{"data":{"text":"在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。","expandState":"expand"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/mysql/practice03.md: -------------------------------------------------------------------------------- 1 | # 查询两张表不同的数据 2 | 3 | 有两张表:一张A表和一张B表 4 | 5 | - left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 ; 6 | - right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录; 7 | - inner join(等值连接) 只返回两个表中联结字段相等的行; 8 | 9 | **表A数据:** 10 | 11 | | a_id | bookName | price | 12 | | ---- | -------------- | ----- | 13 | | 1 | java教程 | 84 | 14 | | 2 | javascript教程 | 80 | 15 | | 3 | mysql教程 | 69 | 16 | | 4 | c语言 | 102 | 17 | 18 | **表B数据:** 19 | 20 | | b_id | bookName | price | 21 | | ---- | -------------- | ----- | 22 | | 1 | java教程 | 84 | 23 | | 2 | javascript教程 | 80 | 24 | | 5 | linux教程 | 80 | 25 | | 6 | android教程 | 68 | 26 | 27 | ```sql 28 | DROP TABLE IF EXISTS a; 29 | DROP TABLE IF EXISTS b; 30 | 31 | CREATE TABLE a( 32 | a_id INT, 33 | bookName VARCHAR(50), 34 | price FLOAT 35 | ); 36 | CREATE TABLE b( 37 | a_id INT, 38 | bookName VARCHAR(50), 39 | price FLOAT 40 | ); 41 | 42 | INSERT INTO a VALUES 43 | (1,'java教程',84), 44 | (2,'javascript教程',80), 45 | (3,'mysql教程',69), 46 | (4,'c语言',102); 47 | 48 | INSERT INTO b VALUES 49 | (1,'java教程',84), 50 | (2,'javascript教程',80), 51 | (5,'linux教程',80), 52 | (6,'android教程',68); 53 | ``` 54 | 55 | 56 | 57 | > 查询两张表中都有的记录(相同数据) 58 | > 59 | 60 | ```sql 61 | SELECT a.* FROM a INNER JOIN b ON a.a_id = b.b_id; 62 | ``` 63 | 64 | > 查询表A中有,表B中没有的数据 65 | 66 | 先使用连接查询a表的全部 67 | 68 | ![1577093558538](https://cdn.tencentfs.clboy.cn/images/2021/20210911203212539.png) 69 | 70 | 然后筛选出b中没有的数据 71 | 72 | ```sql 73 | SELECT a.* FROM a LEFT JOIN b ON a.a_id = b.b_id WHERE b.b_id IS NULL; 74 | ``` 75 | 76 | 77 | 78 | > 查询表A中没有,表B中有的数据 79 | 80 | ```sql 81 | SELECT b.* FROM a RIGHT JOIN b ON a.a_id = b.b_id WHERE a.a_id IS NULL; 82 | ``` 83 | 84 | 85 | 86 | > 查询表A表和B表中不相同的数据 87 | 88 | 将上面两个结果连接在一起 89 | 90 | ```sql 91 | SELECT a.* FROM a LEFT JOIN b ON a.a_id = b.b_id WHERE b.b_id IS NULL UNION SELECT b.* FROM a RIGHT JOIN b ON a.a_id = b.b_id WHERE a.a_id IS NULL; 92 | ``` 93 | 94 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-mvc-prop-tag.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"配置文件标签","expandState":"expand"},"children":[{"data":{"text":"context:annotation-config","expandState":"collapse","layout":null},"children":[{"data":{"text":"他的作用是向 Spring 容器注册\nAutowiredAnnotationBeanPostProcessor、\nCommonAnnotationBeanPostProcessor、\nPersistenceAnnotationBeanPostProcessor、\nRequiredAnnotationBeanPostProcessor \n这 4 个BeanPostProcessor。","layout":null},"children":[]},{"data":{"text":"注册这4个 BeanPostProcessor的作用,就是为了你的系统能够识别相应的注解。","layout":null},"children":[]}]},{"data":{"text":"context:component-scan","expandState":"collapse","layout":null},"children":[{"data":{"text":"两个子标签","layout":null,"expandState":"collapse"},"children":[{"data":{"text":" 指定的扫描","layout":null},"children":[]},{"data":{"text":" 指定的不扫描","layout":null},"children":[]}]},{"data":{"text":"例子:只扫描controller","layout":null,"expandState":"collapse"},"children":[{"data":{"text":" \r\n\t \r\n","layout":null},"children":[]}]},{"data":{"text":"注意","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"如果配置了那么标签就可以不用再xml中配置了,因为前者包含了后者。","layout":null},"children":[]}]}]},{"data":{"text":"context:property-placeholder","expandState":"collapse","layout":null},"children":[{"data":{"text":"加载单独配置的property文件的参数","layout":null},"children":[]},{"data":{"text":"","layout":null},"children":[]}]},{"data":{"text":"import","expandState":"collapse","layout":null},"children":[{"data":{"text":"引入其他的spring配置文件","layout":null},"children":[]},{"data":{"text":"","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/mysql/install.md: -------------------------------------------------------------------------------- 1 | # mysql的安装与使用 2 | 3 | ## mysql的安装 4 | 5 | - [Windows](https://www.runoob.com/mysql/mysql-install.html) (下拉看**Windows 上安装 MySQL部分**) 6 | - [Linux](https://note.zzrfdsn.cn/note/root/cloudlandboy/linux/1566488563139.html) 7 | 8 | ## 启动和停止MySQL服务 9 | 10 | - Windows 11 | 12 | - 方式一:通过计算机管理方式 13 | 14 | 右击计算机—管理—服务—启动或停止MySQL服务 15 | 16 | - 方式二:通过命令行方式 17 | 18 | 启动:net start mysql服务名 19 | 20 | 停止:net stop mysql服务名 21 | 22 | - Linux 23 | 24 | 启动:service mysql(mysqld) start 25 | 26 | 停止:service mysql(mysqld) stop 27 | 28 | 状态:service mysql(mysqld) status 29 | 30 | ## MySQL服务端的登录和退出 31 | 32 | - 登录 33 | 34 | mysql –u用户名 –p密码 35 | 36 | - 远程登录 37 | 38 | mysql -h 主机名 -P 端口号 -u root -proot 39 | 40 | - 退出 41 | 42 | exit(quit) 43 | 44 | ## MySql数据库的使用 45 | 46 | - 不区分大小写(Linux上区分,可以通过配置文件修改) 47 | - 每句话用;或\g结尾 48 | - 各子句一般分行写 49 | - 关键字不能缩写也不能分行 50 | - 用缩进提高语句的可读性 51 | 52 | ## 基本命令 53 | 54 | 查看 mysql 中有哪些个数据库: 55 | 56 | ``` sql 57 | show databases; 58 | ``` 59 | 60 | 使用一个数据库: 61 | 62 | ``` sql 63 | use 数据库名称; 64 | ``` 65 | 66 | 查看当前使用数据库中的表: 67 | 68 | ``` sql 69 | show tables; 70 | ``` 71 | 72 | 查看指定数据库中的表: 73 | 74 | ``` sql 75 | show tables from 库名; 76 | ``` 77 | 78 | 新建一个数据库: 79 | 80 | ``` sql 81 | #创建数据库 数据库中数据的编码采用的是安装数据库时指定的默认编码 utf8 82 | CREATE DATABASE 数据库名; 83 | 84 | #创建数据库 并指定数据库中数据的编码 85 | CREATE DATABASE 数据库名 CHARACTER SET utf8; 86 | ``` 87 | 88 | 查看当前选择的数据库: 89 | 90 | ``` sql 91 | select database(); 92 | ``` 93 | 94 | 创建表: 95 | 96 | ``` sql 97 | create table stuinfo( 98 | id int, 99 | name varchar(20)); 100 | ``` 101 | 102 | 查看表结构: 103 | 104 | ``` sql 105 | desc 表名; 106 | ``` 107 | 108 | 查看表中的所有记录: 109 | 110 | ``` sql 111 | select * from 表名; 112 | ``` 113 | 114 | 向表中插入记录: 115 | 116 | ``` sql 117 | insert into 表名(列名1,列名,...,列名n) values(列1值,列2值,...,列n值); 118 | ``` 119 | 120 | 注意:插入 varchar 或 date 型的数据要用 单引号 引起来` -------------------------------------------------------------------------------- /docs/resources/minds/java/java09.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java面对对象","expandState":"expand"},"children":[{"data":{"text":"创建对象","expandState":"collapse"},"children":[{"data":{"text":"声明","priority":1,"expandState":"collapse"},"children":[{"data":{"text":"声明一个对象,包括对象名称和对象类型"},"children":[]}]},{"data":{"text":"实例化","priority":2,"expandState":"collapse"},"children":[{"data":{"text":"使用关键字new来创建一个对象"},"children":[]}]},{"data":{"text":"初始化","priority":3,"expandState":"collapse"},"children":[{"data":{"text":"使用new创建对象时,会调用构造方法初始化对象"},"children":[]}]},{"data":{"text":"案例","expandState":"expand","note":"```\npublic class Puppy{\n public Puppy(String name){\n //这个构造器仅有一个参数:name\n System.out.println(\"小狗的名字是 : \" + name ); \n }\n public static void main(String []args){\n // 下面的语句将创建一个Puppy对象\n Puppy myPuppy = new Puppy( \"tommy\" );\n }\n}\n\n```"},"children":[]}]},{"data":{"text":"访问实例变量和方法","expandState":"collapse"},"children":[{"data":{"text":"通过已创建的对象来访问成员变量和成员方法"},"children":[]},{"data":{"text":"案例","note":"```\n/* 声明和实例化对象 */\nConstructor objectReference = new Constructor();\n/* 访问其中的变量 */\nobjectReference.variableName;\n/* 访问类中的方法 */\nobjectReference.methodName();\n\n```"},"children":[]}]},{"data":{"text":"源文件声明规则","expandState":"collapse"},"children":[{"data":{"text":"一个源文件中只能有一个public类"},"children":[]},{"data":{"text":"一个源文件可以有多个非public类"},"children":[]},{"data":{"text":"源文件的名称应该和public类的类名保持一致"},"children":[]},{"data":{"text":"如果一个类定义在某个包中,那么package语句应该在源文件的首行"},"children":[]},{"data":{"text":"如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面"},"children":[]},{"data":{"text":"import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。"},"children":[]}]},{"data":{"text":"Java包","expandState":"collapse"},"children":[{"data":{"text":"包主要用来对类和接口进行分类。"},"children":[]},{"data":{"text":"当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类"},"children":[]}]},{"data":{"text":"Import语句","expandState":"collapse"},"children":[{"data":{"text":"Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/class01.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"Class对象","expandState":"expand"},"children":[{"data":{"text":"class是java.lang.Class的对象"},"children":[]},{"data":{"text":"任何一个类都是Class的实例对象"},"children":[]},{"data":{"text":"获取Class对象的方法","expandState":"collapse"},"children":[{"data":{"text":"Class c1 = Foo.class;","expandState":"collapse","note":"编译时加载,若类不存在,编译时即报错"},"children":[{"data":{"text":"c1表示了Foo类的类类型信息"},"children":[]}]},{"data":{"text":"Class c1 = foo.getClass();","note":"编译时加载,若类不存在,编译时即报错"},"children":[]},{"data":{"text":"Class c1 = class.forName(\"Foo\");","note":"动态加载类,若类不存在,运行时才会报错"},"children":[]}]},{"data":{"text":"通过类的类类型创建对象实例","expandState":"collapse"},"children":[{"data":{"text":"Foo foo = (Foo) c1.newInstance();"},"children":[{"data":{"text":"需要无参的构造方法"},"children":[]}]}]},{"data":{"text":"获取类型信息","expandState":"collapse"},"children":[{"data":{"text":"getName() 获取完整的类名"},"children":[]},{"data":{"text":"getSimpleName() 获取不带包的类名称"},"children":[]},{"data":{"text":"getMethods() 获取所有的public函数,包括继承父类而来的","note":"返回Method类数组,一个成员方法就是一个Method对象"},"children":[]},{"data":{"text":"getDeclaredMethods() 获取所有该类自己声明的方法,不论访问权限","note":"返回Method类数组,一个成员方法就是一个Method对象"},"children":[]},{"data":{"text":"Method类","expandState":"collapse"},"children":[{"data":{"text":"getReturnType() 获取返回值类型的类类型"},"children":[]},{"data":{"text":"getParameterTypes() 获取参数列表类型的类类型"},"children":[]}]},{"data":{"text":"getFields() 获取所有的public成员变量,包括继承父类而来的","note":"返回Fieldlei数组,一个成员变量就是一个Field类对象"},"children":[]},{"data":{"text":"getDeclaredFields() 获取该类自己声明的成员变量信息,不论访问权限","note":"返回Fieldlei数组,一个成员变量就是一个Field类对象"},"children":[]},{"data":{"text":"getConstructors() 获取所有的构造函数,包括继承的","note":"返回Constructor数组,一个构造函数就是一个Constructor类对象"},"children":[]},{"data":{"text":"getDeclaredConstructors() 获取该类自己声明的构造函数","note":"返回Constructor数组,一个构造函数就是一个Constructor类对象"},"children":[]}]},{"data":{"text":"反射","expandState":"collapse","note":"反射都是编译之后运行时的操作,Java中集合的泛型是防止错误输入的,只在编译阶段有效"},"children":[{"data":{"text":"method.invoke(对象,参数列表) 方法通过名称和参数列表决定"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/node/md/npm-publish-module.md: -------------------------------------------------------------------------------- 1 | # NPM发布模块 2 | 3 | ## npmjs.com 4 | 5 | 所有npm都是发布在 https://www.npmjs.com/ 上面的,所以在发布之前,需要到 npmjs 上去注册一个账号,才有权限发布自己定义模块。 6 | 7 | !> 注册后会收到一封电子邮件,需要验证之后才能够发布模块 8 | 9 | 10 | 11 | ## 新建项目 12 | 13 | 我这里创建的项目名是`clboy-npm-test`,在该文件夹下新建`say.js` 14 | 15 | [say.js](../code/clboy-npm-test/say.js ':include :type=code') 16 | 17 | 创建模块,`package.json` 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件 18 | 19 | 在该项目文件夹下打开cmd窗口,运行`npm init` 命令,然后就要填写一些信息,如果使用默认值直接按回车就好了,同意也可以使用`npm init -y`命令直接使用默认值,不再询问 20 | 21 | ## 登陆 npm 22 | 23 | 在发布之前需要登录npm,前面 npmjs.com 步骤时注册的账号和密码 24 | 25 | 使用`npm adduser` 命令登录 26 | 27 | ```shell 28 | Username: clboy 29 | Password: 30 | Email: (this IS public) 617751303@qq.com 31 | Logged in as clboy on https://registry.npmjs.org/. 32 | ``` 33 | 34 | ## 发布 35 | 36 | 登录成功后就可以使用`npm publish` 命令发布模板了 37 | 38 | 如果你的邮箱没有验证就会出现下面发布失败的提示 39 | 40 | ![20200427174432.png](https://cdn.tencentfs.clboy.cn/images/2021/20210911203212099.png) 41 | 42 | ## 测试 43 | 44 | 使用`npm search clboy` 命令就可以搜索到我发布的模块 45 | 46 | 首先`npm install clboy-npm-test` 安装模块,然后创建`index.js` 引入模块测试 47 | 48 | [index.js ](../code/npm-published-test/index.js ':include :type=code') 49 | 50 | ![20200428161721.png](https://cdn.tencentfs.clboy.cn/images/2021/20210911203212591.png) 51 | 52 | 53 | 54 | ## 淘宝 NPM 镜像 55 | 56 | npm 命令用于从国外的服务器上下载别人做好的模块。 因为是在国外的服务器,有的时候网速会很受影响,其结果就是导致下载会非常卡顿。这里推荐使用淘宝 NPM 镜像。 57 | 58 | 淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。 59 | 60 | 你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm,这里的c 是 copy的意思,即复制 npm 上面的库。把npm 上面的库复制到 国内的服务器上,当需要用的时候,使用 cnpm 命令获取,就会快很多了 61 | 62 | ### 安装 cnpm 63 | 64 | ```shell 65 | npm install -g cnpm --registry=https://registry.npm.taobao.org 66 | ``` 67 | 68 | ### 检查是否安装成功 69 | 70 | `cnpm -v` 出现版本号就是安装成功 71 | 72 | 73 | 74 | ### cnpm 命令安装模块 75 | 76 | ```shell 77 | cnpm install [name] 78 | ``` 79 | 80 | 81 | 82 | !> cnpm 本质上是复制库,它只负责从源库定期复制国内库,所以不支持通过 cnpm publish 发布到复制库上。 83 | 要发布,还是要通过 npm 发布到源库,然后耐心等待复制库同步。 (一般说来是十几分钟) -------------------------------------------------------------------------------- /docs/project/leyoumall/Introduction/list.md: -------------------------------------------------------------------------------- 1 | # 项目资源清单 2 | 3 | 4 | 5 | ## 依赖版本一览 6 | 7 | ```xml 8 | 9 | org.springframework.boot 10 | spring-boot-starter-parent 11 | 2.1.10.RELEASE 12 | 13 | 14 | 15 | 16 | 17 | 1.8 18 | Greenwich.SR4 19 | UTF-8 20 | UTF-8 21 | 2.1.1 22 | 2.1.5 23 | 1.1.10 24 | 5.1.38 25 | 1.2.4 26 | 1.26.7 27 | 28 | ``` 29 | 30 | - `Elasticsearch`学习时使用的是`7.5.0`版本,项目中使用的时`6.4.3`版本 31 | 32 | 33 | 34 | ## 使用端口一览 35 | 36 | ![201912111140](https://cdn.tencentfs.clboy.cn/images/2021/20210911203323165.png) 37 | 38 | - `leyou-manage-web :9001` 后台管理页面(VUE单页应用) 39 | - `leyou-portal :9002` 商城门户 40 | 41 | ## 后台页面 42 | 43 | [后台页面下载](/project/leyoumall/resources/leyou-manage-web.tar.gz ':ignore') 44 | 45 | 46 | 47 | ## sql文件 48 | 49 | [leyou.sql](/project/leyoumall/resources/leyou.sql ':ignore') 50 | 51 | 52 | 53 | ## 商品图片 54 | 55 | [images.zip](https://www.lanzous.com/i7vc6ub) 56 | 57 | 58 | 59 | ## 前台页面 60 | 61 | [前台页面资源](/project/leyoumall/resources/leyou-portal.zip ':ignore') 62 | 63 | 64 | 65 | ## 工具包 66 | 67 | `leyou-common`下的工具包:[utils.tar.gz](/project/leyoumall/resources/utils.tar.gz ':ignore') 68 | 69 | `leyou-auth-common`下的工具包:[jwtUtils.tar.gz](/project/leyoumall/resources/jwtUtils.tar.gz ':ignore') 70 | 71 | 72 | 73 | ## 订单模块 74 | 75 | [leyou-order.zip](/project/leyoumall/resources/leyou-order.zip ':ignore') -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-spring.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"mybatis与spring整合","expandState":"expand"},"children":[{"data":{"text":"添加MyBatis-Spring包","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中"},"children":[]},{"data":{"text":"使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类"},"children":[]},{"data":{"text":"这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中"},"children":[]},{"data":{"text":"而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中"},"children":[]}]},{"data":{"text":"安装","expandState":"expand","note":"```\n\n\n\torg.mybatis\n\tmybatis-spring\n\tx.x.x\n\n\n```"},"children":[]}]},{"data":{"text":"配置SqlSessionFactory","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"直接在spring的上下文配置就可以"},"children":[]},{"data":{"text":"整合后,可以不需要单独的mybatis配置文件,全部的配置内容都可以在spring的上下文当中"},"children":[]}]},{"data":{"text":"在spring配置文件中","expandState":"collapse"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/SxWH0Mvj/20200112194346.png","imageTitle":"20200112194346.png","imageSize":{"width":200,"height":50}},"children":[]},{"data":{"text":"注意","expandState":"collapse"},"children":[{"data":{"text":"dataSource是数据源配置,常用有DBCP,C3P0,Druid等"},"children":[]},{"data":{"text":"mapperLocations是指接口xml的文件配置,如果不配置的话映射接口类文件(.java)和映射XML文件(.xml)需要放在相同的包下\n\nmapperLocations好像和mybatis-config.xml的mappers功能相似,两个不需要同时配。"},"children":[]},{"data":{"text":"configLocation不是必须的,如果没有全局配置文件可以去掉"},"children":[]}]}]}]},{"data":{"text":"配置数据映射器类","expandState":"collapse"},"children":[{"data":{"text":"两种方法","expandState":"collapse"},"children":[{"data":{"text":"方法一:利用xml来进行显示的逐一配置","expandState":"collapse"},"children":[{"data":{"text":"mapper很多的话就会很麻烦"},"children":[]}]},{"data":{"text":"方法二:利用mybatis-spring提供的自动扫描机制","expandState":"collapse"},"children":[{"data":{"text":""},"children":[]}]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java02.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java主要特性"},"children":[{"data":{"text":"Java语言是简单的","note":"Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。\n另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如`操作符重载`、`多继承`、`自动的强制类型转换`。特别地,Java语言`不使用指针`,而是`引用`。并提供了`自动的废料收集`,使得程序员不必为内存管理而担忧。"},"children":[]},{"data":{"text":"Java语言是面向对象的","note":"Java语言提供类、接口和继承等原语,为了简单起见,只支持`类之间的单继承`,但支持`接口之间的多继承`,并支持`类与接口之间的实现机制`(关键字为`implements`)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。"},"children":[]},{"data":{"text":"Java语言是分布式的","note":"Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括`URL`、`URLConnection`、`Socket`、`ServerSocket`等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。"},"children":[]},{"data":{"text":"Java语言是健壮的","note":"Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。"},"children":[]},{"data":{"text":"Java语言是安全的","note":"Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。"},"children":[]},{"data":{"text":"Java语言是体系结构中立的","note":"Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。"},"children":[]},{"data":{"text":"Java语言是可移植的","note":"这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。"},"children":[]},{"data":{"text":"Java语言是解释型的","note":"如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。"},"children":[]},{"data":{"text":"Java是高性能的","note":"与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C++。"},"children":[]},{"data":{"text":"Java语言是多线程的","note":"在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:\n1. 使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程(实现Runnable接口)\n2. 从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。\n\n值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。"},"children":[]},{"data":{"text":"Java语言是动态的","note":"Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。"},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java18.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java Number和Math 类","expandState":"expand"},"children":[{"data":{"text":"装箱与拆箱","expandState":"collapse","note":"```\nInteger x = 5;\nx = x + 10;\nSystem.out.println(x);\n\n```"},"children":[{"data":{"text":"当 x 被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。"},"children":[]}]},{"data":{"text":"抽象类 Number","expandState":"collapse"},"children":[{"data":{"text":"Integer"},"children":[]},{"data":{"text":"Long"},"children":[]},{"data":{"text":"Byte"},"children":[]},{"data":{"text":"Double"},"children":[]},{"data":{"text":"Float"},"children":[]},{"data":{"text":"Short"},"children":[]}]},{"data":{"text":"常用Math 类","expandState":"collapse"},"children":[{"data":{"text":"xxxValue()","expandState":"collapse"},"children":[{"data":{"text":"将 Number 对象转换为xxx数据类型的值并返回。"},"children":[]}]},{"data":{"text":"valueOf()","expandState":"collapse"},"children":[{"data":{"text":"返回一个 Number 对象指定的内置数据类型"},"children":[]}]},{"data":{"text":"parseInt()","expandState":"collapse"},"children":[{"data":{"text":"将字符串解析为int类型。"},"children":[]}]},{"data":{"text":"abs()","expandState":"collapse"},"children":[{"data":{"text":"返回参数的绝对值。"},"children":[]}]},{"data":{"text":"random()","expandState":"collapse"},"children":[{"data":{"text":"返回一个随机数。"},"children":[]}]},{"data":{"text":"pow()","expandState":"collapse"},"children":[{"data":{"text":"返回第一个参数的第二个参数次方。"},"children":[]}]},{"data":{"id":"bzrz8y0cqrc0","created":1578645846289,"text":"ceil()","expandState":"collapse"},"children":[{"data":{"id":"bzrz94f8xpc0","created":1578645860250,"text":"向上取整(天花板在上面)"},"children":[]}]},{"data":{"id":"bzrz9pi4ckg0","created":1578645906137,"text":"floor()","expandState":"collapse"},"children":[{"data":{"id":"bzrz9qniweo0","created":1578645908640,"text":"向下取整(地板在下面)"},"children":[]}]},{"data":{"id":"bzrza68uk2w0","created":1578645942581,"text":"min()","expandState":"collapse"},"children":[{"data":{"id":"bzrzad2gkxc0","created":1578645957432,"text":"返回两个参数中的最小值。"},"children":[]}]},{"data":{"id":"bzrza7e3w0o0","created":1578645945076,"text":"max()","expandState":"collapse"},"children":[{"data":{"id":"bzrzaeb61u80","created":1578645960135,"text":"返回两个参数中的最大值。"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java28.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java网络编程","expandState":"expand"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来"},"children":[]}]},{"data":{"text":"TCP","expandState":"collapse"},"children":[{"data":{"text":"TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。"},"children":[]},{"data":{"text":"TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送"},"children":[]}]},{"data":{"text":"UDP","expandState":"collapse"},"children":[{"data":{"text":"是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包"},"children":[]}]},{"data":{"text":"Socket 编程","expandState":"collapse"},"children":[{"data":{"text":"套接字使用TCP提供了两台计算机之间的通信机制"},"children":[]},{"data":{"text":"客户端程序创建一个套接字,并尝试连接服务器的套接字"},"children":[]},{"data":{"text":"当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行进行通信"},"children":[]},{"data":{"text":"建立TCP连接过程","expandState":"collapse"},"children":[{"data":{"text":"服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。","priority":1},"children":[]},{"data":{"text":"服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。","priority":2},"children":[]},{"data":{"text":"服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。","priority":3},"children":[]},{"data":{"text":"Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。","priority":4},"children":[]},{"data":{"text":"在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket","priority":5},"children":[]}]},{"data":{"text":"ServerSocket 类","expandState":"collapse"},"children":[{"data":{"text":"服务器应用程序通过使用 java.net.ServerSocket 类以获取一个端口,并且侦听客户端请求"},"children":[]}]},{"data":{"text":"Socket 类","expandState":"collapse"},"children":[{"data":{"text":"java.net.Socket 类代表客户端和服务器都用来互相沟通的套接字"},"children":[]}]}]},{"data":{"text":"URL 处理","expandState":"collapse"},"children":[{"data":{"text":"协议为(protocol):http"},"children":[]},{"data":{"text":"主机为(host:port):www.runoob.com"},"children":[]},{"data":{"text":"端口号为(port): 80 ,以上URL实例并未指定端口,因为 HTTP 协议默认的端口号为 80。"},"children":[]},{"data":{"text":"文件路径为(path):/index.html"},"children":[]},{"data":{"text":"请求参数(query):language=cn"},"children":[]},{"data":{"text":"定位位置(fragment):j2se,定位到网页中 id 属性为 j2se 的 HTML 元素位置"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-b-a.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"BeanFactory与ApplacationContext","expandState":"expand","note":"IOC中最核心的接口是`Beanfactory`提供IOC的高级服务\n而`ApplicationContext`是建立在BeanFactory基础之上提供抽象的面向应用的服务。","hyperlink":"https://www.jianshu.com/p/a6144d2035a8","hyperlinkTitle":""},"children":[{"data":{"text":"BeanFacotry","expandState":"collapse"},"children":[{"data":{"text":"BeanFactory提供了一种先进的配置机制来管理任何种类bean(对象),这种配置机制考虑到任何一种可能的存储方式"},"children":[]}]},{"data":{"text":"ApplicationContext","expandState":"collapse"},"children":[{"data":{"text":"建立在BeanFactory之上,具有BeanFactory的所有功能和行为"},"children":[]},{"data":{"text":"MessageSource, 提供国际化的消息访问","expandState":"collapse"},"children":[{"data":{"text":"扩展了MessageResource接口"},"children":[]}]},{"data":{"text":"资源访问,如URL和文件"},"children":[]},{"data":{"text":"事件传播"},"children":[]},{"data":{"text":"载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层"},"children":[]}]},{"data":{"text":"不同点","expandState":"collapse"},"children":[{"data":{"text":"选用哪个","expandState":"collapse"},"children":[{"data":{"text":"BeanFactory是延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常"},"children":[]},{"data":{"text":"ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext"},"children":[]}]},{"data":{"text":"特性表","expandState":"collapse"},"children":[{"data":{"text":"特性 BeanFactory ApplicationContext"},"children":[]},{"data":{"text":"Bean 实例化/装配 Yes Yes"},"children":[]},{"data":{"text":"自动 BeanPostProcessor 注册 No Yes"},"children":[]},{"data":{"text":"自动 BeanFactoryPostProcessor 注册 No Yes"},"children":[]},{"data":{"text":"便捷的 MessageSource 访问( i18n) No Yes"},"children":[]},{"data":{"text":"ApplicationEvent 发送 No Yes"},"children":[]}]},{"data":{"text":"关系","expandState":"collapse"},"children":[{"data":{"text":"BeanFactory提供了配置框架和基本的功能"},"children":[]},{"data":{"text":"ApplicationContext建立在BeanFactory之上,并增加了其他的功能"},"children":[]},{"data":{"text":"一般来说,ApplicationContext是BeanFactory的完全超集, 任何BeanFactory功能和行为的描述也同样被认为适用于ApplicationContext"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/node/code/node_mysql/dao.js: -------------------------------------------------------------------------------- 1 | const mysql = require("mysql"); //导入mysql模块 2 | 3 | //打开连接的方法 4 | function openConnection() { 5 | //创建连接 6 | let connection = mysql.createConnection({ 7 | host: '111.222.111.222', 8 | port: '3306', 9 | user: 'yourName', 10 | password: 'yourPWD', 11 | database: 'node_test' 12 | }) 13 | 14 | //开启连接 15 | connection.connect((error) => { 16 | if (error) { 17 | console.error('连接出错了: ' + error.stack); 18 | return; 19 | } 20 | console.log('连接成功,连接id为:' + connection.threadId); 21 | }); 22 | 23 | return connection; 24 | } 25 | 26 | const connection = openConnection(); 27 | 28 | /** 29 | * 查询全部 30 | */ 31 | function queryAll() { 32 | 33 | let sql = "select * from category_"; 34 | 35 | connection.query(sql, (error, result) => { 36 | if (error) { 37 | console.log(error); 38 | return; 39 | } 40 | console.log(result); 41 | }) 42 | } 43 | 44 | /** 45 | * @param {[String]} 46 | */ 47 | function add(name) { 48 | 49 | let sql = "INSERT INTO category_ VALUES (?,?)"; 50 | 51 | let sqlParam=[null,name]; 52 | 53 | connection.query(sql, sqlParam, (error, result) => { 54 | if (error) { 55 | console.log(error); 56 | return; 57 | } 58 | console.log(result); 59 | }) 60 | } 61 | 62 | /** 63 | * @param {[String]} 64 | * @param {[Number]} 65 | */ 66 | function update(name,id) { 67 | 68 | let sql = "UPDATE category_ SET name=? WHERE id=?"; 69 | 70 | let sqlParam=[name,id]; 71 | 72 | connection.query(sql, sqlParam, (error, result) => { 73 | if (error) { 74 | console.log(error); 75 | return; 76 | } 77 | console.log(result); 78 | }) 79 | } 80 | 81 | /** 82 | * @param {[Number]} 83 | */ 84 | function remove(id) { 85 | 86 | let sql = "DELETE FROM category_ WHERE id=?"; 87 | 88 | let sqlParam=[id]; 89 | 90 | connection.query(sql, sqlParam, (error, result) => { 91 | if (error) { 92 | console.log(error); 93 | return; 94 | } 95 | console.log(result); 96 | }) 97 | } 98 | 99 | 100 | module.exports = { 101 | queryAll, 102 | add, 103 | update, 104 | remove 105 | } -------------------------------------------------------------------------------- /docs/mysql/basicquery.md: -------------------------------------------------------------------------------- 1 | # 基本查询 2 | 3 | > [SQL文件](https://www.lanzous.com/i763iqf) 4 | 5 | ## SELECT 语句 6 | 7 | > **SELECT** *****|{[DISTINCT] **column**|expression [alias],...}**FROM** **table** 8 | 9 | - **SELECT** 标识选择哪些列。 10 | - **FROM** 标识从哪个表中选 11 | 12 | 语法: 13 | 14 | ``` sql 15 | select 查询列表 from 表名; 16 | ``` 17 | 18 | 特点: 19 | 20 | 1. 查询列表可以是:表中的字段、常量值、表达式、函数 21 | 2. 查询的结果是一个虚拟的表格 22 | 23 | 查询全部列: 24 | 25 | ``` mysql 26 | SELECT *FROM 表名; 27 | ``` 28 | 29 | 查询特定的列: 30 | 31 | ``` mysql 32 | SELECT id, name FROM student; 33 | ``` 34 | 35 | 查询表达式: 36 | 37 | ``` mysql 38 | SELECT 100%98; 39 | ``` 40 | 41 | 查询函数: 42 | 43 | ``` mysql 44 | select now(); 45 | ``` 46 | 47 | ## 查询时给列的别名 48 | 49 | 别名使用双引号,以便在别名中包含空格或特殊的字符 50 | 51 | ①便于理解 52 | ②如果要查询的字段有重名的情况,使用别名可以区分开来 53 | 54 | 1. 使用**as** 55 | 56 | ``` mysql 57 | SELECT 列名1 AS "列1别名",列名2 AS "列2别名" FROM 表名; 58 | ``` 59 | 60 | 案例: 61 | 62 | ``` mysql 63 | SELECT 100%98 AS "结果"; 64 | SELECT last_name AS "姓",first_name AS "名" FROM employees; 65 | ``` 66 | 67 | 2. 使用**空格** 68 | 69 | ``` mysql 70 | SELECT 列名1 "列1别名",列名2 "列2别名" FROM 表名; 71 | ``` 72 | 73 | 案例: 74 | 75 | ``` mysql 76 | # 查询salary,显示结果为 out put 77 | SELECT salary AS "out put" FROM employees; 78 | ``` 79 | 80 | 81 | 82 | ## 查询去重 83 | 84 | ``` mysql 85 | select distinct 字段名 from 表名; 86 | ``` 87 | 88 | ``` mysql 89 | # 案例:查询员工表中涉及到的所有的部门编号 90 | SELECT DISTINCT department_id FROM employees; 91 | ``` 92 | 93 | ## +号的作用 94 | 95 | `java`中的+号: 96 | ①运算符,两个操作数都为数值型 97 | ②连接符,只要有一个操作数为字符串 98 | 99 | `mysql`中的+号: 100 | 仅仅只有一个功能:运算符 101 | 102 | ``` mysql 103 | # 直接运算 104 | select 数值+数值; 105 | 106 | # 先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算 107 | select 字符+数值; 108 | 109 | # 结果都为null 110 | select null+值; 111 | ``` 112 | 113 | ## concat函数 114 | 115 | 功能:拼接字符,相当于java中的 `"1"+"23"="123"` 116 | 117 | ``` mysql 118 | select concat(字符1,字符2,字符3,...); 119 | ``` 120 | 121 | ## ifnull函数 122 | 123 | 功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值 124 | 125 | ``` mysql 126 | # 如果commission_pct列为空则返回0 127 | select ifnull(commission_pct,0) from employees; 128 | ``` 129 | 130 | ## isnull函数 131 | 132 | 功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0 -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-mapper-xml03.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"mapper的xml文件(三)","expandState":"expand"},"children":[{"data":{"text":"sql","expandState":"collapse"},"children":[{"data":{"text":"概念"},"children":[{"data":{"text":"这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。\n它可以被静态地(在加载参数) 参数化. 不同的属性值通过包含的实例变化."},"children":[]},{"data":{"text":"属性值可以用于包含的refid属性或者包含的字句里面的属性值"},"children":[]}]},{"data":{"text":"例子","expandState":"expand","image":"https://i.postimg.cc/RF02cvzv/20200112204725.png","imageTitle":"20200112204725.png","imageSize":{"width":200,"height":105}},"children":[]}]},{"data":{"text":"参数(Parameters)","expandState":"collapse"},"children":[{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"\r\n insert into users (id, username, password)\r\n values (#{id}, #{username}, #{password})\r\n","background":"#c7edcc"},"children":[]},{"data":{"text":"如果 User 类型的参数对象传递到了语句中,id、username 和 password 属性将会被查找,然后将它们的值传入预处理语句的参数中"},"children":[]}]},{"data":{"text":"参数也可以指定一个特殊的数据类型","expandState":"collapse"},"children":[{"data":{"text":"#{property,javaType=int,jdbcType=NUMERIC}","background":"#c7edcc"},"children":[]},{"data":{"text":"javaType 通常可以从参数对象中来去确定,前提是只要对象不是一个 HashMap。\r\n那么 javaType 应该被确定来保证使用正确类型处理器"},"children":[]},{"data":{"id":"bzttrsxhiyo0","created":1578833517405,"text":"为了以后定制类型处理方式,你也可以指定一个特殊的类型处理器类(或别名)","expandState":"collapse"},"children":[{"data":{"id":"bzttrvgtczs0","created":1578833522927,"text":"#{age,javaType=int,jdbcType=NUMERIC,typeHandler=MyTypeHandler}","background":"#c7edcc"},"children":[]}]}]}]},{"data":{"text":"字符串替换","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"使用$符号代替#设置值"},"children":[]},{"data":{"text":"默认情况下,使用#{}格式的语法会导致 MyBatis 创建预处理语句属性并安全地设置值(比如?)"},"children":[]},{"data":{"text":"这样做更安全,更迅速,通常也是首选做法,不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"ORDER BY ${columnName}"},"children":[]}]},{"data":{"text":"注意","expandState":"collapse","color":"#ff0000"},"children":[{"data":{"text":"以这种方式接受从用户输出的内容并提供给语句中不变的字符串是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,要么自行转义并检验。"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java17.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java分支结构","expandState":"expand"},"children":[{"data":{"text":"if 语句","expandState":"collapse","note":"```\nif(布尔表达式){\n\t//如果布尔表达式为true将执行的语句\n}\n\n```","layout":null},"children":[{"data":{"text":"if 语句","expandState":"collapse","layout":null},"children":[{"data":{"text":"一个 if 语句包含一个布尔表达式和一条或多条语句","expandState":"expand","layout":null},"children":[]}]},{"data":{"text":"if...else语句","expandState":"collapse","layout":null},"children":[{"data":{"text":"if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行","expandState":"expand","layout":null},"children":[]}]},{"data":{"text":"if...else if...else 语句","expandState":"collapse","layout":null},"children":[{"data":{"text":"if 语句至多有 1 个 else 语句,else 语句在所有的 elseif 语句之后。","expandState":"expand","layout":null},"children":[]},{"data":{"text":"if 语句可以有若干个 elseif 语句,它们必须在 else 语句之前。","expandState":"expand","layout":null},"children":[]},{"data":{"text":"一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。","expandState":"expand","layout":null},"children":[]}]},{"data":{"text":"嵌套的 if…else 语句","expandState":"expand","layout":null},"children":[]}]},{"data":{"text":"switch 语句","expandState":"collapse","layout":null},"children":[{"data":{"text":"switch 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支","expandState":"expand","layout":null},"children":[]},{"data":{"text":"switch 语句中的变量类型可以是: byte、short、int 或者 char。","expandState":"expand","note":"从 Java SE 7 开始,switch 支持字符串类型了,同时 case 标签必须为字符串常量或字面量。","layout":null},"children":[]},{"data":{"text":"switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。","expandState":"expand","layout":null},"children":[]},{"data":{"text":"case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。","expandState":"expand","layout":null},"children":[]},{"data":{"text":"当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。","expandState":"expand","layout":null},"children":[]},{"data":{"text":"当遇到 break 语句时,switch 语句终止。","expandState":"expand","note":"程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。","layout":null},"children":[]},{"data":{"text":"switch 语句可以包含一个 default 分支,该分支必须是 switch 语句的最后一个分支。\ndefault 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。","expandState":"expand","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java25.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java集合框架","expandState":"expand"},"children":[{"data":{"text":"Collection接口","expandState":"collapse","note":"Collection接口是最基本的容器接口,继承至Iterable接口,允许元素重复,可以无序"},"children":[{"data":{"text":"List接口","expandState":"collapse"},"children":[{"data":{"text":"LinkedList","expandState":"collapse"},"children":[{"data":{"text":"底层的数据结构是链表结构"},"children":[]},{"data":{"text":"查询较慢,增删较快"},"children":[]}]},{"data":{"text":"ArrayList","expandState":"collapse"},"children":[{"data":{"text":"底层的数据结构使用的是数组结构"},"children":[]},{"data":{"text":"查询很快,但增删较慢"},"children":[]},{"data":{"text":"线程不同步"},"children":[]}]},{"data":{"text":"Vector","expandState":"collapse"},"children":[{"data":{"text":"底层是数组数据结构"},"children":[]},{"data":{"text":"线程同步"},"children":[]},{"data":{"text":"无论查询还是增删都很慢,被ArrayList替代了"},"children":[]}]}]},{"data":{"text":"Set接口","expandState":"collapse"},"children":[{"data":{"text":"不允许在其中放入重复的元素"},"children":[]},{"data":{"text":"最多只能包含一个null元素"},"children":[]},{"data":{"text":"HashSet类","expandState":"collapse"},"children":[{"data":{"text":"底层实现是基于HashMap"},"children":[]},{"data":{"text":"不保证Set的迭代顺序"},"children":[]},{"data":{"text":"不保证该顺序永久不变"},"children":[]}]}]}]},{"data":{"text":"Map接口","expandState":"collapse"},"children":[{"data":{"text":"HashMap类","expandState":"collapse"},"children":[{"data":{"text":"基于哈希表的Map接口实现,利用哈希算法根据hashCode()来配置存储地址"},"children":[]}]},{"data":{"text":"TreeMap类","expandState":"collapse"},"children":[{"data":{"text":"基于红黑树(Red-Black tree)的NavigableMap 实现。","note":"该映射根据其键的自然顺序进行排序,或者 根据创建映射时提供的Comparator 进行排序,具体取决于使用的构造方法"},"children":[]}]},{"data":{"text":"SortedMap接口","expandState":"collapse"},"children":[{"data":{"text":"进一步提供关于键的总体排序 的 Map"},"children":[]}]}]},{"data":{"text":"辅助工具类","expandState":"collapse"},"children":[{"data":{"text":"Collections、Arrays类","expandState":"collapse"},"children":[{"data":{"text":"提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作"},"children":[]}]},{"data":{"text":"Comparable","expandState":"collapse"},"children":[{"data":{"text":"Comparable用作默认的比较方式,实现了该接口的类之间可以相互进行比较,这个对象组成的集合就可以直接通过sort()进行排序了"},"children":[]}]},{"data":{"text":"Comparator接口","expandState":"collapse"},"children":[{"data":{"text":"Comparator是设计模式中策略模式的一种应用"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/node/md/router.md: -------------------------------------------------------------------------------- 1 | # Node.js 路由 2 | 3 | 4 | 5 | ## 出现的问题 6 | 7 | 首先回顾一下前面 server.js 的代码, 这个代码很清爽,也很容易维护。 但是当业务开始略微复杂的时候,怎么办呢? 8 | 比如业务上需要通过访问 /listCategory 显示所有的分类,又需要通过访问 /listProduct 显示所有的产品,那么仅仅通过一个 service(request, response) 方法来进行维护不是很麻烦吗 9 | 所以在这个时候,就会引入路由的概念了。 10 | 11 | 12 | 13 | ## 路由概念 14 | 15 | 如果没有路由的概念,那么无论是访问/listCategory路径 还是访问 /listProduct 路径,都是在service(request,response) 函数里做的。 16 | 17 | 那么引入路由的概念的话,就是指访问 /listCategory 路径,会访问 listCategory函数。 而访问 /listProduct 路径,就会访问 listProduct 函数,这样子维护起来就容易多了。 18 | 19 | 20 | 21 | ## 路由代码实现 22 | 23 | 为了达到路由效果,需要多个模块协同配合达到这个效果。 所谓的多个模块,其实就是多个.js文件里的多个函数互相配合。 24 | 25 | ### 业务处理模块 26 | 27 | 创建`requestHandlers.js`,提供 listCategory函数和listProduct()函数 28 | 29 | [requestHandlers](../code/router_20200427/requestHandlers.js ':include :type=code') 30 | 31 | ### 路由模块 32 | 33 | 创建`router.js` 34 | 35 | !> 这里如果看不懂就直接往后看到最后就明白了,如果还是不明白可以结合[菜鸟教程](https://www.runoob.com/nodejs/nodejs-router.html)学习 36 | 37 | router函数第一个参数 handle 是一个json对象,第二个参数是访问路径。 38 | 39 | 示例:`handle={"访问路径":"访问该路径时调用的处理函数"}` 40 | 41 | [router](../code/router_20200427/router.js ':include :type=code') 42 | 43 | ### 服务器模块 44 | 45 | 创建`server.js` 46 | 47 | [server](../code/router_20200427/server.js ':include :type=code') 48 | 49 | ### 入口主模块 50 | 51 | 与以往启动使用 server.js不同,带路由功能,一般都会通过 index.js 启动,所以index.js 就是入口模块。 52 | handle 映射了不同的访问路径与 业务处理模块对应函数的对应关系。 53 | 54 | [index](../code/router_20200427/index.js ':include :type=code') 55 | 56 | 然后分别访问 http://localhost:8888/listCategory 和 http://localhost:8888/listProduct 57 | 58 | 源代码 59 | 60 | 61 | 62 | ## 思路整理 63 | 64 | 1. 通过如下方式启动服务器 65 | 66 | ```shell 67 | node index.js 68 | ``` 69 | 70 | 2. index.js 调用了 server.start 函数,并且传递了 router.js 里route 函数和handle作为参数 71 | 72 | 3. serverl.js 通过了8888端口启动了服务。 然后用 onRequest 函数来处理业务 73 | 74 | 4. 当有请求进来的时候就会触发执行onRequest 函数 75 | 76 | 5. 首先解析获取请求的路径,然后调用router.js中的route方法,将映射关系和请求路径传递过去 77 | 78 | 6. route方法根据请求路径在映射关系中找到该请求路径对应的处理函数然后调用 79 | 80 | 7. 通过以上的方式,就落实在了 requestHandlers.js 的业务代码上面了 81 | 82 | 8. 最后在 serverl.js中将结果返回给页面 83 | 84 | 85 | 虽然看上去略复杂,但是以后如果要开发新的功能,比如 /listUser, 那么就只需要新增加 listUser 函数,并在 index.js 中对他进行映射即可了。 -------------------------------------------------------------------------------- /docs/mysql/function.md: -------------------------------------------------------------------------------- 1 | # 存储函数 2 | 3 | ## 存储过程与存储函数的区别 4 | 5 | > 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新 6 | > 7 | > 存储函数:有且仅有1 个返回,适合做处理数据后返回一个结果 8 | 9 | 10 | 11 | ## 创建语法 12 | 13 | ``` sql 14 | CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型 15 | BEGIN 16 | 函数体 17 | END 18 | ``` 19 | 20 | 21 | 22 | - 参数列表 包含两部分:参数名,参数类型 23 | - 函数体: 24 | - 肯定会有return语句,如果没有会报错 如果return语句没有放在函数体的最后也不报错,但不建议 25 | - 函数体中仅有一句话,则可以省略begin end 26 | - 使用 delimiter语句设置结束标记 27 | 28 | ## 调用语法 29 | 30 | ``` sql 31 | SELECT 函数名(参数列表); 32 | ``` 33 | 34 | 35 | 36 | ## 无参有返回 37 | 38 | 返回公司的员工个数 39 | 40 | ``` sql 41 | USE myemployees; 42 | DELIMITER // 43 | CREATE FUNCTION myf1() RETURNS INT 44 | BEGIN 45 | 46 | DECLARE c INT DEFAULT 0; #定义局部变量 47 | SELECT COUNT(*) INTO c #赋值 48 | FROM employees; 49 | RETURN c; 50 | 51 | END // 52 | ``` 53 | 54 | ``` sql 55 | SELECT myf1(); 56 | ``` 57 | 58 | 59 | 60 | ## 有参有返回 61 | 62 | 根据员工名,返回它的工资 63 | 64 | ``` sql 65 | DELIMITER // 66 | CREATE FUNCTION myf2(empName VARCHAR(20)) RETURNS DOUBLE 67 | BEGIN 68 | SET @sal=0; #定义用户变量 69 | SELECT salary INTO @sal #赋值 70 | FROM employees 71 | WHERE last_name = empName; 72 | 73 | RETURN @sal; 74 | 75 | END // 76 | ``` 77 | 78 | ``` sql 79 | SELECT myf2('Kochhar'); 80 | 81 | SELECT @sal; 82 | ``` 83 | 84 | 根据部门名,返回该部门的平均工资 85 | 86 | ``` sql 87 | DELIMITER // 88 | CREATE FUNCTION myf3(deptName VARCHAR(20)) RETURNS DOUBLE 89 | BEGIN 90 | DECLARE sal DOUBLE ; 91 | SELECT AVG(salary) INTO sal 92 | FROM employees e 93 | JOIN departments d ON e.department_id = d.department_id 94 | WHERE d.department_name=deptName; 95 | RETURN sal; 96 | END // 97 | ``` 98 | 99 | ``` sql 100 | SELECT myf3('IT'); 101 | ``` 102 | 103 | 104 | 105 | ## 查看函数 106 | 107 | ``` sql 108 | SHOW CREATE FUNCTION myf3; 109 | ``` 110 | 111 | 112 | 113 | ### 删除函数 114 | 115 | ``` sql 116 | DROP FUNCTION myf3; 117 | ``` 118 | 119 | 120 | 121 | 创建函数,实现传入两个float,返回二者之和 122 | 123 | ``` sql 124 | DELIMITER // 125 | CREATE OR REPLACE FUNCTION myf3(num1 FLOAT,num2 FLOAT) RETURNS FLOAT(3,1) 126 | BEGIN 127 | DECLARE SUM FLOAT(3,1) DEFAULT 0; 128 | SET SUM=num1+num2; 129 | RETURN SUM; 130 | END // 131 | ``` 132 | 133 | ``` sql 134 | SELECT myf3(15.5,15.3); --> 30.8 135 | ``` 136 | 137 | -------------------------------------------------------------------------------- /docs/others/deepin/deepin的使用.md: -------------------------------------------------------------------------------- 1 | # deepin的使用 2 | 3 | ## wine设置 4 | 5 | ### 为wine方式安装的程序创建快捷方式 6 | 7 | ```properties 8 | [Desktop Entry] 9 | Encoding=UTF-8 10 | Exec=deepin-wine "/home/cloudlandboy/.wine/drive_c/Program Files/DAUM/PotPlayer/PotPlayerMini.exe" 11 | Icon=/home/cloudlandboy/others/icon/PotPlayer.xpm 12 | Name=PotPlayer 13 | Name[zh_CN]=PotPlayer 14 | Terminal=false 15 | Type=Application 16 | X-Deepin-Vendor=user-custom 17 | 18 | ``` 19 | 需要修改的地方 20 | -`Exec`:要执行的命令 21 | -`Icon`:快捷方式图标 22 | -`Name`:快捷方式名称 23 | -`Name[zh_CN]`:快捷方式中文名称 24 | 25 | ### wine窗口美化 26 | 27 | [参考连接:https://www.lulinux.com/archives/362](https://www.lulinux.com/archives/362 "wine窗口美化") 28 | 29 | ## 软件安装位置和配置文件路径 30 | 31 | | 软件名称 | 安装路径 | 配置文件 | 其他 | 32 | | :------: | :--------------: | :------------------: | :------------------: | 33 | | nginx | /usr/share/nginx | /etc/nginx | 日志:/var/log/nginx | 34 | | mysql | /usr/share/mysql | data:/var/lib/mysql | 日志:/var/log/mysql | 35 | 36 | ## 解压 37 | 38 | ### rar格式 39 | 40 | 安装rar 41 | 42 | ```shell 43 | sudo apt install rar 44 | ``` 45 | 46 | 解压 47 | 48 | ```shell 49 | rar x xxx.rar 50 | ``` 51 | 52 | ## 安装ibus输入法 53 | 54 | 1. 卸载自带搜狗输入法和fcitx 55 | 56 | ```shell 57 | sudo apt purge -y sogou* fcitx* 58 | ``` 59 | 60 | 2. 安装 61 | 62 | ```shell 63 | sudo apt-get install ibus-rime 64 | ``` 65 | 66 | 3. 把xinputrc里面的fcitx换成ibus。 67 | 68 | ```shell 69 | vim ~/.xinputrc 70 | ``` 71 | 72 | 4. 然后把export gtk_im_module=ibus、export xmodifiers=@im=ibus、export qt_im_module=ibus粘到bashrc里面。(直接执行下面就行)。 73 | 74 | ```shell 75 | echo -e "export gtk_im_module=ibus\nexport xmodifiers=@im=ibus\nexport qt_im_module=ibus" >> ~/.bashrc 76 | ``` 77 | 78 | 5. 清理一下冗余文件。 79 | 80 | ```shell 81 | sudo rm -f /usr/share/im-config/data/23_ibus.* 82 | ``` 83 | 84 | 6. 重启或者注销重新登录 85 | 86 | 7. super+空格键可切换输入法(可在设置中修改为系统键位),按住Ctrl+`或者F4,选择 朙月拼音.简化字 87 | 88 | 8. 后选词不跟随光标解决。 89 | 90 | ```shell 91 | sudo apt-get install ibus-gtk ibus-gtk3 ibus-qt4 92 | ``` 93 | 94 | 9. DIY,配置文件路径`/home/cloudlandboy/.config/ibus/rime/`,例如修改候选词个数为9,创建default.custom.yaml文件,然后重启ibus。 95 | 96 | ```shell 97 | patch: 98 | "menu/page_size": 9 99 | ``` 100 | 101 | 102 | -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-discriminator-cache.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"mapper的xml文件(五)","expandState":"expand"},"children":[{"data":{"text":"鉴别器discriminator","expandState":"collapse"},"children":[{"data":{"text":"概念"},"children":[{"data":{"text":"有时一个单独的数据库查询也许返回很多不同 (但是希望有些关联) 数据类型的结果集"},"children":[]},{"data":{"text":"表现很像 Java 语言中的 switch 语句"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"\r\n \r\n \r\n \r\n \r\n "},"children":[]},{"data":{"id":"bztuywewlww0","created":1578836894647,"text":" ","image":"https://i.postimg.cc/bJvhYQCY/20200112214742.png","imageTitle":"0200112214742.png","imageSize":{"width":200,"height":127}},"children":[]}]}]},{"data":{"text":"缓存cache","expandState":"collapse"},"children":[{"data":{"text":"要开启二级缓存,你需要在你的 SQL 映射文件中添加一行"},"children":[]},{"data":{"text":"效果如下","expandState":"collapse"},"children":[{"data":{"text":"映射语句文件中的所有 select 语句将会被缓存。","priority":1},"children":[]},{"data":{"text":"映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。","priority":2},"children":[]},{"data":{"text":"缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。","priority":3},"children":[]},{"data":{"text":"根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。","priority":4},"children":[]},{"data":{"text":"缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。","priority":5},"children":[]},{"data":{"text":"缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。","priority":6},"children":[]}]},{"data":{"text":"属性","expandState":"collapse"},"children":[{"data":{"text":""},"children":[]},{"data":{"text":"以上配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的"},"children":[]}]},{"data":{"text":"收回策略","expandState":"collapse"},"children":[{"data":{"text":"LRU – 最近最少使用的:移除最长时间不被使用的对象。"},"children":[]},{"data":{"text":"FIFO – 先进先出:按对象进入缓存的顺序来移除它们。"},"children":[]},{"data":{"text":"SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。"},"children":[]},{"data":{"text":"WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象"},"children":[]},{"data":{"text":"默认的是 LRU"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-mvc-web-prop.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"SpringMVC中web.xml配置","expandState":"expand","note":"**spring mvc启动过程大致分为两个过程:**\n\n- ContextLoaderListener初始化,实例化IoC容器,并将此容器实例注册到ServletContext中。\n\n- DispatcherServlet初始化。\n","hyperlink":"https://www.jianshu.com/p/7c4bbf1ba998","hyperlinkTitle":""},"children":[{"data":{"text":"contextConfigLocation","expandState":"collapse","layout":null},"children":[{"data":{"text":"指定Spring IoC容器需要读取的XML文件路径","layout":null},"children":[]},{"data":{"text":"默认会去/WEB-INF/下加载applicationContext.xml","layout":null},"children":[]}]},{"data":{"text":"ContextLoaderListener","expandState":"collapse","layout":null},"children":[{"data":{"text":"Spring监听器","layout":null},"children":[]},{"data":{"text":"Spring MVC在Web容器中的启动类,读取applicationContext.xml,负责Spring IoC容器在Web上下文中的初始化","layout":null},"children":[]}]},{"data":{"text":"DispatcherServlet","expandState":"collapse","layout":null,"note":"在Spring MVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext,它又继承了根(root)WebApplicationContext对象中已经定义的所有bean。这些继承的bean可以在具体的Servlet实例中被重载,在每个Servlet实例中你也可以定义其scope下的新bean。\n\nWebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)"},"children":[{"data":{"text":"前端处理器,接受的HTTP请求和转发请求的类","layout":null},"children":[]},{"data":{"id":"bzuoif62zk00","created":1578920236579,"text":"load-on-startup","layout":null,"expandState":"collapse"},"children":[{"data":{"id":"bzuoil1pjf40","created":1578920249375,"text":"表示启动容器时初始化该Servlet;","layout":null},"children":[]}]},{"data":{"id":"bzuoip5mfts0","created":1578920258319,"text":"url-pattern","layout":null,"expandState":"collapse"},"children":[{"data":{"id":"bzuoit1ujnc0","created":1578920266798,"text":"表示哪些请求交给Spring Web MVC处理\n “/” 是用来定义默认servlet映射的。\n也可以如“*.html”表示拦截所有以html为扩展名的请求。","layout":null},"children":[]}]},{"data":{"id":"bzuoksewkk00","created":1578920422139,"text":" ","image":"https://upload-images.jianshu.io/upload_images/4120002-409b86efa7e568f4.png","imageTitle":"","imageSize":{"width":200,"height":184}},"children":[]}]},{"data":{"text":"CharacterEncodingFilter","expandState":"collapse","layout":null},"children":[{"data":{"text":"字符集过滤器","layout":null},"children":[]}]},{"data":{"text":"IntrospectorCleanupListener","expandState":"collapse","layout":null},"children":[{"data":{"text":"防止Spring内存溢出监听器","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-analysis.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"mybatis执行浅析","expandState":"expand","note":"mybatis在jdbc的基础上进行了封装"},"children":[{"data":{"text":"JDBC执行流程","expandState":"collapse"},"children":[{"data":{"text":"加载JDBC驱动;","priority":1},"children":[]},{"data":{"text":"建立并获取数据库连接;","priority":2},"children":[]},{"data":{"text":"创建 JDBC Statements 对象;","priority":3},"children":[]},{"data":{"text":"设置SQL语句的传入参数;","priority":4},"children":[]},{"data":{"text":"执行SQL语句并获得查询结果;","priority":5},"children":[]},{"data":{"text":"对查询结果进行转换处理并将处理结果返回;","priority":6},"children":[]},{"data":{"text":"释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);","priority":7},"children":[]},{"data":{"id":"bzti7zdv82o0","created":1578800931963,"text":" ","image":"https://i.postimg.cc/CK7JnmV8/20200112114331.png","imageTitle":"20200112114331.png","imageSize":{"width":196,"height":200}},"children":[]}]},{"data":{"text":"三层功能架构","expandState":"collapse"},"children":[{"data":{"text":"API接口层","expandState":"collapse"},"children":[{"data":{"text":"使用传统的MyBatis提供的API","expandState":"collapse"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/kMQN2TFg/202001121150.png","imageTitle":"202001121150.png","imageSize":{"width":200,"height":77}},"children":[]}]},{"data":{"text":"使用Mapper接口","expandState":"collapse"},"children":[{"data":{"text":"接口中声明的方法和 节点中的 节点项对应"},"children":[]},{"data":{"text":"即 节点的id值为Mapper 接口中的方法名称"},"children":[]},{"data":{"text":"parameterType 值表示Mapper 对应方法的入参类型"},"children":[]},{"data":{"text":"resultMap 值则对应了Mapper 接口表示的返回值类型或者返回结果集的元素类型"},"children":[]}]}]},{"data":{"text":"数据处理层","expandState":"collapse"},"children":[{"data":{"text":"通过传入参数构建动态SQL语句","expandState":"collapse"},"children":[{"data":{"text":"MyBatis 通过传入的参数值,使用 Ognl 来动态地构造SQL语句,使得MyBatis 有很强的灵活性和扩展性"},"children":[]},{"data":{"text":"参数映射指的是对于java 数据类型和jdbc数据类型之间的转换"},"children":[]}]},{"data":{"text":"SQL语句的执行以及封装查询结果集成List","expandState":"collapse"},"children":[{"data":{"text":"支持结果集关系一对多和多对一的转换"},"children":[]},{"data":{"text":"嵌套查询语句的查询"},"children":[]},{"data":{"text":"嵌套结果集的查询"},"children":[]}]}]},{"data":{"text":"基础支撑层","expandState":"collapse"},"children":[{"data":{"text":"事务管理机制","priority":1},"children":[]},{"data":{"text":"连接池管理机制","priority":2},"children":[]},{"data":{"text":"缓存机制","priority":3},"children":[]},{"data":{"text":"SQL语句的配置方式","priority":4},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java12.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"Java 变量类型"},"children":[{"data":{"text":"局部变量","expandState":"collapse","layout":null},"children":[{"data":{"text":"局部变量声明在方法、构造方法或者语句块中;","layout":null},"children":[]},{"data":{"text":"局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;","layout":null},"children":[]},{"data":{"text":"访问修饰符不能用于局部变量;","layout":null},"children":[]},{"data":{"text":"局部变量只在声明它的方法、构造方法或者语句块中可见;","layout":null},"children":[]},{"data":{"text":"局部变量是在栈上分配的。","layout":null},"children":[]},{"data":{"text":"局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。","layout":null},"children":[]}]},{"data":{"text":"实例变量","expandState":"collapse","layout":null},"children":[{"data":{"text":"实例变量声明在一个类中,但在方法、构造方法和语句块之外;","layout":null},"children":[]},{"data":{"text":"当一个对象被实例化之后,每个实例变量的值就跟着确定;","layout":null},"children":[]},{"data":{"text":"实例变量在对象创建的时候创建,在对象被销毁的时候销毁;","layout":null},"children":[]},{"data":{"text":"实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;","layout":null},"children":[]},{"data":{"text":"实例变量可以声明在使用前或者使用后;","layout":null},"children":[]},{"data":{"text":"访问修饰符可以修饰实例变量;","layout":null},"children":[]},{"data":{"text":"实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;","layout":null},"children":[]},{"data":{"text":"实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;","layout":null},"children":[]},{"data":{"text":"实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。","layout":null},"children":[]}]},{"data":{"text":"类变量(静态变量)","expandState":"collapse","layout":null},"children":[{"data":{"text":"类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。","layout":null},"children":[]},{"data":{"text":"无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。","layout":null},"children":[]},{"data":{"text":"静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。","layout":null},"children":[]},{"data":{"text":"静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。","layout":null},"children":[]},{"data":{"text":"静态变量在程序开始时创建,在程序结束时销毁。","layout":null},"children":[]},{"data":{"text":"与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。","layout":null},"children":[]},{"data":{"text":"默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。\n变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。","layout":null},"children":[]},{"data":{"text":"静态变量可以通过:ClassName.VariableName的方式访问。","layout":null},"children":[]},{"data":{"text":"类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。\n如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/vue/code/component-view.html: -------------------------------------------------------------------------------- 1 | 42 | 54 |
55 | 56 |
57 | 58 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-ioc-container.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"ioc容器","expandState":"expand","note":"**在Spring框架中的核心组件只有三个:**\t\n`Core`、`Context`和`Bean`。它们构建起了整个Spring的骨骼架构,没有它们就不可能有`AOP`、`Web`等特性功能。\n\n如果说在三个核心中再选出一个核心,那就非Bean莫属了。可以说,Spring就是面向Bean的编程,Bean在Spring中才是真正的主角。\n\n**Spring为何如此流行?**\n你会发现Spring解决了一个非常关键的问题,它可以让你对对象之间的关系转而用配置文件来管理,或者注解,也就是它的依赖注入机制。而这个注入关系在一个叫Ioc的容器中管理。Ioc容器就是被Bean包裹的对象。Spring正是通过把对象包装在Bean中从而达到管理这些对象及做一些列额外操作的目的。\n"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"在每个框架的中都有一个容器的概念,所谓的容器就是将常用的服务,封装起来,然后,用户只需要遵循一定的规则,就可以达到统一、灵活、安全、方便、快速的目的"},"children":[]},{"data":{"text":"具有依赖注入功能的容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖"},"children":[]}]},{"data":{"text":"Bean的概念","expandState":"collapse"},"children":[{"data":{"text":"由IoC容器管理的那些组成你应用程序的对象我们就叫它Bean"},"children":[]},{"data":{"text":"Bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了"},"children":[]}]},{"data":{"text":"元数据BeanDefinition","expandState":"collapse"},"children":[{"data":{"text":"确定如何实例化Bean、管理Bean之间的依赖关系以及管理Bean,这就需要配置元数据,在Spring中由BeanDefinition代表"},"children":[]}]},{"data":{"text":"如何工作的","expandState":"collapse"},"children":[{"data":{"text":"以xml配置方式,简单解释"},"children":[]},{"data":{"text":"准备配置文件","priority":1,"expandState":"collapse"},"children":[{"data":{"text":"配置文件中声明Bean定义也就是为Bean配置元数据。"},"children":[]}]},{"data":{"text":"由IoC容器进行解析元数据","priority":2,"expandState":"collapse"},"children":[{"data":{"text":"IoC容器的Bean Reader读取并解析配置文件,根据定义生成BeanDefinition配置元数据对象,IoC容器根据BeanDefinition进行实例化、配置及组装Bean"},"children":[]}]},{"data":{"text":"实例化IoC容器","priority":3,"expandState":"collapse"},"children":[{"data":{"text":"由客户端实例化容器,获取需要的Bean"},"children":[]}]},{"data":{"id":"bzum42qi5jk0","created":1578913470197,"text":" ","image":"https://upload-images.jianshu.io/upload_images/4120002-20a10b10864014de.png","imageTitle":"","imageSize":{"width":200,"height":15}},"children":[]},{"data":{"id":"bzumdpiifuo0","created":1578914225058,"text":" ","image":"https://upload-images.jianshu.io/upload_images/4120002-321b0f605bce31ed.jpg","imageTitle":"","imageSize":{"width":200,"height":107}},"children":[]}]},{"data":{"text":"hello world","expandState":"expand","note":"```\n\n@Test \npublic void testHelloWorld() { \n\n //1、读取配置文件实例化一个IoC容器 \n ApplicationContext context = new ClassPathXmlApplicationContext(\"helloworld.xml\"); \n\n //2、从容器中获取Bean,注意此处完全“面向接口编程,而不是面向实现” \n HelloApi helloApi = context.getBean(\"hello\", HelloApi.class); \n\n //3、执行业务逻辑 \n helloApi.sayHello(); \n\n}\n\n```"},"children":[]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java29.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java多线程","expandState":"expand"},"children":[{"data":{"text":"进程","expandState":"collapse"},"children":[{"data":{"text":"独立性","expandState":"collapse"},"children":[{"data":{"text":"拥有独立资源"},"children":[]},{"data":{"text":"独立的地址"},"children":[]},{"data":{"text":"无授权其他进程无法访问"},"children":[]}]},{"data":{"text":"动态性","expandState":"collapse"},"children":[{"data":{"text":"与程序的区别是:进程是动态的指令集合,而程序是静态的指令集合"},"children":[]},{"data":{"text":"加入时间概念"},"children":[]},{"data":{"text":"有自己的生命周期和不同的状态"},"children":[]}]},{"data":{"text":"并发性","expandState":"collapse"},"children":[{"data":{"text":"多个进程可以在单核处理器并发执行"},"children":[]},{"data":{"text":"多个进程互不影响"},"children":[]},{"data":{"text":"不并行的区别是:并行是同一时刻多个进程在多个处理器同时执行,而并发是指在同一个时刻只能执行一条执行,但相互切换迅速,宏观上看是执行多个指令"},"children":[]}]}]},{"data":{"text":"线程","expandState":"collapse"},"children":[{"data":{"text":"线程现对于进程同进程相对于操作系统"},"children":[]},{"data":{"text":"多个线程共享同一进程的资源"},"children":[]},{"data":{"text":"轻量级进程"},"children":[]},{"data":{"text":"性能高,创建容易"},"children":[]},{"data":{"text":"应用:一个浏览器同时下载多个图片,一个服务器同时处理多个请求"},"children":[]}]},{"data":{"text":"生命周期","expandState":"collapse"},"children":[{"data":{"text":"新建","expandState":"collapse"},"children":[{"data":{"text":"new一个Thread"},"children":[]}]},{"data":{"text":"就绪","expandState":"collapse"},"children":[{"data":{"text":"执行start方法"},"children":[]}]},{"data":{"text":"运行","expandState":"collapse"},"children":[{"data":{"text":"开始执行run方法"},"children":[]}]},{"data":{"text":"阻塞","expandState":"collapse"},"children":[{"data":{"text":"进入阻塞","expandState":"collapse"},"children":[{"data":{"text":"调用sleep方法主动放弃处理器资源"},"children":[]},{"data":{"text":"想获得一个同步检测器,但该同步检测器被其他资源所占有"},"children":[]},{"data":{"text":"调用一个阻塞时的IO方法,在该方法返回前,线程阻塞"},"children":[]},{"data":{"text":"等待某个notify通知"},"children":[]},{"data":{"text":"调用suspend挂起"},"children":[]}]},{"data":{"text":"解除阻塞","expandState":"collapse"},"children":[{"data":{"text":"调用阻塞式IO方法已返回"},"children":[]},{"data":{"text":"成功后的了试图要得到的同步检测器"},"children":[]},{"data":{"text":"等待某个通知时,其他线程发出来通知"},"children":[]},{"data":{"text":"处于挂起的线程调用了resume方法"},"children":[]}]}]},{"data":{"text":"死亡","expandState":"collapse"},"children":[{"data":{"text":"run方法结束"},"children":[]},{"data":{"text":"程序抛出了一个未捕获的异常"},"children":[]},{"data":{"text":"调用stop方法"},"children":[]}]}]},{"data":{"text":"多线程","expandState":"collapse"},"children":[{"data":{"text":"创建","expandState":"collapse"},"children":[{"data":{"text":"继承Thread"},"children":[]},{"data":{"text":"实现Runnable接口(推荐)"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/java/java08.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java面对对象三大特性"},"children":[{"data":{"text":"继承","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"继承通过extends关键字来实现,其中SubClass称为子类,SuperClass称为父类,基类,或超类"},"children":[]}]},{"data":{"text":"作用","expandState":"collapse"},"children":[{"data":{"text":"代码重用,代码复用"},"children":[]}]},{"data":{"text":"单继承","expandState":"collapse"},"children":[{"data":{"text":"一个类,只能继承一个父类"},"children":[]},{"data":{"text":"一个类,可以有多个子类"},"children":[]}]},{"data":{"text":"不继承","expandState":"collapse"},"children":[{"data":{"text":"构造方法不继承"},"children":[]},{"data":{"text":"没有访问权限的成员不继承"},"children":[]},{"data":{"text":"静态成员不继承"},"children":[]}]}]},{"data":{"text":"多态","expandState":"collapse"},"children":[{"data":{"text":"多态指的是编译器(申明变量是)和运行期(创建对象后)表现为不同的形态(数据类型)"},"children":[]},{"data":{"text":"三个条件","expandState":"collapse"},"children":[{"data":{"text":"继承的存在(继承是多态的基础,没有继承就没有多态)"},"children":[]},{"data":{"text":"子类重写父类的方法(多态下调用子类重写的方法)"},"children":[]},{"data":{"text":"父类引用变量指向子类对象(子类到父类的类型转换)"},"children":[]}]},{"data":{"text":"子类转父类规则","expandState":"collapse"},"children":[{"data":{"text":"将一个父类的引用指向一个子类的对象,称为向上转型(upcastiog),自动进行类型转换."},"children":[]},{"data":{"text":"此时通过父类引用调用的方法是子类覆盖或继承父类的方法,不是父类的方法."},"children":[]},{"data":{"text":"此时通过父类引用变量无法调用子类特有的方法"},"children":[]},{"data":{"text":"如果父类要调用子类的特有方法就得将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换"},"children":[]}]}]},{"data":{"text":"封装","expandState":"collapse"},"children":[{"data":{"text":"访问控制符","expandState":"collapse"},"children":[{"data":{"text":"private","expandState":"collapse"},"children":[{"data":{"text":"成员变量和方法只能在类内被访问,具有类可见性."},"children":[]}]},{"data":{"text":"default","expandState":"collapse"},"children":[{"data":{"text":"成员变量和方法只能被同一个包里的类访问,具有包可见性"},"children":[]}]},{"data":{"text":"protected","expandState":"collapse"},"children":[{"data":{"text":"可以被同一个包中的类访问,被同一个项目中不同包中的子类访问"},"children":[]}]},{"data":{"text":"public","expandState":"collapse"},"children":[{"data":{"text":"可以被同一个项目中所有类访问,具有项目可见性,这是最大的访问权限"},"children":[]}]}]},{"data":{"text":"好处","expandState":"collapse"},"children":[{"data":{"text":"隐藏类的实现细节"},"children":[]},{"data":{"text":"让使用者只能通过程序员规定的方法来访问数据"},"children":[]},{"data":{"text":"可以方便的加入存取控制语句,限制不合理操作"},"children":[]}]},{"data":{"text":"具体步骤","expandState":"collapse"},"children":[{"data":{"text":"修改属性的可见性来限制对属性的访问"},"children":[]},{"data":{"text":"为每个属性创建一对赋值(setter)方法和取值(getter)方法,用于对这些属性的存取"},"children":[]},{"data":{"text":"在赋值方法中,加入对属性的存取控制语句"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-mvc-special-bean.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"特殊bean","expandState":"expand","note":"spring mvc同时提供了很多特殊的Bean,用于处理请求和渲染视图等。\n\nDispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。\n"},"children":[{"data":{"text":"HandlerMapping","expandState":"collapse","layout":null},"children":[{"data":{"text":"处理器映射。","layout":null},"children":[]},{"data":{"id":"bzuolve2pso0","created":1578920506984,"text":"它会根据某些规则将进入容器的请求映射到具体的处理器以及一系列前处理器和后处理器(即处理器拦截器)上。\n具体的规则视HandlerMapping类的实现不同而有所不同。其最常用的一个实现支持你在控制器上添加注解,配置请求路径。当然,也存在其他的实现。","layout":null},"children":[]}]},{"data":{"text":"HandlerAdapter","expandState":"collapse","layout":null},"children":[{"data":{"text":"处理器适配器。","layout":null},"children":[]},{"data":{"id":"bzuom90o60w0","created":1578920536648,"text":"拿到请求所对应的处理器后,适配器将负责去调用该处理器,这使得DispatcherServlet无需关心具体的调用细节。\n比方说,要调用的是一个基于注解配置的控制器,那么调用前还需要从许多注解中解析出一些相应的信息。\n因此,HandlerAdapter的主要任务就是对DispatcherServlet屏蔽这些具体的细节。","layout":null},"children":[]}]},{"data":{"text":"HandlerExceptionResolver","expandState":"collapse","layout":null},"children":[{"data":{"text":"处理器异常解析器。","layout":null},"children":[]},{"data":{"id":"bzuomsz9mns0","created":1578920580098,"text":"它负责将捕获的异常映射到不同的视图上去,此外还支持更复杂的异常处理代码。"},"children":[]}]},{"data":{"text":"ViewResolver","expandState":"collapse","layout":null},"children":[{"data":{"text":"视图解析器。","layout":null},"children":[]},{"data":{"id":"bzuomxq5m000","created":1578920590431,"text":"它负责将一个代表逻辑视图名的字符串(String)映射到实际的视图类型View上。"},"children":[]}]},{"data":{"text":"LocaleResolver & LocaleContextResolver","expandState":"collapse","layout":null},"children":[{"data":{"text":"地区解析器 和 地区上下文解析器。","layout":null},"children":[]},{"data":{"id":"bzuon4c9c9s0","created":1578920604830,"text":"它们负责解析客户端所在的地区信息甚至时区信息,为国际化的视图定制提供了支持。"},"children":[]}]},{"data":{"text":"ThemeResolver","expandState":"collapse","layout":null},"children":[{"data":{"text":"主题解析器。","layout":null},"children":[]},{"data":{"id":"bzuonbc0dnk0","created":1578920620051,"text":"它负责解析你web应用中可用的主题,比如,提供一些个性化定制的布局等。"},"children":[]}]},{"data":{"text":"MultipartResolver","expandState":"collapse","layout":null},"children":[{"data":{"text":"解析multi-part的传输请求,比如支持通过HTML表单进行的文件上传等。","layout":null},"children":[]}]},{"data":{"text":"FlashMapManager","expandState":"collapse","layout":null},"children":[{"data":{"text":"FlashMap管理器。","layout":null},"children":[]},{"data":{"id":"bzuonrjry6w0","created":1578920655349,"text":"它能够存储并取回两次请求之间的FlashMap对象。\n后者可用于在请求之间传递数据,通常是在请求重定向的情境下使用。","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/springCloud/start.md: -------------------------------------------------------------------------------- 1 | # 系统架构演变 2 | 3 | 随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服务架构,还有在Google带领下来势汹涌的Service Mesh。我们到底是该乘坐微服务的船只驶向远方,还是偏安一隅得过且过? 4 | 5 | 6 | 7 | ## 集中式架构 8 | 9 | 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。 10 | 11 | ![1525529091749](https://cdn.tencentfs.clboy.cn/images/2021/20210911203212729.png) 12 | 13 | 存在的问题: 14 | 15 | - 代码耦合,开发维护困难 16 | - 无法针对不同模块进行针对性优化 17 | - 无法水平扩展 18 | - 单点容错率低,并发能力差 19 | 20 | 21 | 22 | ## 垂直拆分 23 | 24 | 当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分: 25 | 26 | ![1525529671801](https://cdn.tencentfs.clboy.cn/images/2021/20210911203213152.png) 27 | 28 | 优点: 29 | 30 | - 系统拆分实现了流量分担,解决了并发问题 31 | - 可以针对不同模块进行优化 32 | - 方便水平扩展,负载均衡,容错率提高 33 | 34 | 缺点: 35 | 36 | - 系统间相互独立,会有很多重复开发工作,影响开发效率 37 | 38 | ## 分布式服务 39 | 40 | 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式调用是关键。 41 | 42 | ![1525530657919](https://cdn.tencentfs.clboy.cn/images/2021/20210911203213582.png) 43 | 44 | 优点: 45 | 46 | - 将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率 47 | 48 | 缺点: 49 | 50 | - 系统间耦合度变高,调用关系错综复杂,难以维护 51 | 52 | 53 | 54 | ## 服务治理(SOA) 55 | 56 | 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高集群利用率的资源调度和治理中心(SOA)是关键 57 | 58 | ![1525530804753](https://cdn.tencentfs.clboy.cn/images/2021/20210911203214007.png) 59 | 60 | 以前出现了什么问题? 61 | 62 | - 服务越来越多,需要管理每个服务的地址 63 | - 调用关系错综复杂,难以理清依赖关系 64 | - 服务过多,服务状态难以管理,无法根据服务情况动态管理 65 | 66 | 服务治理要做什么? 67 | 68 | - 服务注册中心,实现服务自动注册和发现,无需人为记录服务地址 69 | - 服务自动订阅,服务列表自动推送,服务调用透明化,无需关心依赖关系 70 | - 动态监控服务状态监控报告,人为控制服务状态 71 | 72 | 缺点: 73 | 74 | - 服务间会有依赖关系,一旦某个环节出错会影响较大 75 | - 服务关系复杂,运维、测试部署困难,不符合DevOps思想 76 | 77 | ## 微服务 78 | 79 | 前面说的SOA,英文翻译过来是面向服务。微服务,似乎也是服务,都是对系统进行拆分。因此两者非常容易混淆,但其实有一些差别: 80 | 81 | ![1525532344817](https://cdn.tencentfs.clboy.cn/images/2021/20210911203214448.png) 82 | 83 | 微服务的特点: 84 | 85 | - 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责 86 | - 微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但五脏俱全。 87 | - 面向服务:面向服务是说每个服务都要对外暴露服务接口API。并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Rest的接口即可。 88 | - 自治:自治是说服务间互相独立,互不干扰 89 | - 团队独立:每个服务都是一个独立的开发团队,人数不能过多。 90 | - 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉 91 | - 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动端开发不同接口 92 | - 数据库分离:每个服务都使用自己的数据源 93 | - 部署独立,服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护 94 | 95 | 96 | 97 | 微服务结构图: 98 | 99 | ![1526860071166](https://cdn.tencentfs.clboy.cn/images/2021/20210911203232539.png) 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-mvc-process.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"id":"2e2884de132a","created":1578916218,"text":"spring mvc运行原理","note":"Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。","priority":null,"hyperlink":"https://www.jianshu.com/p/7c4bbf1ba998","hyperlinkTitle":""},"children":[{"data":{"id":"bzun3ijlh2o0","created":1578916247354,"text":" ","image":"https://upload-images.jianshu.io/upload_images/4120002-9409cf62de5e6d39.png","imageTitle":"","imageSize":{"width":200,"height":108},"layout":null},"children":[]},{"data":{"id":"bzun4amveu00","created":1578916308502,"text":"Http请求:客户端请求提交到DispatcherServlet。","priority":1,"layout":null},"children":[]},{"data":{"id":"bzun4n44whs0","created":1578916335667,"text":"寻找处理器","priority":2,"expandState":"collapse","note":"`DispatcherServlet`收到请求调用`HandlerMapping`处理器映射器\n处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给`DispatcherServlet`","layout":null},"children":[{"data":{"id":"bzun4rnxmtc0","created":1578916345572,"text":"由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。","layout":null},"children":[]}]},{"data":{"id":"bzun6e7clx40","created":1578916472999,"text":"调用处理器","priority":3,"expandState":"collapse","note":"`DispatcherServlet`调用`HandlerAdapter`处理器适配器。\n`HandlerAdapter`经过适配调用具体的处理器(Controller,也叫后端控制器)。","layout":null},"children":[{"data":{"id":"bzun6hvt2aw0","created":1578916481008,"text":"DispatcherServlet将请求提交到Controller","layout":null},"children":[]}]},{"data":{"id":"bzun7r219oo0","created":1578916579340,"text":"调用业务处理和返回结果","expandState":"collapse","priority":4,"note":"`HandlerAdapter`将`controller`执行结果ModelAndView返回给`DispatcherServlet`","layout":null},"children":[{"data":{"id":"bzun7urj4ls0","created":1578916587412,"text":"Controller调用业务逻辑处理后,返回ModelAndView。","layout":null},"children":[]}]},{"data":{"id":"bzun8wbqf9c0","created":1578916669174,"text":"处理视图映射并返回模型","priority":5,"layout":null,"expandState":"collapse","note":"ViewReslover解析后返回具体View。"},"children":[{"data":{"id":"bzun90kujc00","created":1578916678433,"text":"DispatcherServlet查询一个或多个ViewResoler视图解析器\n找到ModelAndView指定的视图。","layout":null},"children":[]}]},{"data":{"id":"bzunahh9wso0","created":1578916793586,"text":"渲染","priority":6,"expandState":"collapse"},"children":[{"data":{"id":"bzunam76ugw0","created":1578916803860,"text":"DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。"},"children":[]}]},{"data":{"id":"bzunaq2naa00","created":1578916812293,"text":"Http响应","priority":7,"expandState":"collapse"},"children":[{"data":{"id":"bzunawp20wg0","created":1578916826708,"text":"视图负责将结果显示到客户端。"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/frontend/node/md/npm-install-module.md: -------------------------------------------------------------------------------- 1 | # NPM安装模块 2 | 3 | > 前面学习了模块,那么可以想想,有很多其他做好的模块,我们只要拿来用就可以了。 4 | > 5 | > 那么npm 是什么呢?就是用来下载别人的模块,和发布自己的模块用的工具。 6 | 7 | NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 8 | 9 | - 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 10 | - 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 11 | - 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 12 | 13 | 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 **"npm -v"** 来测试是否成功安装。出现版本提示表示安装成功: 14 | 15 | 16 | 17 | ## 使用 npm 命令安装模块 18 | 19 | > 语法:`npm install ` 20 | 21 | 首先创建一个项目文件夹,我这里创建一个名为npmTest的文件夹,然后进入文件夹,在该文件夹打开cmd窗口 22 | 23 | 以下实例,我们使用 npm 命令安装`express`框架模块 24 | 25 | ```shell 26 | npm install express 27 | ``` 28 | 29 | 30 | 31 | 安装好之后,会生成一个`node_modules` 目录和`package-lock.json`文件 `express`包就放在了工程目录下的 `node_modules` 目录中,因此在代码中只需要通过 `require('express')` 的方式就好,无需指定第三方包路径。 32 | 33 | ```js 34 | var express = require('express'); 35 | ``` 36 | 37 | ## 全局安装与本地安装 38 | 39 | npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如 40 | 41 | ```shell 42 | npm install express # 本地安装 43 | npm install express -g # 全局安装 44 | ``` 45 | 46 | ### 本地安装 47 | 48 | 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。 49 | 2. 可以通过 require() 来引入本地安装的包。 50 | 51 | ### 全局安装 52 | 53 | 1. 将安装包放在 /usr/local 下或者你 node 的安装目录。 54 | 2. 可以直接在命令行里使用。 55 | 56 | 57 | 58 | ## 查看所有全局安装的模块 59 | 60 | ```shell 61 | npm list -g 62 | ``` 63 | 64 | 65 | 66 | ## package.json 67 | 68 | package.json 位于模块的目录下,用于定义包的属性。例如express 包的 package.json 文件,位于 node_modules/express/文件夹下 69 | 70 | ### Package.json 属性说明 71 | 72 | - **name** - 包名。 73 | - **version** - 包的版本号。 74 | - **description** - 包的描述。 75 | - **homepage** - 包的官网 url 。 76 | - **author** - 包的作者姓名。 77 | - **contributors** - 包的其他贡献者姓名。 78 | - **dependencies** - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。 79 | - **repository** - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。 80 | - **main** - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。 81 | - **keywords** - 关键字 82 | 83 | 84 | 85 | ## 安装指定版本的模块 86 | 87 | ```shell 88 | npm install @版本号 89 | ``` 90 | 91 | 92 | 93 | ## 卸载模块 94 | 95 | ```shell 96 | npm uninstall 97 | ``` 98 | 99 | 卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看: 100 | 101 | ```shell 102 | $ npm ls 103 | ``` 104 | 105 | ## 更新模块 106 | 107 | ```shell 108 | $ npm update 109 | ``` 110 | 111 | ## 搜索模块 112 | 113 | ``` 114 | $ npm search 名称 115 | ``` 116 | 117 | -------------------------------------------------------------------------------- /docs/java/hibernate/status.md: -------------------------------------------------------------------------------- 1 | # Hibernate 实体的状态 2 | 3 | 实体Entity有三种状态,`瞬时状态`、`持久状态`、`脱管状态` 4 | 5 | 瞬时状态:transient, session没有缓存,数据库也没有记录,oid没有值 6 | 7 | 持久状态:persistent, session有缓存,数据库也有记录,oid有值 8 | 9 | 脱管状态/游离状态:detached,session没有缓存,数据库有记录,oid有值 10 | 11 | 12 | 13 | ## 瞬时转持久 14 | 15 | 新创建的一个对象,经过save,或者savaOrUpdate调用后,会变成持久状态 16 | 17 | 18 | 19 | ## 持久转脱管 20 | 21 | `load`,`get`返回的对象是持久状态的,当session关闭或者清除后,对象变成脱管状态 22 | 23 | 24 | 25 | ```java 26 | package club.zzrfdsnsyl.demo.a_threeState; 27 | 28 | import java.io.Serializable; 29 | 30 | import org.hibernate.Session; 31 | import org.hibernate.Transaction; 32 | import org.junit.Test; 33 | 34 | import club.zzrfdsnsyl.Utils.HbUtil; 35 | import club.zzrfdsnsyl.domain.Customer; 36 | 37 | /** 38 | * 持久化对象的三种状态 39 | * @author SYL 40 | * 瞬时 持久 游离 41 | * 瞬时 save()/get()-->持久 42 | * 游离 update()-->持久 43 | * 持久 delete()-->瞬时 44 | * 瞬时/游离 saveOrUpdate()-->持久 45 | */ 46 | public class State { 47 | /** 48 | * 瞬时状态 无OID 没有与session关联 49 | */ 50 | @Test 51 | public void transientState() { 52 | Customer customer=new Customer(); 53 | customer.setCust_name("郑州财经学院"); 54 | } 55 | 56 | /** 57 | * 持久化状态 有OID 与session关联 58 | */ 59 | @Test 60 | public void persistent() { 61 | Customer customer=new Customer(); 62 | customer.setCust_name("郑州财经学院"); 63 | Session session = HbUtil.openSession(); 64 | Serializable save = session.save(customer); 65 | System.out.println(save); 66 | } 67 | /** 68 | * 游离状态 69 | */ 70 | @Test 71 | public void detached() { 72 | Customer customer=new Customer(); 73 | customer.setCust_name("郑州财经学院"); 74 | Session session = HbUtil.openSession(); 75 | Transaction transaction = session.beginTransaction(); 76 | Serializable save = session.save(customer); 77 | System.out.println(save); 78 | transaction.commit(); 79 | session.close(); //session关闭 与session没联系了 80 | } 81 | 82 | 83 | /** 84 | * 持久化状态 有OID 与session关联 85 | */ 86 | @Test 87 | public void persistent02() { 88 | Session session = HbUtil.openSession(); 89 | Transaction transaction = session.beginTransaction(); 90 | Customer customer = session.get(Customer.class, 1L); 91 | customer.setCust_name("小米科技"); 92 | //无需.update(...); 93 | transaction.commit(); 94 | session.close(); 95 | 96 | } 97 | } 98 | 99 | ``` 100 | 101 | 102 | 103 | ## 总结 104 | 105 | `get`、`load`、`createQuery`、`createCriteria` 等从数据库获得的都是持久态 106 | 107 | 瞬时状态执行`save`、`update`、`saveOrUpdate`之后变成持久状态 108 | 109 | 110 | 111 | 持久态转换脱管态 112 | 113 | 1. session.close () 关闭 114 | 2. session.clear() 清除所有 115 | 3. session.evict(obj) 清除指定的PO对象 116 | 117 | -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-init-exec.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"mybatis初始化与执行sql过程","expandState":"expand"},"children":[{"data":{"text":"初始化","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"expand"},"children":[{"data":{"text":"可以这么说,MyBatis初始化的过程,就是创建 Configuration对象的过程"},"children":[]}]},{"data":{"text":"过程","expandState":"expand"},"children":[{"data":{"text":"加载配置文件mybatis-config.xml到MyBatis内部","priority":1,"expandState":"collapse"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/ZYw8PCgG/202001121200.png","imageTitle":"202001121200.png","imageSize":{"width":200,"height":157}},"children":[]}]},{"data":{"text":"使用 org.apache.ibatis.session.Configuration对象作为一个所有配置信息的容器,Configuration对象的组织结构和XML配置文件的组织结构几乎完全一样,\r\n这样配置文件的信息就存到了Configuration这个类中了","priority":2},"children":[]}]},{"data":{"text":"流程图","expandState":"expand"},"children":[{"data":{"text":" ","image":"https://i.postimg.cc/BQtxmJfX/202001121201.png","imageTitle":"02001121201.png","imageSize":{"width":200,"height":138}},"children":[]}]}]},{"data":{"text":"sql执行总体流程","expandState":"collapse"},"children":[{"data":{"text":"加载配置并初始化","expandState":"expand","note":"加载配置文件,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中"},"children":[]},{"data":{"text":"接收调用请求","expandState":"collapse"},"children":[{"data":{"text":"触发条件:","expandState":"collapse"},"children":[{"data":{"text":"调用Mybatis提供的API"},"children":[]}]},{"data":{"text":"传入参数:","expandState":"collapse"},"children":[{"data":{"text":"为SQL的ID和传入参数对象"},"children":[]}]},{"data":{"text":"处理过程:","expandState":"collapse"},"children":[{"data":{"text":"将请求传递给下层的请求处理层进行处理。"},"children":[]}]}]},{"data":{"text":"处理操作请求","expandState":"collapse"},"children":[{"data":{"text":"触发条件:","expandState":"collapse"},"children":[{"data":{"text":"API接口层传递请求过来"},"children":[]}]},{"data":{"text":"传入参数:","expandState":"collapse"},"children":[{"data":{"text":"为SQL的ID和传入参数对象"},"children":[]}]},{"data":{"text":"处理过程:","expandState":"collapse"},"children":[{"data":{"text":"(A)根据SQL的ID查找对应的MappedStatement对象。"},"children":[]},{"data":{"text":"(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。"},"children":[]},{"data":{"text":"(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。"},"children":[]},{"data":{"text":"(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果"},"children":[]},{"data":{"text":"(E)释放连接资源。"},"children":[]},{"data":{"text":"(4)返回处理结果将最终的处理结果返回。"},"children":[]}]}]},{"data":{"text":"整体执行流程图","hyperlink":null,"hyperlinkTitle":null,"expandState":"collapse"},"children":[{"data":{"id":"bztj46zmjeg0","created":1578803456170,"text":" ","image":"https://i.postimg.cc/BvDVVxD7/2019062319433043.png","imageTitle":"2019062319433043.png","imageSize":{"width":200,"height":174}},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/ssm/mybatis-dynamic-sql.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"动态 SQL","expandState":"expand","hyperlink":"https://mybatis.org/mybatis-3/zh/dynamic-sql.html","hyperlinkTitle":""},"children":[{"data":{"text":"if","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"做条件判断的,如果我们不使用这个标签,我们肯定会在代码中判断如查询的元素是否为空,传入的元素是否为空,而这时我们直接使用这个标签,就减少了代码的书写"},"children":[]},{"data":{"text":"动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"","background":"#c7edcc"},"children":[]},{"data":{"text":"如果没有传入“title”,那么所有处于“ACTIVE”状态的BLOG都会返回;反之若传入了“title”,那么就会把模糊查找“title”内容的BLOG结果返回"},"children":[]}]}]},{"data":{"text":"choose (when, otherwise)","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"对于这类标签,就是采用多个选项中找一个,就像单项选择题,但是你不会都选择,只会从中选择1个来作为条件。就有点类似于switch。。case。"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":"","background":"#c7edcc"},"children":[]}]}]},{"data":{"text":"trim (where, set)","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"如果使用第一个if语句的话,就会发现没有写where标签就会报错。而这类标签通常是搭配条件标签使用的。"},"children":[]}]},{"data":{"text":"where一般可以用1=1来解决"},"children":[]}]},{"data":{"text":"foreach","expandState":"collapse"},"children":[{"data":{"text":"概念","expandState":"collapse"},"children":[{"data":{"text":"毫无疑问这个标签肯定是用于循环了,用于遍历,如果我们传入的参数是一个数组或者集合类,那么这个标签可以循环遍历。一般我们都是使用sql中的in语句时才使用。"},"children":[]}]},{"data":{"text":"例子","expandState":"collapse"},"children":[{"data":{"text":""},"children":[]}]},{"data":{"text":"注意","expandState":"collapse"},"children":[{"data":{"text":"你可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数"},"children":[]},{"data":{"text":"当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。"},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/resources/minds/spring/spring-ioc.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"Spring ioc","expandState":"expand","note":"写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是从ioc容器中直接获取对象。\n\n就好像我们无需考虑对象的销毁回收一样,因为java垃圾回收机制帮助我们实现了这个过程;而ioc则是让我们无需考虑对象的创建过程,由ioc容器帮我们实现对象的创建、注入等过程。"},"children":[{"data":{"text":"ioc概念","expandState":"collapse","layout":null},"children":[{"data":{"text":"应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。\n也可以说,依赖被注入到对象中。\n所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。","layout":null},"children":[]},{"data":{"text":"控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。","layout":null},"children":[]},{"data":{"text":"控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。","layout":null},"children":[]}]},{"data":{"text":"深入分析","expandState":"collapse","layout":null},"children":[{"data":{"text":"谁依赖于谁","priority":1,"layout":null,"expandState":"collapse"},"children":[{"data":{"text":"当然是应用程序依赖于IoC容器","layout":null},"children":[]}]},{"data":{"text":"为什么需要依赖","priority":2,"layout":null,"expandState":"collapse"},"children":[{"data":{"text":"应用程序需要IoC容器来提供对象需要的外部资源","layout":null},"children":[]}]},{"data":{"text":"谁注入谁","priority":3,"layout":null,"expandState":"collapse"},"children":[{"data":{"text":"很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象","layout":null},"children":[]}]},{"data":{"text":"注入了什么","priority":4,"layout":null,"expandState":"collapse"},"children":[{"data":{"text":"就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)","layout":null},"children":[]}]}]},{"data":{"text":"与new对象的区别","expandState":"collapse","layout":null},"children":[{"data":{"text":"正转与反转","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转","layout":null},"children":[]},{"data":{"text":"而反转则是由容器来帮忙创建及注入依赖对象","layout":null},"children":[]}]}]},{"data":{"text":"ioc优缺点","expandState":"collapse","layout":null},"children":[{"data":{"text":"优点","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"实现组件之间的解耦,提高程序的灵活性和可维护性","layout":null},"children":[]}]},{"data":{"text":"缺点","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"对象 生成因为是使用反射编程,在效率上有些损耗。\n但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高","layout":null},"children":[]}]}]},{"data":{"text":"图例说明","expandState":"collapse","layout":null},"children":[{"data":{"text":"传统new方式","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"","layout":null,"image":"https://i.postimg.cc/dQrMKJmx/20200113164601.jpg","imageTitle":"20200113164601.jpg","imageSize":{"width":200,"height":143}},"children":[]}]},{"data":{"text":"使用ioc后","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"","layout":null,"image":"https://i.postimg.cc/65XkWFM5/20200113164602.jpg","imageTitle":"20200113164602.jpg","imageSize":{"width":159,"height":200}},"children":[]}]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/mysql/variable.md: -------------------------------------------------------------------------------- 1 | # 变量 2 | 3 | ## 系统变量 4 | 5 | 系统变量: 6 | 7 | - 全局变量 8 | - 会话变量 9 | 10 | 说明:变量由系统定义,不是用户定义,属于服务器层面 11 | 12 | 注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别 13 | 14 | 15 | 16 | 1. 查看所有系统变量 17 | 18 | ``` sql 19 | # 全局 20 | show global variables; 21 | 22 | #会话 23 | show【session】variables; 24 | ``` 25 | 26 | 2. 查看满足条件的部分系统变量 27 | 28 | ``` sql 29 | show global |【session】 variables like '%char%'; 30 | ``` 31 | 32 | 3. 查看指定的系统变量的值(`带.`) 33 | 34 | ``` sql 35 | select @@global |【@@session】.系统变量名; 36 | ``` 37 | 38 | 4. 为某个系统变量赋值 39 | 40 | - 方式一 41 | 42 | ``` sql 43 | set global|【session】系统变量名=值; 44 | ``` 45 | 46 | - 方式二(`带.`) 47 | 48 | ``` sql 49 | set @@global|【@@session】.系统变量名=值; 50 | ``` 51 | 52 | 53 | 54 | **例如:** 55 | 56 | ``` sql 57 | # 查看所有全局变量 58 | SHOW GLOBAL VARIABLES; 59 | # 查看满足条件的部分系统变量 60 | SHOW GLOBAL VARIABLES LIKE '%char%'; 61 | # 查看指定的系统变量的值 62 | SELECT @@global.autocommit; 63 | # 为某个系统变量赋值 64 | SET @@global.autocommit=0; 65 | SET GLOBAL autocommit=0; 66 | ``` 67 | 68 | 69 | 70 | ``` sql 71 | # 查看所有会话变量 72 | SHOW SESSION VARIABLES; 73 | # 查看满足条件的部分会话变量 74 | SHOW SESSION VARIABLES LIKE '%char%'; 75 | # 查看指定的会话变量的值 76 | SELECT @@autocommit; 77 | SELECT @@session.tx_isolation; 78 | # 为某个会话变量赋值 79 | SET @@session.tx_isolation='read-uncommitted'; 80 | SET SESSION tx_isolation='read-committed'; 81 | ``` 82 | 83 | 84 | 85 | ## 自定义变量 86 | 87 | 变量由用户自定义,而不是系统提供的 88 | 89 | 作用域:针对于当前会话(连接)有效,作用域同于会话变量 90 | 91 | **声明并初始化** 92 | 93 | 赋值操作符:`=`或`:=` 94 | 95 | ``` sql 96 | SET @变量名=值; 97 | SET @变量名:=值; 98 | SELECT @变量名:=值; 99 | ``` 100 | 101 | **更新变量的值** 102 | 103 | - 方式一 104 | 105 | ``` sql 106 | SET @变量名=值; 107 | SET @变量名:=值; 108 | SELECT @变量名:=值; 109 | ``` 110 | 111 | - 方式二 112 | 113 | ``` sql 114 | SELECT 字段 INTO @变量名 115 | FROM 表; 116 | ``` 117 | 118 | **查看变量的值** 119 | 120 | ``` sql 121 | SELECT @变量名; 122 | ``` 123 | 124 | 125 | 126 | ## 局部变量 127 | 128 | 作用域:仅仅在定义它的begin end块中有效 129 | 130 | 应在 begin end中的第一句话声明 131 | 132 | **声明** 133 | 134 | ``` sql 135 | DECLARE 136 | 变量名 类型; 137 | ... 138 | END 139 | 140 | # 141 | 142 | DECLARE 143 | 变量名 类型 【DEFAULT 值】; 144 | ... 145 | END 146 | ``` 147 | 148 | **赋值(更新变量的值)** 149 | 150 | - 方式一 151 | 152 | ``` sql 153 | SET 局部变量名=值; 154 | SET 局部变量名:=值; 155 | SELECT 局部变量名:=值; 156 | ``` 157 | 158 | - 方式二 159 | 160 | ``` sql 161 | SELECT 字段 INTO 具备变量名 162 | FROM 表; 163 | ``` 164 | 165 | 166 | 167 | **查看变量的值** 168 | 169 | ``` sql 170 | SELECT 局部变量名; 171 | ``` 172 | 173 | 174 | 175 | ## 案例 176 | 177 | 1. 声明两个用户变量,求和并打印 178 | 179 | ``` sql 180 | SET @m=1; 181 | SET @n=1; 182 | SET @sum=@m+@n; 183 | SELECT @sum; 184 | ``` -------------------------------------------------------------------------------- /docs/resources/minds/java/java15.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"text":"java运算符"},"children":[{"data":{"text":"赋值运算符","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"=\t简单的赋值运算符,将右操作数的值赋给左侧操作数\tC = A + B将把A + B得到的值赋给C","layout":null},"children":[]},{"data":{"text":"+ =\t加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数\tC + = A等价于C = C + A","layout":null},"children":[]},{"data":{"text":"- =\t减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数\tC - = A等价于C = C -A","layout":null},"children":[]},{"data":{"text":"* =\t乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数\tC * = A等价于C = C * A","layout":null},"children":[]},{"data":{"text":"/ =\t除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数\tC / = A等价于C = C / A","layout":null},"children":[]},{"data":{"text":"(%)=\t取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数\tC%= A等价于C = C%A","layout":null},"children":[]},{"data":{"text":"<< =\t左移位赋值运算符\tC << = 2等价于C = C << 2","layout":null},"children":[]},{"data":{"text":">> =\t右移位赋值运算符\tC >> = 2等价于C = C >> 2","layout":null},"children":[]},{"data":{"text":"&=\t按位与赋值运算符\tC&= 2等价于C = C&2","layout":null},"children":[]},{"data":{"text":"^ =\t按位异或赋值操作符\tC ^ = 2等价于C = C ^ 2","layout":null},"children":[]},{"data":{"text":"| =\t按位或赋值操作符\tC | = 2等价于C = C | 2","layout":null},"children":[]}]},{"data":{"text":"其他运算符","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"条件运算符(?:)","layout":null,"note":"条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量","expandState":"collapse"},"children":[{"data":{"text":"variable x = (expression) ? value if true : value if false","layout":null},"children":[]}]},{"data":{"text":"instanceof 运算符","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)","layout":null},"children":[]},{"data":{"text":"( Object reference variable ) instanceof (class/interface type)","layout":null},"children":[]}]}]},{"data":{"text":"Java运算符优先级","layout":null,"expandState":"collapse"},"children":[{"data":{"text":"后缀\t() [] . (点操作符)\t左到右","layout":null},"children":[]},{"data":{"text":"一元\t+ + - !〜\t从右到左","layout":null},"children":[]},{"data":{"text":"乘性 \t* /%\t左到右","layout":null},"children":[]},{"data":{"text":"加性 \t+ -\t左到右","layout":null},"children":[]},{"data":{"text":"移位 \t>> >>> << \t左到右","layout":null},"children":[]},{"data":{"text":"关系 \t>> = << = \t左到右","layout":null},"children":[]},{"data":{"text":"相等 \t== !=\t左到右","layout":null},"children":[]},{"data":{"text":"按位与\t&\t左到右","layout":null},"children":[]},{"data":{"text":"按位异或\t^\t左到右","layout":null},"children":[]},{"data":{"text":"按位或\t|\t左到右","layout":null},"children":[]},{"data":{"text":"逻辑与\t&&\t左到右","layout":null},"children":[]},{"data":{"text":"逻辑或\t| |\t左到右","layout":null},"children":[]},{"data":{"text":"条件\t?:\t从右到左","layout":null},"children":[]},{"data":{"text":"赋值\t= + = - = * = / =%= >> = << =&= ^ = | =\t从右到左","layout":null},"children":[]},{"data":{"text":"逗号\t,\t左到右","layout":null},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/mysql/groupfunctions.md: -------------------------------------------------------------------------------- 1 | # 分组函数 2 | 3 | 用作统计使用,又称为聚合函数或统计函数或组函数 4 | 5 | ## SUM(expression) 6 | 7 | ​ 求和 8 | 9 | ``` sql 10 | SELECT SUM(salary) FROM employees; 11 | ``` 12 | 13 | ## AVG(expression) 14 | 15 | ​ 平均值 16 | 17 | ``` sql 18 | SELECT AVG(salary) FROM employees; 19 | ``` 20 | 21 | 22 | 23 | ## MAX(expression) 24 | 25 | ​ 最大值 26 | 27 | ``` sql 28 | SELECT MAX(salary) FROM employees; 29 | ``` 30 | 31 | 32 | 33 | ## MIN(expression) 34 | 35 | ​ 最小值 36 | 37 | ``` sql 38 | SELECT MIN(salary) FROM employees; 39 | ``` 40 | 41 | 42 | 43 | ## COUNT(expression) 44 | 45 | ​ 计算个数 46 | 47 | ``` sql 48 | SELECT COUNT(salary) FROM employees; 49 | ``` 50 | 51 | ``` sql 52 | SELECT COUNT(*) FROM employees; 53 | ``` 54 | 55 | ``` sql 56 | SELECT COUNT(1) FROM employees; 57 | ``` 58 | 59 | 效率: 60 | `MYISAM`存储引擎下 ,COUNT(*)的效率高 61 | `INNODB`存储引擎下,COUNT(*)和COUNT(1)的效率差不多,比COUNT(字段)要高一些 62 | 63 | ------ 64 | 65 | 66 | 67 | ``` sql 68 | SELECT 69 | SUM( salary ) 和, 70 | AVG( salary ) 平均, 71 | MAX( salary ) 最高, 72 | MIN( salary ) 最低, 73 | COUNT( salary ) 个数 74 | FROM 75 | employees; 76 | ``` 77 | 78 | 平均工资保留两位小数(四舍五入) 79 | 80 | ``` sql 81 | SELECT 82 | SUM( salary ) 和, 83 | ROUND( AVG( salary ), 2 ) 平均, 84 | MAX( salary ) 最高, 85 | MIN( salary ) 最低, 86 | COUNT( salary ) 个数 87 | FROM 88 | employees; 89 | ``` 90 | 91 | ## 参数支持哪些类型 92 | 93 | ### 字符 94 | 95 | 先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算 96 | 97 | ``` sql 98 | SELECT 99 | SUM( last_name ), 100 | AVG( last_name ) 101 | FROM 102 | employees; 103 | 104 | --> 0,0 105 | ``` 106 | 107 | 与排序差不多 108 | 109 | ``` sql 110 | SELECT 111 | MAX( last_name ), 112 | MIN( last_name ) 113 | FROM 114 | employees; 115 | ``` 116 | 117 | 118 | 119 | ### 日期 120 | 121 | ``` sql 122 | SELECT SUM(hiredate) ,AVG(hiredate) FROM employees; 123 | ``` 124 | 125 | 126 | 127 | ``` sql 128 | SELECT MAX(hiredate),MIN(hiredate) FROM employees; 129 | ``` 130 | 131 | 132 | 133 | 134 | 135 | ## 特点 136 | 137 | 1. sum、avg一般用于处理数值型 138 | 139 | 2. max、min、count可以处理任何类型 140 | 3. 以上分组函数都忽略null值 141 | 4. 可以和distinct搭配实现去重的运算 142 | 5. 一般使用count(*)用作统计行数 143 | 6. 和分组函数一同查询的字段要求是group by后的字段 144 | 145 | ## 案例 146 | 147 | 1. 查询员工表中的最大入职时间和最小入职时间的相差天数 (DIFFRENCE) 148 | 149 | ``` sql 150 | SELECT 151 | MAX( hiredate ) 最大, 152 | MIN( hiredate ) 最小, 153 | (MAX( hiredate )- MIN( hiredate ))/ 1000 / 3600 / 24 DIFFRENCE 154 | FROM 155 | employees; 156 | ``` 157 | 158 | 使用DATEDIFF(d1,d2)函数,计算日期 d1~d2 之间相隔的天数 159 | 160 | ``` sql 161 | SELECT DATEDIFF(MAX(hiredate),MIN(hiredate)) DIFFRENCE; 162 | ``` 163 | 164 | 165 | 166 | 2. 查询部门编号为90的员工个数 167 | 168 | ``` sql 169 | SELECT 170 | COUNT(*) 171 | FROM 172 | employees 173 | WHERE 174 | department_id = 90; 175 | ``` 176 | 177 | -------------------------------------------------------------------------------- /docs/java/basic/IO/nio2.md: -------------------------------------------------------------------------------- 1 | # NIO.2 2 | 3 | > 随着 JDK 7 的发布,Java对NIO进行了极大的扩展,增强了对文件处理和文件系统特性的支持,以至于我们称他们为 NIO.2。因为 NIO 提供的一些功能,NIO已经成为文件处理中越来越重要的部分。 4 | 5 | 6 | 7 | ## Path 与 Paths 8 | 9 | > java.nio.file.Path 接口代表一个平台无关的平台路径,描述了目录结构中文件的位置。 10 | 11 | > Paths 提供的 get() 方法用来获取 Path 对象: 12 | 13 | `Path get(String first, String … more)` : 用于将多个字符串串连成路径 14 | 15 | 16 | 17 | > Path 常用方法 18 | 19 | - `boolean endsWith(String path)` : 判断是否以 path 路径结束 20 | - `boolean startsWith(String path)` : 判断是否以 path 路径开始 21 | - `boolean isAbsolute()` : 判断是否是绝对路径 22 | - `Path getFileName()` : 返回与调用 Path 对象关联的文件名 23 | - `Path getName(int idx)` : 返回的指定索引位置 idx 的路径名称 24 | - `int getNameCount()` : 返回Path 根目录后面元素的数量 25 | - `Path getParent()` :返回Path对象包含整个路径,不包含 Path 对象指定的文件路径 26 | - `Path getRoot()` :返回调用 Path 对象的根路径 27 | - `Path resolve(Path p)` :将相对路径解析为绝对路径 28 | - `Path toAbsolutePath()` : 作为绝对路径返回调用 Path 对象 29 | - `String toString()` : 返回调用 Path 对象的字符串表示 30 | 31 | 32 | 33 | ## Files 34 | 35 | > java.nio.file.Files 用于操作文件或目录的工具类。 36 | 37 | 38 | 39 | > Files常用方法 40 | 41 | - `Path copy(Path src, Path dest, CopyOption … how)` : 文件的复制 42 | - `Path createDirectory(Path path, FileAttribute … attr)` : 创建一个目录 43 | - `Path createFile(Path path, FileAttribute … arr)` : 创建一个文件 44 | - `void delete(Path path)` : 删除一个文件 45 | - `Path move(Path src, Path dest, CopyOption…how)` : 将 src 移动到 dest 位置 46 | - `long size(Path path)` : 返回 path 指定文件的 47 | - `boolean exists(Path path, LinkOption … opts)` : 判断文件是否存在 48 | - `boolean isDirectory(Path path, LinkOption … opts)` : 判断是否是目录 49 | - `boolean isExecutable(Path path)` : 判断是否是可执行文件 50 | - `boolean isHidden(Path path)` : 判断是否是隐藏文件 51 | - `boolean isReadable(Path path)` : 判断文件是否可 52 | - `boolean isWritable(Path path)` : 判断文件是否可写 53 | - `boolean notExists(Path path, LinkOption … opts)` : 判断文件是否不存在 54 | - `public static A readAttributes(Path path,Class type,LinkOption...` `options)` : 获取与 path 指定的文件相关联的属 55 | - `SeekableByteChannel newByteChannel(Path path, OpenOption…how)` : 获取与指定文件的连接, 56 | how 指定打开方式。 57 | - `DirectoryStream newDirectoryStream(Path path)` : 打开 path 指定的目录 58 | - `InputStream newInputStream(Path path, OpenOption…how)`:获取 InputStream 对象 59 | - `OutputStream newOutputStream(Path path, OpenOption…how)` : 获取 OutputStream 对象 60 | 61 | 62 | 63 | ## 自动资源管理 64 | 65 | > Java 7 增加了一个新特性,该特性提供了另外一种管理资源的方式,这种方式能自动关闭文 66 | > 件。这个特性有时被称为自动资源管理(Automatic Resource Management, ARM) 67 | > 该特性以 try 语句的扩展版为基础。自动资源管理主要用于,当不再需要文件(或其他资源)时,可以防止无意中忘记释放它们。 68 | 69 | 70 | 71 | **自动资源管理基于 try 语句的扩展形式:** 72 | 73 | ```java 74 | try (需要关闭的资源声明) { 75 | //可能发生异常的 76 | } catch (Exception e) { 77 | //异常的处理 78 | } finally { 79 | //一定执行的语句 80 | } 81 | ``` 82 | 83 | 当 try 代码块结束时,自动释放资源。因此不需要显示的调用 close() 方法。该形式也称为“带资源的 try 语句”。 84 | 85 | **注意:** 86 | 87 | 1. try 语句中声明的资源被隐式声明为 final ,资源的作用局限于带资源的 try 语句 88 | 2. 可以在一条 try 语句中管理多个资源,每个资源以“;” 隔开即可。 89 | 3. 需要关闭的资源,必须实现了 AutoCloseable 接口或其自接口 Closeable -------------------------------------------------------------------------------- /docs/resources/minds/java/java11.json: -------------------------------------------------------------------------------- 1 | {"root":{"data":{"id":"bd747dd1e6e7","created":1578639406,"text":"java基本数据类型"},"children":[{"data":{"id":"bzrwzamsgxs0","created":1578639447905,"text":"变量","expandState":"collapse"},"children":[{"data":{"id":"bzrwzamswrk0","created":1578639447906,"text":"变量就是申请内存来存储值,当创建变量的时候,需要在内存中申请空间"},"children":[]},{"data":{"id":"bzrwzamslvk0","created":1578639447906,"text":"内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。"},"children":[]}]},{"data":{"id":"bzrwznikwps0","created":1578639475949,"text":"Java常量","expandState":"collapse"},"children":[{"data":{"id":"bzrwznilcdk0","created":1578639475950,"text":"常量在程序运行时,不会被修改的量"},"children":[]},{"data":{"id":"bzrwznilpgg0","created":1578639475950,"text":"在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似"},"children":[]},{"data":{"id":"bzrwznilo600","created":1578639475950,"text":"例子:final double PI = 3.1415927;"},"children":[]},{"data":{"id":"bzrwzniltk00","created":1578639475951,"text":"为了便于识别,通常使用大写字母表示常量","progress":9},"children":[]},{"data":{"id":"bzrwznim1gg0","created":1578639475951,"text":"当使用常量的时候,前缀0\b表示8进制,而前缀0x代表16进制,如:int hexa = 0x64;"},"children":[]},{"data":{"id":"bzrwznim0gw0","created":1578639475951,"text":"字符串常量和字符常量都可以包含任何Unicode字符,如:char a = '\\u0001';"},"children":[]}]},{"data":{"id":"bzrx0fi0ols0","created":1578639536865,"text":"自动类型转换","expandState":"collapse"},"children":[{"data":{"id":"bzrx0lh53q00","created":1578639549873,"text":"低  ------------------------------------>  高"},"children":[]},{"data":{"id":"bzrx0r9wy3k0","created":1578639562496,"text":"byte,short,char—> int —> long—> float —> double "},"children":[]},{"data":{"id":"bzrx0umqwjs0","created":1578639569803,"text":"整型、实型(常量)、字符型数据可以混合运算。\n运算中,不同类型的数据先转化为同一类型,然后进行运算。"},"children":[]},{"data":{"id":"bzrx17tv8pc0","created":1578639598531,"text":"规则","expandState":"collapse"},"children":[{"data":{"id":"bzrx17tvirk0","created":1578639598532,"text":"1. 不能对boolean类型进行类型转换。"},"children":[]},{"data":{"id":"bzrx17tvww00","created":1578639598532,"text":"2. 不能把对象类型转换成不相关类的对象。"},"children":[]},{"data":{"id":"bzrx17tvudc0","created":1578639598532,"text":"3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。"},"children":[]},{"data":{"id":"bzrx17tvjfs0","created":1578639598532,"text":"4. 转换过程中可能导致溢出或损失精度","note":"```\nint i =128; \nbyte b = (byte)i;\n\n```\n因为byte类型时8位,最大值为127,\n所以当强制转换为int类型值128时候就会导致溢出。"},"children":[]}]}]},{"data":{"id":"bzrx2uvaktc0","created":1578639727048,"text":"强制类型转换","expandState":"collapse"},"children":[{"data":{"id":"bzrx2uvb7140","created":1578639727049,"text":"1. 条件是转换的数据类型必须是兼容的。"},"children":[]},{"data":{"id":"bzrx2uvb9d40","created":1578639727049,"text":"2. 格式:(type)value typeObjct 是要强制类型转换后的数据类型 "},"children":[]}]},{"data":{"id":"bzrx3ghu8ag0","created":1578639774123,"text":"隐含强制类型转换","expandState":"collapse"},"children":[{"data":{"id":"bzrx3ghuunk0","created":1578639774124,"text":"1. 整数的默认类型是 int。"},"children":[]},{"data":{"id":"bzrx3ghuq940","created":1578639774124,"text":"2. 浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f。"},"children":[]}]}]},"template":"default","theme":"fresh-blue","version":"1.4.43"} -------------------------------------------------------------------------------- /docs/java/springboot/templateengine.md: -------------------------------------------------------------------------------- 1 | # 模板引擎 2 | 3 | 常见的模板引擎有`JSP`、`Velocity`、`Freemarker`、`Thymeleaf` 4 | 5 | SpringBoot推荐使用Thymeleaf; 6 | 7 | ## 引入thymeleaf 8 | 9 | ```xml 10 | 11 | org.springframework.boot 12 | spring-boot-starter-thymeleaf 13 | 14 | ``` 15 | 16 | 17 | 18 | **如需切换thymeleaf版本:** 19 | 20 | ```xml 21 | 22 | 23 | X.X.X.RELEASE 24 | 25 | 26 | 27 | 2.2.2 28 | 29 | 30 | ``` 31 | 32 | 33 | 34 | ## Thymeleaf使用 35 | 36 | ```java 37 | package org.springframework.boot.autoconfigure.thymeleaf; 38 | 39 | ...... 40 | 41 | @ConfigurationProperties( 42 | prefix = "spring.thymeleaf" 43 | ) 44 | public class ThymeleafProperties { 45 | private static final Charset DEFAULT_ENCODING; 46 | public static final String DEFAULT_PREFIX = "classpath:/templates/"; 47 | public static final String DEFAULT_SUFFIX = ".html"; 48 | private boolean checkTemplate = true; 49 | private boolean checkTemplateLocation = true; 50 | private String prefix = "classpath:/templates/"; 51 | private String suffix = ".html"; 52 | private String mode = "HTML"; 53 | ``` 54 | 55 | 默认只要我们把HTML页面放在`classpath:/templates/`,thymeleaf就能自动渲染; 56 | 57 | 1. 创建模板文件`t1.html`,并导入thymeleaf的名称空间 58 | 59 | ```html 60 | 61 | ``` 62 | 63 | ```html 64 | 65 | 66 | 67 | 68 | Title 69 | 70 | 71 | 72 | 73 | 74 | ``` 75 | 76 | 2. 使用模板 77 | 78 | ```html 79 | 80 | 81 | 82 | 83 | [[${title}]] 84 | 85 | 86 |

87 |
这里的文本之后将会被覆盖
88 | 89 | 90 | ``` 91 | 92 | 3. 在controller中准备数据 93 | 94 | ```java 95 | @Controller 96 | public class HelloT { 97 | 98 | @RequestMapping("/ht") 99 | public String ht(Model model) { 100 | model.addAttribute("title","hello Thymeleaf") 101 | .addAttribute("info","this is first thymeleaf test"); 102 | return "t1"; 103 | } 104 | } 105 | ``` 106 | 107 | 108 | 109 | ## 语法规则 110 | 111 | `th:text` --> 改变当前元素里面的文本内容; 112 | 113 | `th:任意html属性 ` --> 来替换原生属性的值 114 | 115 | ![thymeleaf](https://cdn.tencentfs.clboy.cn/images/2021/20210911203236933.png) 116 | 117 | 更多配置参考官方文档: 118 | 119 | 中文参考书册:https://www.lanzous.com/i7dzr2j --------------------------------------------------------------------------------