首页
关于
推荐
奈飞账号
摸鱼信息
Search
1
🎥购买Netflix奈飞账号获取低价渠道Netflix账号合租完全指南2024
549 阅读
2
最棒的开源OSS存储 MinIO,真香!
440 阅读
3
使用docker搭建自己的邮箱服务器收发邮件
386 阅读
4
手淫如何增强你的免疫系统
358 阅读
5
mysql开启事件调度器
342 阅读
生活杂谈
技术分享
读书笔记
互联网发现
阅读发现
登录
Search
标签搜索
docker
开发
tool
教程
windows
开源oss存储
MinIO
git
http代理
邮件服务
mail
mysql
sql
spring
读书
阅读
读书笔记
Linux
Shell
银行卡
https://www.ziyuzile.cn
累计撰写
21
篇文章
累计收到
4
条评论
首页
栏目
生活杂谈
技术分享
读书笔记
互联网发现
阅读发现
页面
关于
推荐
奈飞账号
摸鱼信息
搜索到
14
篇与
的结果
2019-03-26
常用linux操作命令
su user : 切换用户 su - suer : 切换用户并启用单前用户的环境变量 ps aux 或 ps -ef : 查看所有进程 ps aux | grep exe 或 ps -ef | grep exe : 查看某个系统进程 netstat -nap | grep node 查看端口占用情况 | : 管线符,让上一次的输出内容作为下次输入内容的 kill -15 pid : 强制杀死进程 kill -9 pid : 暴力杀死进程 cp file dir : 复制 cp file dir/newfilename : 复制并且重命名 cp -r dir targetdir/ : 将目录递归复制到新目录中 rm file : 删除 rm -f file 不进入回收站删除 rm -rf dir : 强制递归删除 free : 查看内存KB free -m : 查看内存M ifconfig : 查询IP地址 tar -xvzf filename : 解压到单前文件夹 tar -xvzf filename -C dir: 解压到某个文件夹 tar -cvf filename.tar dir : 打包 tar -cvzf filename.tar.gz file1 file2 : 压缩打包 zip filename.zip file1 file2 : 打包 unzip filename.zip : 解压 unzip filename.zip -d dir : 解压到某个文件夹 ----------------war包操作 命令start--------------- 1.打包 jar -xvf project.war /project_a 说明: -c 创建war包 -v 显示过程信息 -f 指定 JAR 文件名,通常这个参数是必须的 -M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数 -0 这个是阿拉伯数字,只打包不压缩的意思 2. 解压 jar -xvf project.war ----------------war包操作 命令end--------------- mkdir dirname : 新建目录,以.开始都进行隐藏文件 mkdir -p dirname/dirname : 新建目录多个 touch filename : 新建文件 mv filename newfilename : 重命名 mv filename dir/ : 移动文件到目录 cat file : 查看文件 more file : 分页查看文件 tail -f file : 滚屏查看日志 df -h : 查看挂载的磁盘 fdisk -l : 查看磁盘信息 systemctl stop firewalld 关闭contos7默认防火墙 systemctl disable firewalld 失效 yum -y install iptables-services 安装iptables防火墙 vi /etc/sysconfig/iptables 编辑iptablse文件 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 添加规则 service iptables restart 重启iptables服务 clear : 清屏 ----------------vi 命令--------------- 进入vi的命令 vi filename : 打开或新建文件,并将光标置于第一行首 vi +n filename : 打开文件,并将光标置于第n行首 vi + filename : 打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 ---移动光标类命令--- l : 光标移至屏幕最后行 $ : 光标移至当前行尾 ---插入文本类命令--- i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行 ---删除命令--- ndw或ndW:删除光标处开始及其后的n-1个字 do:删至行首 d$:删至行尾 ndd:删除当前行及其后n-1行 x或X:删除一个字符,x删除光标后的,而X删除光标前的 Ctrl+u:删除输入方式下所输入的文本 ---保存退出--- zz 保存并退出 :w filename 写入文件 :W 写入文件 :x 保存(如果当前文件修改过)并退出 :q! 不保存文件,直接退出 :q 退出vi :wq : 保存并退出 :wq! 强制保存和退出 常用命令: pwd : 查看单前所在目录 cd 目录 : 打开某个目录 cd : 直接返回单前用户的+目录 ls : 查看单前目录的信息 ls -l : 查询单前目录的详情信息 或者 ll ls -a : 查看目录文件,包括隐藏文件 文件权限: -/d rwx rwx rwx 文件/目录 单前用户权限 组权限 其他用户的权限 r w x 读 写 执行 1 1 1 二进制权限 chmod 文件夹/文件 +权限单词 : 添加权限 chmod 文件夹/文件 -权限单词 : 删除权限 chown -R user:group dir : 将某个目录给定某个用户 --------------用户------------ groupadd groupname : 新建分组 useradd username -g groupname : 新建用户分配到某一个分组 passwd username : 设置用户密码 系统环境变量: /etc/profile 配置jdk export JAVA_HOME=/usr/local/jdkpath export PATH=$JAVA_HOME:$PATH #多个环境变量使用:隔开 source /etc/profile : 使环境变量生效 reboot 或 init 6 : 重启服务器 halt 或 init 0 或 shutdown -h now : 关机 配置tomcat 配置网络: /etc/sysconfig/network-scripts/ifcfg-eth0 : 网卡0 自动获取ip地址: DEVICE=eth0 #TYPE=Ethernet #UUID=f2287a85-8005-48b8-832a-7bef8ff40cdc ONBOOT=yes NM_CONTROLLED=no BOOTPROTO=dhcp HWADDR=00:0C:29:4B:13:22 #DEFROUTE=yes #PEERDNS=yes #PEERROUTES=yes #IPV4_FAILURE_FATAL=yes #IPV6INIT=no #NAME="System eth0" service network restart : 重启 service network stop : 停止 service network start : 启动 配置DNS: /etc/resolv.conf centos 6.6 安装桌面: yum groupinstall "Desktop" yum groupinstall "X Window System" -y yum groupinstall "Chinese Support" yum -y install lrzsz rz -E 上传文件 sz 文件名 下载 查找某个字符串所在位置 grep -Irn 'LVVDB21B0HD194403' *.xml find .|xargs grep -ri "Z297010080120180000017" -l 目录读权限可以列出文件名,目录执行权限可以访问目录里内容 执行权限对文件和文件夹的意义不一样 查看权限命令 查看目录的相关权限可以采用命令ls -lD,或者直接用ls -la 如 ls -l opt //这里表示查看opt目录 修改权限命令 chmod 777 文件名 1.chmod 577 /home/stuser -R 2.umask -p 0200 3.chown XXXX YYYY (XXXX 为用户名 YYYY为文件名) 权限列表 -rw------- (600) 只有所有者才有读和写的权限 -rw-r--r-- (644) 只有所有者才有读和写的权限,组群和其他人只有读的权限 -rwx------ (700) 只有所有者才有读,写,执行的权限 -rwxr-xr-x (755) 只有所有者才有读,写,执行的权限,组群和其他人只有读和执行的权限 -rwx--x--x (711) 只有所有者才有读,写,执行的权限,组群和其他人只有执行的权限 -rw-rw-rw- (666) 每个人都有读写的权限 -rwxrwxrwx (777) 每个人都有读写和执行的权限
2019年03月26日
280 阅读
0 评论
0 点赞
2018-04-03
mysql in exists
如果查询的两个表大小相当,那么用in和exists差别不大。无论那个表大,用not exists都比not in要快。详细分析exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只要能返回),条件就为真,返回当前loop到的这条记录,反之如果exists里的条 件语句不能返回记录行,则当前loop到的这条记录被丢弃,exists的条件就像一个bool条件,当能返回结果集则为true,不能返回结果集则为 false如下:select * from user where exists (select 1);对user表的记录逐条取出,由于子条件中的select 1永远能返回记录行,那么user表的所有记录都将被加入结果集,所以与 select * from user;是一样的又如下select * from user where exists (select * from user where userId = 0);可以知道对user表进行loop时,检查条件语句(select * from user where userId = 0),由于userId永远不为0,所以条件语句永远返回空集,条件永远为false,那么user表的所有记录都将被丢弃not exists与exists相反,也就是当exists条件有结果集返回时,loop到的记录将被丢弃,否则将loop到的记录加入结果集总的来说,如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件 in查询相当于多个or条件的叠加,这个比较好理解,比如下面的查询select * from user where userId in (1, 2, 3);等效于select * from user where userId = 1 or userId = 2 or userId = 3;not in与in相反,如下select * from user where userId not in (1, 2, 3);等效于select * from user where userId != 1 and userId != 2 and userId != 3;总的来说,in查询就是先将子查询条件的记录全都查出来,假设结果集为B,共有m条记录,然后在将子查询条件的结果集分解成m个,再进行m次查询值得一提的是,in查询的子条件返回结果必须只有一个字段,例如select * from user where userId in (select id from B);而不能是select * from user where userId in (select id, age from B);而exists就没有这个限制下面来考虑exists和in的性能考虑如下SQL语句1: select * from A where exists (select * from B where B.id = A.id); 2: select * from A where A.id in (select id from B);查询1.可以转化以下伪代码,便于理解for ($i = 0; $i < count(A); $i++) { $a = get_record(A, $i); #从A表逐条获取记录 if (B.id = $a[id]) #如果子条件成立 $result[] = $a;}return $result;大概就是这么个意思,其实可以看到,查询1主要是用到了B表的索引,A表如何对查询的效率影响应该不大假设B表的所有id为1,2,3,查询2可以转换为select * from A where A.id = 1 or A.id = 2 or A.id = 3;这个好理解了,这里主要是用到了A的索引,B表如何对查询影响不大下面再看not exists 和 not in1. select * from A where not exists (select * from B where B.id = A.id); 2. select * from A where A.id not in (select id from B);看查询1,还是和上面一样,用了B的索引而对于查询2,可以转化成如下语句select * from A where A.id != 1 and A.id != 2 and A.id != 3;可以知道not in是个范围查询,这种!=的范围查询无法使用任何索引,等于说A表的每条记录,都要在B表里遍历一次,查看B表里是否存在这条记录故not exists比not in效率高mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询。一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。这个是要区分环境的。 如果查询的两个表大小相当,那么用in和exists差别不大如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。 例如:表A(小表),表B(大表)1: select * from A where cc in (select cc from B) 效率低,用到了A表上cc列的索引; select * from A where exists(select cc from B where cc=A.cc) 效率高,用到了B表上cc列的索引。 相反的 2: select * from B where cc in (select cc from A) 效率高,用到了B表上cc列的索引; select * from B where exists(select cc from A where cc=B.cc) 效率低,用到了A表上cc列的索引。not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以 无论那个表大,用not exists都比not in要快。 in 与 =的区别select name from student where name in ('zhang','wang','li','zhao'); 与 select name from student where name='zhang' or name='li' or name='wang' or name='zhao' 的结果是相同的。文章转自Franklin的博客
2018年04月03日
265 阅读
0 评论
0 点赞
2018-03-22
spring动态注册bean
某些情况下静态的配置信息无法满足系统需求,需要根据静态配置动态生成bean注册到spring中。为啥要动态注册bean?某些情况下静态的配置信息无法满足系统需求,需要根据静态配置动态生成bean注册到spring中。在写一些工具的时候会用到的,原本打算写一个类似 Fegin 的小组件。于是有了这个研究动机。但后来网上找到了我想要的开源项目,就不重复造轮子了,但是技术点还是研究了一下。 感兴趣的可以去看看这个项目:Forest啥时候注册bean?太晚了肯定不行啊,@Autowired不等人,在Autowired注入之后注册肯定报错啊,想都不要想。那么就要在Autowired之前。咋注册呢?Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。思路一搞一个类实实现BeanPostProcessor,ApplicationContextAware接口 让它早于AutowiredAnnotationBeanPostProcessor运行。BeanPostProcessor,可以在spring容器实例化bean之后,在执行bean的初始化方法前后,添加一些自己的处理逻辑。but这个我没搞出来不知的问题出在哪里,有机会再研究研究。思路二搞一个类实现BeanFactoryPostProcessor接口.这是个啥接口呢?实现该接口,可以在spring的bean创建之前,修改bean的定义属性。不废话直接贴代码。public class MyBeanFactoryPostProcessor implements ApplicationContextAware, BeanFactoryPostProcessor { private static ApplicationContext applicationContext; private String packageS; public String getPackageS() { return packageS; } public void setPackageS(String packageS) { this.packageS = packageS; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { MyBeanFactoryPostProcessor.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String beanName) { return applicationContext.getBean(beanName); } public static <T>T getBean(String beanName , Class<T>clazz) { return applicationContext.getBean(beanName , clazz); } /** * 此方法会在bean初始化完成但未实例化时调用 */ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { //beanFactory 也可以拿到当前系统从已经初始化好的bean,也可以做一些修改 //设置了扫描路径则则可以根据扫描包扫描相应的注解 System.out.println("packageS==================="+packageS); //获取BeanFactory DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory(); //模拟扫描到的bean,用动态代理等等方式创建 //创建bean信息. BeanDefinitionBuilder beanDefinitionBuilder =BeanDefinitionBuilder.genericBeanDefinition(RestBean.class); beanDefinitionBuilder.addPropertyValue("name","张三"); //动态注册bean. defaultListableBeanFactory.registerBeanDefinition("restBean",beanDefinitionBuilder.getBeanDefinition()); //注册进spring上下文的bean可以获取一下看看 BeanDefinition bd = beanFactory.getBeanDefinition("restBean"); } } javaConfig@Configuration public class Config { @Bean public MyBeanFactoryPostProcessor getMyBeanFactoryPostProcessor() { MyBeanFactoryPostProcessor sss = new MyBeanFactoryPostProcessor(); sss.setPackageS("com.xxxx"); return sss; } } 现在就可以在spring管理的任何类中使用了 @Autowired RestBean restBean;代码地址:BeanLoad 知乎上看到一个专栏,学到不少东西。有兴趣可以关注一下。晓风轻
2018年03月22日
195 阅读
0 评论
0 点赞
2018-02-14
mysql开启事件调度器
mysql event 应用在系统管理或者数据库管理中,需要经常周期性的执行某一个命令或者SQL语句的情况。查看是否开启mysql> SHOW VARIABLES LIKE '%sche%';设置开启 mysql>SET GLOBAL event_scheduler = ON;事件调度器event_scheduler的语法:a. 事件调度器event_scheduler的语法主要包括创建,修改,删除,新建一个event后,如果还未删除,我们可以在mysql的information_schema下的EVENTS表中查到该event。创建event(CREATE EVENT) 语法:CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; 说明:event_name :创建的event名字(唯一确定的); ON SCHEDULE:计划任务 schedule: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT和EVERY 语法:AT timestamp [+ INTERVAL interval] | EVERY interval [STARTS timestamp] [ENDS timestamp] interval: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}(具体说明请参考手册); [ON COMPLETION [NOT] PRESERVE]: 可选项,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE则不会drop掉 ; [COMMENT 'comment'] :可选项,comment 用来描述event;相当注释,最大长度64个字节 [ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改 DO sql_statement: 需要执行的sql语句(可以是复合语句); 例子: CREATE EVENT e_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.' DO DELETE FROM site_activity.sessions; (每隔一小时删除session表)注意使用复用语句的时候记得使用分隔符;而且sql语句是由限制,这种限制跟函数fuction和触发器 trigger中的sql语句限制是一样的,具体是指:LOCK TABLES; UNLOCK TABLES;CREATE EVENT(#bug 18896);ALTER EVENT(#bug 18896);LOAD DATA;CREATE EVENT 是不可预处理的;CREATE EVENT在存储过程中使用时合法的;CREATE EVENT不可以再嵌入式的embedded mysql数据中使用。b. 修改event(ALTER EVENT)语法:ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO sql_statement] 说明:语句中的ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE, and DO 与CREATE EVENT中的完全一致 例子: 先创建一个event: CREATE EVENT myevent ON SCHEDULE EVERY 6 HOUR COMMENT 'A sample comment.' DO UPDATE myschema.mytable SET mycol = mycol + 1; 修改1: ALTER EVENT myevent ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + 4 HOUR; (将原来的6小时执行一次,修改成4小时后每12小时执行一次) 修改2: ALTER EVENT myevent DISABLE; (将默认的ENABLE修改为 DISABLE) 注意:修改event仅仅对已经存在的event起作用c. 删除eventDROP EVENT [IF EXISTS] event_name
2018年02月14日
342 阅读
0 评论
0 点赞
1
2
3