# development-notes **Repository Path**: zy0912/development-notes ## Basic Information - **Project Name**: development-notes - **Description**: 开发过程中的笔记记录,希望可以减少自己也减少他人查找问题的时间 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-06-28 - **Last Updated**: 2025-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Windows #### Windows远程连接Linux ```bash # 连接linux远程终端 ssh 用户名@IP # 密钥连接 ssh 用户名@IP -i ~/密钥.pem # 上传文件 scp 本地文件目录 用户名@IP:远程文件夹目录 # 携带密码上传 sshpass -p '密码' scp -P端口号 本地文件 用户名@IP:远程文件夹目录 # 下载文件 scp 用户名@IP:远程文件目录 本地文件夹目录 ``` #### Windows查看端口占用并杀死 ```bash # 查看端口占用情况 netstat -aon|findstr "端口号" # 查看占用端口服务 tasklist|findstr "PID号" # 杀死端口 taskkill -PID PID号 -F ``` #### Windows杀死所有nginx进程 ``` taskkill /fi "imagename eq nginx.EXE" /f ``` #### 查看apache启动报错 ```bash httpd.exe -t ``` #### Windows下基于nginx运行php 运行php-gi ```bash php-cgi.exe -b 127.0.0.1:9000 -c ./php.ini ``` nginx 配置 ```conf server { listen 82; server_name localhost; location / { root html; index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; } } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` 启动脚本 ```bat cd php目录 start cmd /k .\php-cgi.exe -b 127.0.0.1:9000 -c .\php.ini cd nginx目录 .\nginx.exe -s quit start cmd /k .\nginx.exe ``` #### winsw命令 ```bash # 服务安装命令 项目名.exe install ``` #### WSL安装Ubuntu ##### 查看WSL版本 ```bash wsl -l --all -v ``` ##### 导出分发版本 ```bash wsl --export Ubuntu d:\wsl-ubuntu.tar ``` ##### 注销当前版本 ```bash wsl --unregister Ubuntu ``` ##### 重新导入 ```bash wsl --import Ubuntu d:\wsl-ubuntu d:\wsl-ubuntu.tar --version 2 ``` ## Linux #### 搜索 ```bash find / -name 文件名 ``` #### 删除*开头文件 ```bash rm spring.log.2025-08-15* ``` #### 软链接 ```bash # 修改 ln –snf [源文件或目录] [目标文件或目录] # 新增 ln –s [源文件或目录] [目标文件或目录] # 例子 ln -s /usr/local/python3/bin/pip3.12 /usr/bin/pip3 ``` #### 强制拷贝 ```bash /bin/cp -rf 文件 文件 ``` #### 压缩、解压缩 ```bash # 压缩 zip -r test.zip dir/* # 解压缩 unzip test.zip -d . ``` #### Liunx查看端口占用并杀死 ```bash # 管道命令查看Java进程 ps -ef | grep java # 关闭 kill -9 进程号 ``` #### Linux文件加密 ```bash # 执行完成后start.sh~为备份文件,删除即可 gzexe start.sh # 解密 gzexe -d start.sh ``` #### Centos JDK环境变量配置 ```bash # 配置全局变量 vi /etc/profile # 内容 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin # 全局变量立即生效 source /etc/profile ``` #### Firewall ```bash # 查看已开放端口 firewall-cmd --zone=public --list-ports # 防火墙重新加载 firewall-cmd --reload # 开启端口 firewall-cmd --zone=public --add-port=端口号/tcp --permanent # 移除端口 firewall-cmd --permanent --remove-port 端口号/tcp # 关闭防火墙 systemctl stop firewalld.service ``` #### selinux ```bash # 查看端口 semanage port -l #查看所有开放端口 semanage port -l | grep 5000 #查看5000端口 semanage port -l | grep http_port_t #查看selinux针对http的策略开放的端口。 # 添加 semanage port -a -t http_port_t -p tcp 5002 #http策略添加开放5002端口。 #关闭 semanage port -d -t http_port_t -p tcp 5002 #关闭http策略的5002端口。 # 查看selinux 状态 sestatus # 关闭selinux 修改 SELINUX=disabled,重启生效 vim /etc/selinux/config ``` #### Jdk部署Springboot项目 ```bash # jar包上传至服务器,后台启动 nohup java -jar 打包文件名 >springboot.log & ``` #### IVX基座部署 ```bash # ivxbase可执行权限赋予 chmod +x ivxbase # 后台启动 nohup ./ivxbase > ivx.log & ``` #### Jar启动Shell ```shell #!/bin/bash echo "start begin" pid=`ps -ef | grep test.jar | grep -v grep | awk '{print $2}'` if [ -n "$pid" ] then echo "kill -9 的pid:" $pid kill -9 $pid fi BUILD_ID=dontKillMe nohup java -jar test.jar --spring.profiles.active=prod > test.log & echo "start finish" ``` #### vue前端部署Shell ```sh # 删除部署包 rm -rf public.zip cnpm i cnpm run build:prod # 压缩成public.zip 文件 zip -r public.zip dist/* # 解压 unzip public.zip -d ./ ``` #### 判断文件夹是否存在shell ```shell #判断文件夹是否存在 # 存在 if [ -d "/文件夹路径/" ];then rm -rf 文件夹路径 fi # 不存在 if [! -d "/文件夹路径/" ];then mkdir -p 文件夹路径 fi ``` #### 开机自启 ```java 修改 /etc/rc.d/rc.local 文件,可以在该文件添加脚本路径 ``` #### 时区调整 ```bash timedatectl set-timezone 'Asia/Shanghai' ``` #### 实时查看文档最后几行 ```bash tail -200f out.file ``` #### 查看目录大小 ```bash du -hs /var/lib/jenkins/* | sort -nr ``` #### 查看证书到期时间 ```bash openssl x509 -in 7654441__chinajack.com.pem -noout -dates ``` #### 查看基本资源信息 ```bash # 查看内存大小 cat /proc/meminfo| grep MemTotal # 查看物理CPU个数 cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l # 查看cpu物理核数 cat /proc/cpuinfo| grep "cpu cores"| uniq # 查看逻辑cpu个数 cat /proc/cpuinfo| grep "processor"| wc -l # 磁盘占用 df -hl ``` #### MySQL数据备份 ```shell #!/bin/bash #保存备份个数,备份31天数据 number=15 #备份保存路径 backup_dir=/DATA/project/backup #日期 dd=`date +%Y-%m-%d-%H-%M-%S` #备份工具 tool=mysqldump #用户名 username=root #密码 password=jack%_7kNUD6Lc #将要备份的数据库 database_name=flow_middle_platform #如果文件夹不存在则创建 if [ ! -d $backup_dir ]; then mkdir -p $backup_dir; fi #简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql $tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql #写创建备份日志 echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt #找出需要删除的备份 delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1` #判断现在的备份数量是否大于$number count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l` if [ $count -gt $number ] then #删除最早生成的备份,只保留number数量的备份 rm $delfile #写删除文件日志 echo "delete $delfile" >> $backup_dir/log.txt fi ``` #### Pip镜像安装 ```bash pip install -i http://pypi.mirrors.ustc.edu.cn/simple/ --trusted-host pypi.mirrors.ustc.edu.cn -r requirements.txt ``` #### Maven导入Nexus脚本 mavenimport.sh ```sh #!/bin/bash # copy and run this script to the root of the repository directory containing files # this script attempts to exclude uploading itself explicitly so the script name is important # Get command line params while getopts ":r:u:p:" opt; do case $opt in r) REPO_URL="$OPTARG" ;; u) USERNAME="$OPTARG" ;; p) PASSWORD="$OPTARG" ;; esac done find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ; ``` start_import.sh ```ssh ./mavenimport.sh -u admin -p lima@2024 -r http://192.168.61.62:8081/repository/public/ ``` #### SSH 位置 ```bash /root/.ssh/authorized_keys ``` #### sudo免输密码 ```bash echo "test@123" | sudo -S docker ps ``` ## JVM #### jps ```bash # 列出所有 Java 进程 jps # 输出结果: # 1 jar # 1236598 Jps # 显示传递给 main 方法的参数 jps -m # 显示主类的完整包名或 JAR 文件路径 jps -l # 显示传递给 JVM 的参数 jps -v ``` #### jstat ```bash # 监控jvm内存使用情况,每1秒输出1次,总共输出5次 # 进程id由jps查询得出 jstat -gc 进程id 1000 5 # 输出结果: S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 3584.0 3584.0 0.0 3025.3 691712.0 599160.9 1398272.0 200551.6 135808.0 126265.2 16256.0 14670.0 2577 63.799 40.868 64.667 3584.0 3584.0 0.0 3025.3 691712.0 599160.9 1398272.0 200551.6 135808.0 126265.2 16256.0 14670.0 2577 63.799 40.868 64.667 3584.0 3584.0 0.0 3025.3 691712.0 599677.2 1398272.0 200551.6 135808.0 126265.2 16256.0 14670.0 2577 63.799 40.868 64.667 3584.0 3584.0 0.0 3025.3 691712.0 599829.4 1398272.0 200551.6 135808.0 126265.2 16256.0 14670.0 2577 63.799 40.868 64.667 3584.0 3584.0 0.0 3025.3 691712.0 599829.4 1398272.0 200551.6 135808.0 126265.2 16256.0 14670.0 2577 63.799 40.868 64.667 # 参数 S0C,S1C: 第一个和第二个Survivor区的容量 (默认kb) S0U,S1U: 第一个和第二个Survivor区的使用量 EC:Eden区的容量 EU:Eden区的使用量 OC:老年代的容量 OU:老年代的使用率 YGC,YGCT: 年轻代GC次数(次)及其时间(秒) FGC,FGCT: 老年代GC次数及其时间 # 监控jvm内存使用情况,百分比 jstat -gcutil 进程id 1000 5 # 监控jvm 新生代内存使用情况 jstat -gcnew 进程id 1000 5 # 监控jvm 老生代内存使用情况 jstat -gcold 进程id 1000 5 ``` ## Docker #### 查看占用CPU资源使用率最高的docker容器 ```base docker ps -q | xargs docker stats --no-stream |sort -nr -k 3 |head -10 ``` #### 查看占用内存资源使用率最高的docker容器 ```bash docker ps -q | xargs docker stats --no-stream |sort -nr -k 7 |head -10 ``` #### 查看映射目录 ```bash docker inspect new-gateway | grep Mounts -A 11 ``` #### Docker重启排查 ```bash journalctl -n 1000 ``` #### Docker镜像方式启动Springboot项目(Tip:如果使用Docker部署,启动容器时需要映射宿主机的时间文件) ```bash # 设置jvm时区 echo "Asia/Shanghai" > /etc/timezone # 一定要映射localtime文件 docker run -d --name 容器名 -p 映射端口:原端口 -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --restart=always 镜像名/ID ``` #### Docker运行Nginx并映射静态文件夹 ```bash # nginx映射启动命令 docker run -d -p 映射端口:80 --name=容器名 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/conf:/etc/nginx/conf.d --restart=always 镜像名/ID ``` #### Docker运行MySQL,数据本地备份,字符集 ```bash docker run --name 容器名 -p 映射端口:3306 -v /opt/mysql/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 --lower_case_table_names=1 -d 镜像名/ID docker run --name 容器名 -p 映射端口:3306 -v /opt/mysql/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 -d 镜像名/ID --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --restart=always ``` #### Docker运行Tomcat,本地映射 ```bash # nginx映射启动命令 docker run -d -p 映射端口:8080 --name=容器名 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/conf:/etc/nginx/conf.d --restart=always 镜像名/ID ``` #### Docker 运行jar包带参数 ```java docker run -d --name 容器名 -p映射端口:8080 -e mysql.url=XXX.XXX.XXX.XXX -e redis.url=XXX.XXX.XXX.XXX --restart=always 镜像名/ID ``` #### 日志定期清理 ```shell #!/bin/bash -il find /root/log -mtime +6 -name "*.log" -exec rm -rf {} \; exit ``` #### Docker 镜像导入导出 ```bash # 导出 docker save -o filename.tar 镜像名/镜像ID # 导入 docker load < filename.tar ``` #### Docker 拷贝 ```bash # 从容器复制文件到宿主机 docker cp my_container:/path/in/container /path/on/host ./config.xml:/etc/clickhouse-server/config.xml #从宿主机复制文件到容器 docker cp /path/on/host my_container:/path/in/container ``` #### 宿主机重启网络 Docker无法被外部访问 docker 运行的时候会默认将 ip_forward 置为开启状态,但是一旦有网络重启操作竟会导致其关闭,导致 ping 不通外网 ! 重启docker服务即可 #### Docker上传Harbor ```bash # 登录 docker login -u admin -p Harbor12345 http://192.168.61.62:88 # 给本地镜像打标签 docker tag SOURCE_IMAGE[:TAG] 192.168.61.62:88/library/REPOSITORY[:TAG] # 示例 docker tag mysql:5.7.24 192.168.61.62:88/library/mysql:5.7.24 # 上传镜像 docker push 192.168.61.62:88/library/REPOSITORY[:TAG] # 示例 docker push 192.168.61.62:88/library/mysql:5.7.24 ``` #### 拉取Harbor镜像 ```bash # /etc/docker/daemon.json 中增加私有仓库 { "registry-mirrors": ["https://cq20bk8v.mirror.aliyuncs.com"], "insecure-registries": ["192.168.61.62:88"] } # 拉取 docker pull 192.168.61.62:88/library/mysql:5.7.24 ``` #### Docker Compose ##### JDK ```yml services: new-gateway: image: openjdk:8 container_name: demo01 restart: always working_dir: /jar # deploy: # resources: # limits: # memory: 4096M command: java -Xms2g -Xmx2g -jar demo-2.0.0.jar --spring.profiles.active=test environment: - SERVER_PORT=8080 volumes: - ./jar:/jar - /home/docker-compose/hosts:/etc/hosts ports: - 8080:8080 network_mode: "host" ``` ##### Nginx ```yml services: nginx: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openresty/openresty:latest container_name: nginx restart: always volumes: - ./config:/etc/nginx:ro ``` ###### 小程序校验 ```yml server { listen 443 ssl; server_name uat.scooter.lima-info.com; ssl_certificate lima/uat.scooter.lima-info.com.pem; ssl_certificate_key lima/uat.scooter.lima-info.com.key; location =/HsMkqZJnCO..txt { add_header Content-Type text/plain; return 200 'e90cf8b18e5c91228ee40dcd24d7c849'; } } ``` ##### MySQL ```yml services: mysql: image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:5.7.44 container_name: mysql restart: always # deploy: # resources: # limits: # memory: 4096M volumes: - /etc/localtime:/etc/localtime:ro - ./conf.d:/etc/mysql/conf.d:ro - /data-data/mysql:/var/lib/mysql - /data-data/backup-mysql:/data-data/backup-mysql environment: MYSQL_ROOT_PASSWORD: xc9mimwtTMaqgDDt3QzQTr5Rzn MYSQL_DATABASE: docker TZ: Asia/Shanghai ports: - "3306:3306" network_mode: "host" # networks: # - mynet ``` conf.d/mysqld.cnf ``` # https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html [mysqld] sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" #bind_address=127.0.0.1 symbolic_links=0 default_storage_engine=INNODB character_set_server=utf8mb4 collation_server=utf8mb4_unicode_ci interactive_timeout=86400 wait_timeout=86400 max_connections=2000 #log_timestamps=system #log_output=file #log_error=/var/lib/mysql/logs/error.log #log_slow_admin_statements=YES #slow_query_log=ON #slow_query_log_file=/var/lib/mysql/logs/slow.log #long_query_time=1 #log_queries_not_using_indexes=ON #log_throttle_queries_not_using_indexes=0 binlog_format=Mixed server_id=2019 expire_logs_days=7 log_bin=/var/lib/mysql/mysql-binlog log_bin_index=/var/lib/mysql/mysql-binlog.inde ``` #### 查看日志 ```bash docker logs -f --tail 100 openresty | grep --line-buffered -v "/columbia/app/v2/blueReport" --line-buffered:确保每行日志实时处理(避免缓冲延迟,适合配合 -f 实时跟踪场景) -v(invert match):反向匹配,即排除包含后续字符串的行。 ``` ##### 日志1分钟内导出 ```bash docker logs --since 1m new-data > out.txt ``` ## 前端 #### 快速删除node_module ```txt npm install rimraf -g rimraf node_modules ``` #### elementUI覆盖样式 只作用在当前vue页面,tableData是自定义的父级css样式。 ```vue ``` #### ElementPlus报警告 ElementPlusError: [Util] binding value must be a string or number. ```bash npm uninstall element-plus npm install -s element-plus@^1.0.2-beta.54 yarn remove element-plus yarn add element-plus@^1.0.2-beta.54 ``` #### 直接显示HTML片段 ```html
        
        // HTML 片段
    
``` #### JS Array类型互转 ```js let x1 = ['1','2']; console.log(x1); //["1", "2"] x1 = x1.map(Number); console.log(x1); //[1,2] ``` ## 后端 #### Idea tomcat 乱码 ```txt -Dfile.encoding=UTF-8 ``` #### 本地安装maven依赖 ``` mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=F:\oracle\ojdbc14-10.2.0.4.0.jar ``` #### idea 开启services窗口 法1:.idea 中替换RunDashboard ```xml ``` 法2:点击edit configuration 选择templates右下角的configuration available in services, 点击+号添加Spring Boot #### idea 报add library to classpath maven - Ignore Files 里面 项目上面的勾去掉 ## SQL #### TiDB配置 ```txt DB 2台 16核 32GB内存 200GB外存 PD 3台 8核 16GB内存 200GB外存 存储(KV+Flash) 3台 32核 32GB内存 500GB外存 监控 1台 8核 16GB ``` #### Mysql 死锁 ```sql -- 查询事务死锁,看距离trx_started时间过长的 select * from information_schema.innodb_trx -- 杀死事务 kill 392857 ``` #### Oracle 慢查询 ```sql select * from (select sa.SQL_TEXT "执行 SQL", sa.EXECUTIONS "执行次数", round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间", round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间", sa.COMMAND_TYPE, sa.PARSING_USER_ID "用户ID", u.username "用户名", sa.HASH_VALUE from v$sqlarea sa left join all_users u on sa.PARSING_USER_ID = u.user_id where sa.EXECUTIONS > 0 order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc) where rownum <= 50 order by 执行次数 desc, 总执行时间 desc; ``` #### Oracle 死锁 ```sql -- 通过查询语句查询是否有死锁的语句,STATUS未active表示存在死锁 select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object) -- 通过查询语句查询具体死锁的语句 select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object)) -- 解决死锁 -- 1:查得到死锁的语句(通过上述中2中的sql查询 直接执行死锁语句即可 -- 2:查询不到死锁的语句 -- (1:首先执行 select * from v$session t1, v$locked_object t2 where t1.sid = t2.SESSION_ID; -- (2:杀掉死锁的进程 SID,SERIAL alter system kill session '41,43812'; ``` #### Mysql DBLINK ```sql # 查看federated引擎是否启动 show engines; # 未启动修改my.ini,在[mysqld]下加一行 federated # 创建命令1:密码不带@符号 CREATE TABLE `dblink_sys_lang` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `is_del` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', `description` varchar(255) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=FEDERATED CONNECTION='mysql://root:jack%2021#2@6XJH@192.168.0.141:3306/jack_dms/sys_lang'; # 创建命令2:密码带@符号 CREATE SERVER server_jack_base FOREIGN DATA WRAPPER mysql OPTIONS (USER 'root',PASSWORD 'jack%2021#2@6XJH', HOST '192.168.0.141', PORT 3306, DATABASE 'jack_base'); CREATE TABLE `dblink_sys_lang` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `is_del` tinyint(1) DEFAULT '0' COMMENT '逻辑删除', `description` varchar(255) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`id`) ) ENGINE=FEDERATED CONNECTION='server_jack_dms/sys_lang'; ``` #### MySQL导入导出 ```mysql mysqldump -h127.0.0.1 -uecology -p -R --triggers --default-character-set=utf8 ecology > ecology.sql mysql -u root -p --default-character-set=utf8 ecology= r.remind_time ) rank_num FROM template_assign_send_record r ``` #### 指定规则排序SQL mysql ```sql ORDER BY year desc, FIELD(stage,'下半年,上半年,四,三,二,一'), ``` sqlserver ```sql ORDER BY year desc, CHARINDEX(stage,'下半年,上半年,四,三,二,一'), ``` #### MySQL数字字符串排序 ```mysql select * from table where 1 order by id*1 desc; select * from table where 1 order by id+0 desc; ``` #### 查询当天数据总量 ```sql -- 查询当天数据总量 select count(*) from sys_audit_log where to_days(create_time) = to_days(now()); ``` #### 查询两天内的数据 ```sql select count(*) from sys_audit_log where NOW() BETWEEN create_time AND DATE_ADD(create_time,INTERVAL 1 DAY); ``` #### 原有日期增加一段时间 ```sql -- 原有日期增加一段时间 update bac_timetable set class_date = date_add(class_date, INTERVAL 2 ); ``` #### 更新ID为行号 ```sql update tb a set a.id = rownum; ``` #### 删除新增时间靠前的数据 ```sql DELETE TB WHERE ID in(SELECT a.ID FROM TB a JOIN (select field1, MIN(create_time) INS_DATE from TB group by field1 having count(field1) > 1) b ON a.create_time = b.create_time AND a.field1 = b.field1 ``` #### 递归获取6个月内日期 ```mysql SELECT DATE_FORMAT(@cdate := date_add( @cdate, INTERVAL - 1 MONTH ),'%Y-%m') as d FROM ( SELECT @cdate := date_add(CURDATE(), INTERVAL 1 MONTH ) FROM ods.ods_dms_store LIMIT 6)date ``` #### Mysql group_concat长度限制 ```sql show variables like 'group_concat_max_len'; show variables like 'max_allowed_packet'; set global group_concat_max_len = 102400; set global max_allowed_packet = 8388608; ``` #### Mysql 授权 ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by '123456' WITH GRANT OPTION; -- 刷新权限表 flush privileges; ``` #### Mysql Binlog 转 sql ```bash mysqlbinlog.exe --base64-output=decode-rows -v mysql-bin.000132" --result-file=mysql000132.sql ``` #### 用一张表更新另一张表的数据 ```sql update tb1, tb2 set tb1.name = tb2.name and tb1.age = tb2.age where tb1.id = tb2.id ``` #### JSON语法 [MySQL对JSON数据的增删改查 – 源码巴士 (code84.com)](https://code84.com/120031.html) ##### json语法 ```sql -- 更新key,会覆盖 UPDATE act_def_formdata SET FORM_DATA = JSON_SET(FORM_DATA, '$."bg-gx"', '') where id=1; -- 删除key UPDATE act_def_formdata SET FORM_DATA = JSON_REMOVE(FORM_DATA, '$."bg-gx"') where id = 1; ``` ##### json列表取出 ```sql SELECT JSON_EXTRACT(field, '$[*].name') FROM tb -- ["小明", "小红"] SELECT REPLACE ( REPLACE ( REPLACE ( JSON_EXTRACT ( field, '$[*].name' ), '\"', '' ), '[', '' ), ']', '') FROM tb -- 小明,小红 ``` #### Oracle ##### 导入、导出命令 ```sql ip导出方式: exp demo/demo@127.0.0.1:1521/orcl file=f:/f.dmp full=y exp demo/demo@orcl file=f:/f.dmp full=y imp demo/demo@orcl file=f:/f.dmp full=y ignore=y ``` ##### 序列 ```sql --新建序列 create sequence FMI_ITEMGROUP_SEQ minvalue 1 --增长最小值 maxvalue 999999999999 --增长最大值,也可以设置NOMAXvalue -- 不设置最大值 start with 1 --从101开始计数 increment by 1 --自增步长为1 cache 50 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---NOCACHE防止跳号 cycle; --循环,当达到最大值时,不是从start with设置的值开始循环。而是从1开始循环 ``` ##### DBLink ```sql -- 查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; -- 创建dblink 特殊字符密码加双引号 create database link ORACLEAPS_PPS connect to JACK_APS identified by JACK_APS using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.102)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))'; -- MYSQL dblink create public database link MYSQLAPS_MEVE connect to "root" identified by "th3Zyawx<%5D" using 'newmes'; -- 删除dblink drop database link ORACLEAPS_PPS; ``` ##### 查询两张表不同的数据 minus 相当于减,两表列数要保持一致 ```sql select * from db1 minus select * from db2 ``` #### 触发器 ```sql -- 查看所有触发器 SHOW TRIGGERS IN 库名; -- 删除触发器 DROP TRIGGER 库名.触发器名称; -- oracle查看触发器创建失败命令 select * from user_errors where type = 'TRIGGER' and name = '名称'; ``` #### 存储引擎 ```sql -- oracle CREATE OR REPLACE PROCEDURE SP_CLEAR_SEEBORD_BOM IS BEGIN -- 具体需要执行的SQL commit; ``` #### SQL优化 ##### IS NULL 或者 IS NOT NULL ```sql select * from db where IFNULL(field, 'NULL') = 'NULL' ``` ##### 统计不同状态数据 ```sql select SUM(CASE WHEN field >= 1 THEN 1 ELSE 0 END) doingTotal, SUM(CASE WHEN field2 < 1 THEN 1 ELSE 0 END) doneTotal from db ``` ##### 取消日期函数(查询昨天数据) ```sql SELECT * FROM table WHERE start_time >= CURDATE() - INTERVAL 1 DAY AND start_time < CURDATE() ``` ##### 自定义函数语法 ```sql CREATE DEFINER=`root`@`%` FUNCTION `fun_format_datestamp`(`dateStamp` decimal(10, 5)) RETURNS varchar(50) CHARSET utf8mb4 BEGIN #Routine body goes here... # dateStamp 单位是分钟 IF(dateStamp > (24*60)) then SET @day = dateStamp / (24 * 60); RETURN concat(truncate(@day, 2), '天'); ELSEIF(dateStamp > 60) then SET @hour = dateStamp / 60; RETURN concat(truncate(@hour, 2), '小时'); END IF; RETURN concat(truncate(dateStamp, 2), '分钟'); END ``` ## 通用 #### Git 提交规范 ```txt feature:新功能(feature) fixed:修补bug docs:文档(documentation) style: 格式(不影响代码运行的变动) refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试 chore:构建过程或辅助工具的变动 ``` #### Git ```bash # 初始化一个git仓库 git init # 克隆项目到本地 git clone 被克隆项目的url # 显示所有本地分支 git branch # 切换到分支 git checkout 分支名 # 新建分支并切换到该分支 git checkout -b 分支名 # 把工作时的所有变化提交到暂存区,不包括被删除的文件 git add . # 显示暂存区状态 git status # 添加提交信息 git commit -m '提交信息' # 推送内容到GitHub远程仓库 git push # 推送内容到GitHub远程仓库的指定分支 git push origin 分支名 # 远程回退 git reset --soft # 重置到某个提交(建议Idea中操作) git push origin --force-with-lease # 推荐,避免覆盖他人提交 # 最近五次提交日志 git log -n 5 ``` #### npm ```bash # 安装模块到项目目录下 npm install moduleName # -g的意思是将模块安装到全局 npm install -g moduleName # --save的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖,-S位该命令的缩写 npm install -save moduleName # Vue项目运行 npm run 脚本名称 ``` #### Pyhton 查询包依赖 ```bash pip show pandas ``` 查看pip install 安装位置 ```bash python -m site ``` #### Nginx ##### 文件大小限制 ```bash client_max_body_size 300m; #设置nginx能处理的最大请求主体大小 client_body_buffer_size 10m; #请求主体的缓冲区大小 ``` ##### 相关命令 ```bash # 帮助信息 nginx -h # 启动nginx start nginx # 关闭nginx,完整有序的停止nginx,保存相关信息 nginx -s quit # 关闭nginx,快速停止nginx,可能并不保存相关信息 nginx -s stop # 重新载入nginx,当配置信息修改需要重新加载配置时使用 nginx -s reload # 测试nginx配置文件是否正确 nginx -t -c filename ``` ##### 代理路径 ```conf # 添加一级目录代理 location /api { proxy_pass http://IP:端口/; } # 原目录代理 location /api { proxy_pass http://IP:端口/api; } location /api { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://IP:端口; } # websocket location /websocket { proxy_pass http://IP:端口/websocket; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; } ``` ##### Nginx优先级(从高到低) 同优先级,匹配程度较高先匹配;匹配程度一样,写在前面先匹配 ```html # 路径等于/a location = /a {} # 以/a开头 location ^~ /a {} # 正则 location ~ /\w {} # location /a {} ``` ##### 基本参数配置 ```tsconfig # 文件大小限制 client_max_body_size 10m; ``` ##### 增加模块 ```bassh ./configure --prefix=/usr/local/nginx --with-http_gzip_static_module --with-http_ssl_module ``` ##### nginx 反向代理权限问题 ```bash [root@www tengine]# ps aux | grep "nginx: worker process" | awk '{print $1}' nobody root [root@www tengine]# chown -R nobody:nobody fastcgi_temp/ ``` #### RabbitMQ 命令 ```bash -- 后台启动服务 ./rabbitmq-server -detached -- 启动前端管理页面 ./rabbitmq-plugins enable rabbitmq_management -- 列表 rabbitmqctl.bat list_users -- 修改密码 rabbitmqctl change_password guest guest -- 新增用户 rabbitmqctl add_user root root -- 授权 rabbitmqctl set_permissions -p / root ".*" ".*" ".*" -- 设置管理员角色 rabbitmqctl set_user_tags root administrator ``` #### VScode 下载太慢 az764295.vo.msecnd.net 换成 vscode.cdn.azure.cn #### Vim语法 ```txt j:向下 k:向上 h:向左 l:向右 w:下一个单词 b:上一个单词 e:单词尾部 dd:剪切行 p:粘贴 u:撤回 yy:复制一行 v:选中 ``` #### ffmpeg语法 ```bash # 提取音频 ffmpeg -i input.mp4 -acodec aac -vn output.aac ffmpeg -i input.mp4 -acodec libmp3lame -vn output.mp3 # 视频剪切 ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4 ffmpeg -ss 00:00:15 -t 00:00:05 -i output.mp3 -vcodec copy -acodec copy slice-output.mp3 # 视频信息 ffmpeg -i video.avi ``` #### Yapi ```bash version: "3.5" services: mongodb: container_name: yapi-mongo image: mongo:latest restart: always ports: - 27015:27017 environment: - MONGO_INITDB_ROOT_USERNAME=lima - MONGO_INITDB_ROOT_PASSWORD=lima2025 volumes: - ./mongodb_data:/data/db networks: - yapi_net command: - "--auth" yapi: image: jayfong/yapi:latest container_name: yapi restart: always ports: - 3003:3000 environment: - YAPI_ADMIN_ACCOUNT=lima@yapi.com - YAPI_ADMIN_PASSWORD=lima@2025 - YAPI_CLOSE_REGISTER=true - YAPI_DB_SERVERNAME=mongodb - YAPI_DB_PORT=27017 - YAPI_DB_DATABASE=yapidb - YAPI_DB_USER=lima - YAPI_DB_PASS=lima2025 - YAPI_DB_AUTH_SOURCE=admin #- YAPI_DB_CONNECT_STRING="mongodb://lima:lima@2025@mongodb:27017/yapidb?authSource=admin" - YAPI_MAIL_ENABLE=false - YAPI_LDAP_LOGIN_ENABLE=false - YAPI_PLUGINS=[] networks: - yapi_net depends_on: - mongodb networks: yapi_net: driver: bridge ``` ## 问题排查 #### 安卓、苹果时间兼容问题 ```js yyyy/mmmm/dddd 格式的日期苹果和安卓都兼容 yyyy-mmmm-dddd 格式的日期苹果不兼容 结果(都转成/分割就可以) let TimeStamp = new Date('2020-10-13 15:44:13'.replace(/-/g, '/')).getTime(); ``` #### nginx代理情况下文件无法打开 ```txt proxy_headers_hash_max_size 512; proxy_headers_hash_bucket_size 128; client_max_body_size 300m; #设置nginx能处理的最大请求主体大小 client_body_buffer_size 10m; #请求主体的缓冲区大小 large_client_header_buffers 4 16k; # 读取大型客户端请求头的缓冲区的最大数量和大小 proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; proxy_buffer_size 2024k; proxy_buffers 16 2024k; proxy_busy_buffers_size 4048k; proxy_temp_file_write_size 4048k; #keepalive_timeout 0; keepalive_timeout 65; ``` #### Dify 并发奔溃 ```yml #docker-compose.yml api: image: langgenius/dify-api:1.7.1 restart: always deploy: replicas: 10 ``` ## 博客记录 #### kkfile 安装 [kkFileView安装及使用——文件预览解决方案_西凉的悲伤的博客-CSDN博客](https://blog.csdn.net/qq_33697094/article/details/126076565) #### MySQL+Redis使用场景优点: #### Redis主从复制 https://blog.csdn.net/qq_47905850/article/details/106630610?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-5.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-5.control #### Mysql读写分离 #### ShardingJDBC 分表分库 https://blog.csdn.net/u010391342/article/details/89526366 #### SVN https://blog.csdn.net/xiaownezi666/article/details/83591141 #### 基于kaptcha实现后端验证码 https://blog.csdn.net/qq_37317845/article/details/102372149?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control #### alibaba开源框架 https://www.cnblogs.com/javastack/p/13079521.html #### Yapi https://hellosean1025.github.io/yapi/ #### Centos配置ali yml源 https://blog.csdn.net/lglspace/article/details/100576563 #### 小程序UI框架选型 https://www.jianshu.com/p/2e94c3b3f11c #### 微信小程序订阅信息 https://blog.csdn.net/buyiXS/article/details/103679786?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control&dist_request_id=6db4f714-ef00-49c1-a978-4d6bcaab90df&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.control #### 导Java堆栈信息,CPU占用排查 https://www.cnblogs.com/lovelsl/articles/14170648.html #### Vue周边生态 https://blog.csdn.net/badaaasss/article/details/86129393 #### Arthas使用说明 https://www.cnblogs.com/chengxy-nds/p/12270913.html #### Arcgis 基本操作 https://blog.csdn.net/idomyway/article/details/77746190 #### windows Server 离线安装 .net Framework3 https://blog.csdn.net/andyguan01_2/article/details/100697150 #### 前端VUE+ElementUI导出复杂(多级表头、合并单元格)excel表格 el-table转为excel导出] https://www.cnblogs.com/Awchao/p/14143385.html #### Jrebel热部署 https://www.cnblogs.com/zkx4213/p/13323804.html?utm_source=tuicool #### Yarn https://blog.csdn.net/yw00yw/article/details/81354533 #### 前端动态路由 https://segmentfault.com/a/1190000015419713 #### Jenkins远程发布 https://blog.csdn.net/lypgcs/article/details/104291227 https://blog.csdn.net/u012009613/article/details/87626033 #### Netlify github page加速 https://www.cnblogs.com/37Y37/p/12551839.html #### PHP安装 https://www.cnblogs.com/yongtaiyu/archive/2013/02/25/2932055.html #### IF.SVNAdmin安装 https://blog.csdn.net/weixin_38771884/article/details/102833054 #### apache安装 https://blog.csdn.net/fuhanghang/article/details/104405001 #### php基于nginx运行 https://blog.csdn.net/qq1623803207/article/details/109807613 #### IDEA 合并分支代码 https://blog.csdn.net/studying0419/article/details/83747060 #### IDEA 2020.1 破解教程 https://www.cnblogs.com/KdeS/p/13600191.html #### Jenkins 发布到windows https://blog.csdn.net/qq_24295577/article/details/108613684 #### Jenkins修改工作空间 https://blog.csdn.net/u014221090/article/details/80566434 https://www.jianshu.com/p/ef4caa55188f #### Jenkisn 权限控制 https://blog.csdn.net/weixin_42867972/article/details/105565103 #### 基于 Element UI可换行的Setps步骤条 https://blog.csdn.net/chysxslt/article/details/111868405 #### idea 汉化插件 [idea 201.668.113的Chinese ​(Simplified)​ Language Pack EAP的安装包_我要去腾讯的博客-CSDN博客](https://blog.csdn.net/qq_44295125/article/details/107835612) #### 前端增加路径 [VUE项目增加前缀访问(包括页面及静态资源)_vue项目在nginx上加固定前缀,路由加前缀,静态资源加前缀-CSDN博客](https://blog.csdn.net/liutao_962464/article/details/134293026) ## 文档 #### 小程序消息推送 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html #### 小程序登录 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html