概述
【正则】截取字符串
String reqUrl = "http://127.0.0.1:7550/daemon/api/v2/health/check?key=123"; String regex = "(?:https?://)?(.*?)(/.*?)(\?[\s\S]*)?$"; Matcher m= Pattern.compile(regex).matcher(reqUrl); while (m.find()) { System.out.println(m.group(2)); break; }
//需要截取的字符串 String splitStr = "[user:name] = select name from user"; // 定义规则 String pattern = "(\[+)(\w+)\:(\w+)(\]+)"; //Pattern.compile函数 Matcher matcher = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE).matcher(splitStr); while (matcher.find()) { //表示往下遍历 //截取出来的字符串 [user:name] String allcon = matcher.group(0); System.out.println(allcon); //截取的开始位置 [ String tableJoin1 = matcher.group(1); System.out.println(tableJoin1); //截取出来的表名 user String tableName = matcher.group(2); System.out.println(tableName); //截取出来的字段名 name String filed = matcher.group(3); System.out.println(filed); //截取的结束位置 ] String tableJoin4 = matcher.group(4); System.out.println(tableJoin4); }
【Thread】线程
mythread.start() 会启动一个新线程,并在新线程中运行run()方法。
mythread.run() 则会直接在当前线程中运行run()方法,并不会启动一个新线程来运行run()。
mythread.join() 主线程需要等待子线程执行完成之后再结束
【h2】部署Mix Mode模式中的几个问题
1)为了部署MixMode模式,embeded 那个节点必须启动一个TcpServer,否则其它节点无法通过:tcp://...访问此节点
如下代码
Server server = Server.createTcpServer(new String[] { "-tcpPort", "9101" });
server.start();
2)那篇文章中
System.out.println("You can access the database remotely now, using the URL:");
System.out.println("jdbc:h2:tcp://localhost:9081/~/test (user: sa, password: sa)");
是误导,如果启动的TcpServer用的9101,那么其它节点应该通过jdbc:h2:tcp://localhost:9101/.../test访问。
3)最好不要使用AUTO_SERVER=TRUE,因为如文档中所述,这个方式是不支持通过网络协议(tcp:// ssl://)访问embeded的
(Automatic Mixed Mode)This mode has three disadvantages: All processes need to have access to the database files. Then, if the first connection is closed (the connection that started the server), open transactions of other connections will be rolled back. Also, explicit client/server connections (using jdbc:h2:tcp:// or ssl://) are not supported.
4)虽然完全使用Server/client模式也可以完成业务需求,但是性能差太多了。我作的一个简单的insert 测试,embed比通过tcp走快大约60倍。所以如果可能主应用还是应该用embeded,让console通过Server/client来连。
【spring】@ContextConfiguration注解
##java中,配置classpath文件夹中的文件,前面加/ @ContextConfiguration(locations = {"classpath:/spring/spring-base.xml", "classpath:/spring/spring-logic.xml"}) #在xml中,引用其他classpath下的文件是,如果文件在根目录,直接写文件名,不要在前面添加/ <bean class="nw.kara.server.support.DecryptPropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> <property name="locations"> <list> <value>classpath:config.properties</value> </list> </property> </bean>
【xml】classpath和classpath*区别
classpath:只会到你的class路径中查找找文件。
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找。
注意: 用classpath*:需要遍历所有的classpath,所以加载速度是很慢的;因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*。
classpath*的使用:
当项目中有多个classpath路径,并同时加载多个classpath路径下(此种情况多数不会遇到)的文件,*就发挥了作用,如果不加*,则表示仅仅加载第一个classpath路径。
【maven】打包 (规律:想看maven语法支持的标签,先写<然后看下拉列表枚举了哪些标识)
既打war包,又打jar包
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <webXml>webappWEB-INFweb.xml</webXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>make-a-jar</id> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
既上传war包,又上传jar包到nexus仓库
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> <executions> <execution> <id>kara-jar</id> <goals> <goal>install-file</goal> </goals> <phase>install</phase> <configuration> <groupId>nw.kara</groupId> <artifactId>kara-web</artifactId> <version>${project.version}</version> <packaging>jar</packaging> <file>${project.build.directory}/${project.build.finalName}.jar</file> </configuration> </execution> <execution> <id>kara-war</id> <goals> <goal>install-file</goal> </goals> <phase>install</phase> <configuration> <groupId>nw.kara</groupId> <artifactId>kara-web</artifactId> <version>${project.version}</version> <packaging>war</packaging> <file>${project.build.directory}/${project.build.finalName}.war</file> </configuration> </execution> </executions> </plugin>
额外复制资源文件
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/Test</outputDirectory> <resources> <resource> <directory>${basedir}/target/common-aws</directory> <filtering>true</filtering> <includes> <include>**</include> </includes> </resource> </resources> </configuration> </execution> </executions> </plugin> </plugins>
【centos】常用命令
解压jar包
unzip xxx.jar -d zzz
列出目录树
ls -a zzz
查找指定文件(如果能查到,结果中包含路径)
find zzz -name "StartApplication*"
【正则】java正则匹配关键字
匹配两个关键字之间,带任何字符的模式
public static void main(String[] args){
// String sql = "/* ApplicationName=DataGrip 2020.2.3 */ CREATE DATABASE `crm_sales`n";
// String sql = "/* ApplicationName=DataGrip 2020.2.3 */ CREATE n DATABASE `crm_sales`n";
String sql = "/* ApplicationName=DataGrip 2020.2.3 */ CREATE 12aA/!@#$%^&*()_+ DATABASE `crm_sales`n";
String prefix = "CREATE";
String suffix = "DATABASE";
String regex = prefix+"([\s\S]*)"+suffix; //另外,(.*) 的写法,是匹配任意字符(n换行符除外)
Pattern p = Pattern.compile(regex);
Matcher m= p.matcher(sql.toUpperCase(Locale.ROOT));
while (m.find()) {
String fullPattern = m.group(0);
System.out.println("##fullPattern##" + fullPattern);
}
}
【zookeeper】查看zk状态
查看zk服务,单节点连接数
echo cons |nc 10.253.128.141 2181 |wc -l
查看zk服务各项指标
echo srvr |nc 10.253.128.141 2181
查看zk服务,某个IP的单节点连接数
echo cons |nc [zk-ip] 2181 |grep [client-ip] |wc -l
ss -anp|grep ':2181' |wc -l
可以查看单个容器服务,建立了多少个连接数
echo cons |nc [zk-ip] 2181 |grep [client-ip] |wc -l
可以查看zk中,某个IP上,总共建立的连接数
maxClientCnxns
这个配置参数将限制连接到ZooKeeper的客户端的数量,限制并发连接的数量,它通过IP来区分不同的客户端。此配置选项可以用来阻止某些类别的Dos攻击。该参数默认是60,将它设置为0将会取消对并发连接的限制。
例如,将maxClientCnxns的值设置为1,如下所示:
#set maxClientCnxns
maxClientCnxns=1
启动ZooKeeper之后,首先用一个客户端连接到ZooKeeper服务器之上。然后,当第二个客户端尝试对ZooKeeper进行连接,或者某些隐式的对客户端的连接操作,将会触发ZooKeeper的上述配置。系统会提示相关信息,如下图1所示:
ZooKeeper关于maxClientCnxns参数的官方解释:
单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,
仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,
不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。
maxClientCnxns
Limits the number of concurrent connections (at the socket level) that a single client, identified by IP address, may make to a single member of the ZooKeeper ensemble.
This is used to prevent certain classes of DoS attacks, including file descriptor exhaustion.
The default is 60. Setting this to 0 entirely removes the limit on concurrent connections.
ZooKeeper客户端连接数过多【图文】_zlfwmm_51CTO博客
【win10】导出文件夹目录
tree /f查看目录
tree /f > /tree.txt 导出目录至txt文件
【centos】查看系统时区
date -R
cat /etc/localtime
cat /etc/timezone
设置时区。。。
【centos】查看文件权限
#>ll
#>stat -c '%A %a %n' *
#>ls -ltr xxx
#>ls -lr xxx
【平台】术语
- IaaS:基础设施服务,Infrastructure-as-a-service
- PaaS:平台服务,Platform-as-a-service
- SaaS:软件服务,Software-as-a-service
【secureCRT】文件传输
rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具
上传文件只需在shell终端仿真器中输入命令“rz”,即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器。
下载文件只需在shell终端仿真器中输入命令“sz 文件名”,即可利用Zmodem将文件下载到“路径/SecureCRT-5.1.3/download/”目录下。
ASCII
Xmodem
Ymodem
Zmodem
【notepad】notepad++ 报”load langs.xml failed!”解决方法
打开notepad++的安装根目录,将langs.model.xml重命名为langs.xml,即可
【centos】tar打包,并存储到指定位置
tar -zcvPf /opt/nginx/nginx/conf/nw/kb-bak.tar.gz /opt/nginx/nginx/conf/nw/kb*
tar -zcvPf /opt/nginx/nginx/conf/nw/kb_bak.tar.gz -C /opt/nginx/nginx/conf/nwkb* #不保留层级
【curl】curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出
curl -i 10.1.60.139:8500/api/v1/permission/check -w "\n"
【linux】剪切前缀
module_name=kb-front
product_name=kb
subname=${module_name:${#product_name}+1} #该方法,可以获取front
【linux】使用sed进行大小写转换
大写转小写 echo "ABCD"|sed 's#[A-Z]#l&#g'
小写转大写 echo "abcd"|sed 's#[A-Z]#u&#g'
大小写互相转换 echo "aBcD"|tr '[a-zA-Z]' '[A-Za-z]'
【jq】shell处理json的工具
查询json
./jq .xxx data.json
./jq .x.y.z data.json #分层级查询
或者多写几层./jq xx
【git】拉取代码报self signed certificate
执行配置命令 : git config --global http.sslVerify false
【centos】手动修改系统时间
# 先执行如下命令 timedatectl set-ntp no
# 设置时间 timedatectl set-time "YYYY-MM-DD HH:MM:SS"
# 更改时区 timedatectl set-timezone Asia/Shanghai
timedatectl set-time "2021-02-28 11:48:30"
设置系统时间为中国时区并启用NTP同步
yum install ntp -y // 安装ntp服务 systemctl enable ntpd // 开机启动服务 systemctl start ntpd // 启动服务 timedatectl set-timezone Asia/Shanghai // 更改时区 timedatectl set-ntp yes // 启用ntp同步 ntpq -p // 同步时间
最后
以上就是虚心手套为你收集整理的【开发日志-已归档】2020-12的全部内容,希望文章能够帮你解决【开发日志-已归档】2020-12所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复