1. react的注意事项
  • 文件后缀是 js/jsx
  • 组件名必须大写
  • js/jsx 中出现()代表里面开始写html语句
  • html中{}中表示里面是js语句
  • export default App 也可以写到class前 如 export default class App extends React.Component

​/**

  • jsx : htmlFor -> label for eg:<label htmlFor="username">usname</label>
  • jsx : className -> class e.g
  • style : {{}} eg.<div className="wtf" style={{ backgroundColor:'skyblue'}}></div>

*/

  1. 今天写Js代码,在模块1中export,在模块2中import报错:Cannot use import statement outside a module,解决方法是 在package.json里添加,解决方法:​​https://blog.csdn.net/Makasa/article/details/120679412​
"type": "module"
  1. Java oom的处理

方法一:

命令:jmap -dump:format=b,file=heap.bin

file:保存路径及文件名

pid:进程编号(windows通过任务管理器查看,​​linux​​通过ps aux查看)

dump文件可以通过MemoryAnalyzer(MAT)分析查看,可以查看dump时对象数量,内存占用,线程情况等。

方法二:让JVM在遇到OOM(OutOfMemoryError)时生成Dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/heap/dump


  1. shell脚本生成 100到200之间的数


for i in $(seq 100 200)
do
echo $i
done
  1. mysql SQL for循环 mysql for 循环
  2. ​delimiter $$drop procedure if exists test $$ /*替换成分隔符*/ create procedure test() #创建无参存储过程,名称为test begin declare i int; #申明变量 set i = 0; #变量赋值 while i < 10 do #结束循环的条件: 当i大于10时跳出while循环 #insert into xxx.test values (i); #往test表添加数据 #INSERT INTO `xxx`.`test` (`id`) VALUES (i); #select now(); SELECT * FROM xxx.test where id = i; set i = i + 1; #循环一次,i加一 end while; #结束while循环 select * from test; #查看test表数据 end $$ #结束定义语句 call test(); #调用存储过程 ​
  3. java字符串拼接效率比较 ​​https://www.cnblogs.com/lojun/articles/9664794.html​​ ​StringBuilder的性能最好,用StringBuilder sb5 = new StringBuilder(); sb5.append(String.valueOf(i));来实现字符串拼接最好;
  4. Java读txt文件
  5. ​//参考自https://www.cnblogs.com/manongxiaojiang/archive/2012/10/13/2722068.htmlpublic class H20121012 {    /**      * 功能:Java读取txt文件的内容      * 步骤:1:先获得文件句柄      * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取      * 3:读取到输入流后,需要读取生成字节流      * 4:一行一行的输出。readline()。      * 备注:需要考虑的是异常情况      * @param filePath      */     public static void readTxtFile(String filePath){         try {                 String encoding="GBK";                 File file=new File(filePath);                 if(file.isFile() && file.exists()){ //判断文件是否存在                     InputStreamReader read = new InputStreamReader(                     new FileInputStream(file),encoding);//考虑到编码格式                     BufferedReader bufferedReader = new BufferedReader(read);                     String lineTxt = null;                     while((lineTxt = bufferedReader.readLine()) != null){                         System.out.println(lineTxt);                     }                     read.close();         }else{             System.out.println("找不到指定的文件");         }         } catch (Exception e) {             System.out.println("读取文件内容出错");             e.printStackTrace();         }           }           public static void main(String argv[]){         String filePath = "L:\\Apache\\htdocs\\res\\20121012.txt"; //      "res/";         readTxtFile(filePath);     }               } ​
  6. spring boot定时任务
  7. ​开启定时任务的方法@Component//@Configuration      //1.主要用于标记配置类,兼备Component的效果。 @EnableScheduling   // 2.开启定时任务 public class AlarmSingle { 下面的crond表示在每天的23:59:00开始执行这个任务 参考自:https://www.cnblogs.com/mmzs/p/10161936.html 这个与linux的不太一样,Linux里这样写 59 23 * * * /bin/bash /root/haha/klkl.sh,用crontab -e来编辑 @Scheduled(cron = "0 59 23 * * ?")     public void run() { ​
  8. spring boot使用apollo
    @Value( "${server.apolloValue}" ) //使用方法示例
    private String apolloValue;
    @EnableApolloConfig //需要添加注解
    public class HelloApplication {
  9. java正则表达式匹配
    字符串为 qweqwer:haha:qwerqe,要把haha匹配出来然后替换;
    String haha= "qweqwer:haha:qwerqe"; haha=haha.replaceAll("qweqwer(.*?):","qweqwer:klkl:"); print(haha); 最后结果为 qweqwer:klkl:qwerqe
  10. idea 运行spring boot很久没有卡很久,
    一个解决方法是增加vim /Applications/IntelliJ\ IDEA.app/Contents/bin/idea.vmoptions ,设置-Xms2048m,-Xmx2048m;
    另一个方法见 ​​​https://blog.csdn.net/wyyl1/article/details/84785237​​​ 设置一个hostname,并在sudo vim /etc/hosts里增加hostname的配置
    127.0.0.1       localhost       aoedeMacBook-Pro.local
    ::1             localhost       aoedeMacBook-Pro.local
  11. 用shell脚本 过滤 以d结尾的数据 然后删除最后一个字符,最后过滤出大于10的行
    ​​grep 'd$' ha | sed s'/.$//' | awk '$3>10 {print $0}'​数据是 下面,结果是  w w 11
    w w 11h
    w w 11d
  12. jvm
    ​​sudo -u admin /opt/ifeve/java/bin/jstack 31177 > /home/tengfei.fangtf/dump17grep java.lang.Thread.State dump17 | awk '{print $2$3$4$5}' | sort | uniq -c 44 RUNNABLE 22 TIMED_WAITING(onobjectmonitor) 9 TIMED_WAITING(parking) 36 TIMED_WAITING(sleeping) 130 WAITING(onobjectmonitor) 1 WAITING(parking
  13. ​在这里可能会出现三种情况:第一种情况,某个线程一直CPU利用率100%,则说明是这个线程有可能有死循环,那么请记住这个PID。第二种情况,某个线程一直在TOP十的位置,这说明这个线程可能有性能问题。 第三种情况,CPU利用率TOP几的线程在不停变化,说明并不是由某一个线程导致CPU偏高。 如果是第一种情况,也有可能是GC造成,我们可以用jstat命令看下GC情况,看看是不是因为持久代或年老代满了,产生Full GC,导致CPU利用率持续飙高,命令如下。 ​
  14. ​sudo netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n      1 established)      1 Foreign       1 SYN_RECV       4 TIME_WAIT       9 ESTABLISHED      10 LISTEN ​
  15. 在处理一个CSV文件时,需要给每行的结尾加上某个字符串,使用sed 's/$/xxx/g' 或者awk '{print $0"wtf"}'都不成功,替换后,把行首的几个字符也给替换了,用vim打开,发现行尾有个^M,百度了一下,然后用dos2unix工具处理了一下,再替换就可以成功了。使用grep过滤以xxx开头或者结尾的数据。grep -E '^wtf.*$|^.*wtf$',,,,sed命令将 '  替换成 \' 命令为 sed  "s/'/\\\'/g"
  16. ​[root@wtf tmp]# sed "s/a/'/g" wtfwtfh'h'wtf1wtfh'h'wtf2 [root@wtf tmp]# sed "s/a/'/g" wtf | sed "s/'/\\\'/g" wtfh\'h\'wtf1 wtfh\'h\'wtf2 ​
  17. ​linux 行尾 ^M 是什么这和Linux与Windows断行格式有关。DOS (Windows 系统)使用的断行字符为 ^M$ ,我们称为 CR 与 LF 两个符号。 而在 Linux 底下,则是仅有 LF ($) 这个断行符号。在 Linux 底下打开Windows的档案时,由于 DOS 的断行符号是 CRLF ,就会多了一个 ^M 的符号出来。 在这样的情况下,如果是一个 shell script 的程序档案,将可能造成“程序无法执行”的状态~ 因为他会误判程序所下达的指令内容。 可以使用dos2unix来转换: dos2unix file ​
  18. 在shell中判断一个数是不是另一个数的整数倍
  19. ​#!/bin/shnum=`expr $1 % 5`if [ ${num} -eq 0 ]   then     echo "ok"   else     echo "not ok" fi ​
  20. tcp各个数据
     
  21. ​netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'TIME_WAIT 5009FIN_WAIT1 19 ESTABLISHED 3 FIN_WAIT2 2 SYN_RECV 14 CLOSING 146 LAST_ACK 1 ​
  22. 删除大量小文件
    ​​rsync --delete-before -a -H  --stats test/ cache-bak/
  23. for循环
    ​​applist=(app1 app2 app3);for app in ${applist[@]};do echo $app;done;
  24. 获取IP地址
    ​​ifconfig |grep -Po '(?<=addr:).*(?=Bc)'ifconfig|awk -F"[: ]+" '$4~/[0-9].+[^0-9]+/{print $4}/lo/{exit}'ifconfig|sed -nr 's/^[[:space:]]+inet addr:(.*) Bcast.*/\1/p'ifconfig | grep -o '\([1-9]\{1,3\}\.\)\{3\}[0-4]\{3,\}'
  25. 格式化输出文档
    ​​cat xxxx | awk '{print "n"NR"="$1,"m"NR"="$2}'|column -t​ 将格式化输出文档
  26. 输出某段时间内的日志 日志切割sed -n '/2015-07-27 11:00/,/2015-07-27 11:20/p' xxx_server_log > dsadsads.logsed -n '/06\/Dec\/2016:20:30:00/,/06\/Dec\/2016:21:00:00/p' json_access.log.2016-12-06 > dsadsads.log #加了转义​ 
    ​​输出第几行到第几行 sed -n "5,10p"  ln.sh > /tmp/aa
  27. echo不换行输出
    echo -n "xx";
  28. awk或者echo中输出换行符或者Tab键
    ​​echo -e "123\t345" > /tmp/123.txt;cat /tmp/123.txt | awk '{ print $1 "\t,\n" $2 }'
  29. 移动非空目录
    ​​mv -b xx /tmp/xx.`date +%s`​强制覆盖
    ​​mv -f xx /tmp/xx
  30. 替换文件
    将/tmp/xx文件里的android全替换成ios;
    ​​app=ios; sed -i "s/android/$app/g" /tmp/xx
  31. 获取系统当前时间
    ​​echo `date +%Y%m%d%H%M%S` ​​ #注意大小写,获取当前时间20170425100834
    ​​echo `date +%s`​​ #注意大小写,获取当前时间秒值
    ​​echo `date +%s_%N`​ #当前系统秒值及纳秒值
  32. vim 删除当前行到最后一行
    进入命令模式
    ​​:,$d ​​ #删除当前行到最后一行
    ​​:9,.d​​  #删除第9行到当前行  
    ​​:set nu!​  #显示行数
  33. shell中的
    ​​$*,$@和$# ​脚本名称叫test.sh,入参三个: 1 2 3
    $*为"1 2 3" 一起被引号包含
    ​​$@为"1" "2" "3" ​​ $@表示入参组成的数组,比如说在脚本中定义了paraArr=$@,入参是1 2 3,那么para=$@,实际上表示的是paraArr=(1 2 3),当然可以给每个参数加双引号,但是多此一举.
    ​​$#为3​表示参数数量
  34. 查看用户所在的组
    有用户wtf,要查看用户所在的组,比如使用命令​​chown <username>:<usergroup>  <files>​​ 时
    ​​id wtf​或者groups wtf都可以了.
  35. grep -q
    grep -q主要用来判断参数或者输入中是否包含某些字符,进而根据判断结果执行某些逻辑,如下示
     
    ​​if echo "x" | grep -q "qwer" ;then echo yes;else echo no; finoif echo "xqwer" | grep -q "qwer" ;then echo yes;else echo no; fiyes
  36. grep过滤文本,输入文本上几行,下几行,或者上下几行
    ​​grep -C 10 "wtf" xxx.txt; #输出wtf字符所在行的上下10行grep -B 10 "wtf" xxx.txt; #输出wtf字符所在行的上10行,或者叫前10行,beforegrep -A 10 "wtf" xxx.txt; #输出wtf字符所在行的下10行,或者叫后10行,after问,怎么同时输入前10行,后5行 :-)
  37. 查找相关文件并执行删除操作
    参考了这个链接: ​​​http://blog.csdn.net/done58/article/details/50151399​​​ 
    ​​sudo find  /tmp/xx/ -name wtf -type f -exec mv -bf {} /tmp/wtf`date +%Y%m%d%H%M%S` \;​​ 这个命令从目录/tmp/xx/及其子目录中查找名为wtf的文件,-type f 限制查找出的目标为文件而不是文件夹,,然后将其移动到/tmp目录下,注意这个命令一定要带最后的 \;
    ​​find . -mtime +90 -exec mv {} /var/tmp/date_90 \; ​​查看大于90天的文件并移动;
    ​​find .  -type f  |  xargs  -I  '{}'  mv  {}  /opt/shell ​​这个命令把当前目录下的所有文件夹都移动到/opt/shell里,没有用-exec但是用了管道,也实现了同样的效果
    ​​find /tmp -name  wtf  -type d | xargs rm -rf; ​​查找名为wtf的文件夹,然后将其删除;
    ​​find / -size +50M -type f| xargs du -h;​​ 查找大于50M的文件并查看其具体大小
    ​​find /tmp -mtime +1 -type f | grep -v autorun.sh | xargs sudo rm​​ ; 查找/tmp目录内1天前的
    ​​sudo find / -size +50M -type f| grep -E "out|log"| xargs sudo rm ​​查询大于50M,且包含out或者log的文件,并删除
    ​​ps -ef |grep storm | grep -v grep | awk '{print $2}' | xargs sudo kill ​​; 杀掉一批进程
    文件(不包括文件夹) 且排除autorun.sh,然后将其删除
    +表示大于    -表示小于
    如果查询时遇到异常,来源于: ​​​http://blog.csdn.net/yabingshi_tech/article/details/46604615​​​ 
    find: paths must precede expression
    进行查找资料,多文件的查找的时候需要增加单引号
    rm: missing operand 如果遇到这个问题,原因之一是因为没有匹配find条件的结果.
    find同时匹配多个文件, ​​find ./lib/ -name 'log4j*' -o -name 'logback*'​项目里的log4j日志级别配置的是info但是部署后仍然打印debug日志,百度了一下,可能是因为项目里没有排除logback包,所以用命令在lib里同时查找logback和log4j的jar包
     
  38. 忽略命令的输出
    ​​>/dev/null  2>&1 
  39. ​ls | sed "s:^:`pwd`/:"# 就是在每行记录的开头加上当前路径ps: #在所有行之前/后加入某个字符串 sed 's/^/string/g' file sed 's/$/string/g' file find  $PWD -maxdepth 1  | xargs ls -ld # 列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归 find  $PWD | xargs ls -ld # 递归列出当前目录下的所有文件(包括隐藏文件)的绝对路径 ​
  40. windows powershell 列出目录下的所有文件及路径
    ​​dir /s /b /a 在CMD中可用“dir /s /b /a”来获得当前目录及子目录所有文件,且显示这些文件的路径C:\Users\much\AppData\Local\ACD Systems\Catalogs
    C:\Users\much\AppData\Local\ACD Systems\data
    C:\Users\much\AppData\Local\ACD Systems\GeoTag
    C:\Users\much\AppData\Local\ACD Systems\ICMCache
    C:\Users\much\AppData\Local\ACD Systems\Logs
  41. jstat Could not attach to 
    这个可能是权限的问题.比如该进程是由root用户启动的,而你用普通用户执行
    ​​jstat -gcutil <pid> <时间间隔>​即会报jstat Could not attach to ,换到root用户下执行就可以了.
  42.  windows 查看端口命令参考自:​​http://wenku.baidu.com/view/681f0332a32d7375a4178046.html​​​netstat -aon|findstr "80"​ 由此可看到80的端口号​再用命令查看这个端口号对应的进程  ​tasklist|findstr "2044"​,这个就是查看端口号对应的进程了
  43. linux crontab相关​每分钟执行一次 * * * * *
    每五分钟执行   */5 * * * *
    每小时执行     0 * * * *
    每天执行       0 0 * * *
    每周执行       0 0 * * 0
    每月执行       0 0 1 * *
    每年执行       0 0 1 1 *
    安装: sudo yum -y install crontabs
    如果运行时遇到错误提示/tmp/crontab.ZIgBhN: No such file or directory,那可能是/tmp目录被删除或者没有权限,给/tmp 777的权限即可. sudo chmod 777 /tmp
    如果遇到Reloading crond:                                           [FAILED]的错误,看看是不是权限不够,用sudo试试或者直接到root用户下执行命令
    /etc/init.d/crond reload
    /etc/init.d/crond restart/start/stop
  44. 列出文件并按时间顺序排列
    出自: ​​​http://www.cnblogs.com/wangkongming/p/3994962.html​​​ 
    ​​按照时间升序​​ ls -lrt
    按照时间降序(最新修改的排在前面)ls -lt
  45. linux安装zookeeper
    配置好java环境变量
     
    下载zookeeper-3.4.8.tar.gz并解压; cd 到conf目录,cp zoo_sample.cfg zoo.cfg;修改zoo.cfg,指定dataDir,可以设置autopurge.snapRetainCount=3和autopurge.purgeInterval=1,取消注释.
    启动应用: sudo sh zkServer.sh -start; 
    ps -ef | grep java;
  46. ​export JAVA_HOME=/home/javaexport PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ​
  47. windows类似grep的命令 ​conda list | findstr "pandas"​; 从命令结果中过滤出包含pandas的纪录
  48. windows杀进程的命令
  49. ​[c:\~]$ netstat -aon|findstr 1099  TCP    0.0.0.0:1099           0.0.0.0:0              LISTENING       10012  TCP    [::]:1099              [::]:0                 LISTENING       10012 [c:\~]$ taskkill /pid 10012 错误: 无法终止 PID 为 10012 的进程。 原因: 只能强行终止这个进程(带 /F 选项)。 [c:\~]$ taskkill /F /pid 10012 成功: 已终止 PID 为 10012 的进程。 [c:\~]$ netstat -aon|findstr 1099 ​

28. 看mongodb是否在运行

    找到mongod文件: ​sudo find / -name 'mongod'​ 配置文件一般可以用这个命令找到: ​sudo find / -name "mongo*.conf"

    启动命令: ​ ./mongod --config /etc/mongod.conf​ 如果启动失败mongod.conf里一般就有日志文件,一定要去看日志

$  ./mongod --config /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 27187
ERROR: child process failed, exited with error number 48


    查看mongodb有没有启动: ​sudo netstat -apn | grep 27017​ 如果有LISTEN的状态即启动,前提是mongodb用的这个端口; 或者用 ps -ef | grep mongod 有返回: supdev    1998 43451  0 Oct13 pts/6    04:24:37 mongod,即可

    mongodb一定不要用kill -9来杀进程,一定要用./mongod --shutdown,参考    ​​http://www.cnblogs.com/joshua317/articles/5190385.html​​ 

    mongo正常启动的日志显示:

$ ./mongod --config /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 35363
child process started successfully, parent exiting


 29. 软链接的区别

对普通文件而言cp -s 与 ln -s效果完全相同。cp -s 不能为目录创建符号链接而 ln -s 则可以。cp -sa可以递归为一个目录内的所有文件分别创建软链接而ln则不能。(注意这门课说的“软链接”正确翻译应该叫“符号链接”)

30. 今天发现有个服务器不纪录历史命令

echo $HISTSIZE 这个变量的值是1000. 查看了~/.bash_history,这个文件是有的,但是我看权限是-rw------,感觉应该是权限有问题,于是直接给了777权限,关掉连接再打开发现已经能记录历史命令了,完美解决了这个问题。

31. grep条件 OR 日志,打印太多乱七八糟的东西,淹没了正常的日志,过滤之

tail -fn200 /xxxx/catalina.out |grep -vE "异步通知|x1|x2|x3|x4|x5"

32.sed命令 :​​https://www.cnblogs.com/linux-wangkun/p/5745584.html​​ 

# 替换文件中的所有匹配项
sed -i 's/原字符串/替换字符串/g' filename


# 同时执行两个替换规则

sed 's/^/添加的头部&/g;s/$/&添加的尾部/g'