点滴积累--后端

1、Spring Boot跨域(@CrossOrigin)
当然这里虽然指SpringBoot但是SpringMVC也是一样的,要求在Spring4.2及以上的版本
2、springboot后台timestamp类型返回前台时区不对,添加application配置:
spring:
 jackson:
  time-zone: GMT+8

3、java8中的时间操作

LocalDate today = LocalDate.now().minusMonths(i);
//本月的第一天
LocalDate firstday = LocalDate.of(today.getYear(),today.getMonth(),1);

LocalDateTime firstday = date.with(TemporalAdjusters.firstDayOfMonth());
//本月的最后一天
LocalDate lastDay =today.with(TemporalAdjusters.lastDayOfMonth());

LocalDate.now().getYear(); // 年份  
LocalDate.now().getMonthValue(); // 月份(数值表示, 从1开始)  
LocalDate.now().getMonth(); // 月份(英文[enum]表示)  
LocalDate.now().getDayOfMonth(); // 日期(从1开始)  
LocalDate.now().getDayOfYear(): // 当天所在这一年的第几天(从1开始)  
LocalDate.now().getDayOfWeek(); // 星期几  
LocalDate.now().lengthOfYear(); // 当年的天数  
LocalDate.now().lengthOfMonth(); //当月的天数 

LocalDate.now().withDayOfMonth(1));//替换:

LocalDate.now().minusDays(1).isBefore(LocalDate.now()));//比较

localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));//转换

LocalDate.parse(dateTimeStr, DateTimeFormatter.ofPattern(pattern));

localDate.isLeapYear();//判断是否为闰年

 public static LocalDate date2LocalDate(Date date) {
        if(null == date) {
            return null;
        }
        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    }
public static Date localDateTime2Date(LocalDateTime localDateTime) {
        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

    }

public static Date localDate2Date(LocalDate localDate) {
        if(null == localDate) {
            return null;
        }
        ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
        return Date.from(zonedDateTime.toInstant());
    }

TemporalAdjusters:这个类可以获取第一天第一年最后一天最后一年等信息

4、linux基本知识:

docker ps 显示当前正在运行的容器

docker ps -a 命令查看已经在运行的容器

docker run :创建一个新的容器并运行一个命令

docker exec:在运行的容器中执行命令

chmod -R 777 333.txt 修改权限

chown 修改文件拥有者

chgrp修改群组

rm <文件> 或 rm -r <文件夹> 删除文件

rmdir命令用来删除目录。

mkdir 文件夹  创建文件夹

mkdir -p a/b/c 参数 -p用于创建多级文件夹

mv t.txt Document    把文件t.txt 移动到目录Document中

cp 1.sh /sdcard/ 复制当前路径下的1.sh到/sdcard下

kill PID码  意义:结束当前进程

 find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 
find / -user user1 搜索属于用户 'user1' 的文件和目录 
find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 

gz压缩:tar zcvf member.qz.0309.tar.gz member.china.root.qz (tar --tar -xvf / tar -xvf,  zip-- unzip -d / zip -r )

 gz解压到当前目录:tar zxvf jsp_simexam.tar.gz

 查看端口号是否被占用  netstat -anp | grep ###  

grep money test.txt  在test.txt中查找money这个字符串,grep查找是区分大小写的

tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容

tail -n 100 /etc/cron  #显示最后100行数据
tail -n -100 /etc/cron #除了前99行不显示外,显示第100行到末尾行
grep -n '2019-10-24 00:01:11' *.log   查看符合条件的日志条目。

gsokubectl exec -ti n:n:name sh
gsodocker restart n:name
gsokubectl describe n:name
gsokubectl logs n:n:name

5、pg列操作
alter table kpi add upformula varchar(255);  

alter table kpi drop column basicdata;

alter table kpi rename column formula to downformula;
alter table kpi ALTER column_name TYPE data_type;
alter table kpi ALTER basicscore type numeric(25,6) USING basicscore::numeric(25,6);

6、sql优化--in和exists效率
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in,
用not exists 都比not in 要快。
in ps or
如果in和or所在列有索引或者主键的话,or和in没啥差别;
没有索引,in效率高。

7、Java BigDecimal类型的 加减乘除运算

需要调用方法:

加法:add

减法:subtract

乘法:multiply

除法:divide

8、Java时间设为二十四小时制和十二小时制的区别:

1) 二十四小时制: “yyyy-MM-dd HH:mm:ss”

2)十二小时制: “"yyyy-MM-dd hh:mm:ss"”

2020/10/17

1、Apache Common DbUtils

数据库访问层的框架,包含了OR-Mapping的,例如Hibernate与Mybatis。

只是封装了JDBC的工具类,Apache Common DbUtils。这个工具在JDBC的基础上稍加封装是JDBC的操作更加便捷,包含以下几个重要的类:

1.DBUtils:辅助(打开&关闭连接.....)

2.QueryRunner :构造增删查改

3.ResultSetHandler :如果是 “查” 操作,则需要ResultSetHandler来处理结果集

ResultSetHandler是个接口,有很多实现类(因为返回结果类型有很多种)如下所示 :

ArrayHandler:           返回结果集中的第一行数据,用Object[ ] 数组接收。
ArrayListHandler:    返回结果集中的多行数据,存放到List<Object[ ] >中。

BeanHandler:            返回结果集中的第一行数据,并封装到一个对应的JavaBean对象实例中。
BeanListHandler:     返回结果集中的多行数据,并封装存放到List里。

MapHandler:              将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。//重点
MapListHandler:        将结果集中的每一行数据都封装到一个Map里,然后再存放到List

ColumnListHandler: 将结果集中某一列的数据存放到List中。
ScalarHandler:             将结果集第一行的某一列放到某个对象中。

再加上c3p0连接池ComboPooledDataSource()也是个不不错的选择,上手简易。

maven包

<dependency>
    <groupId>commons-dbutils</groupId>
    <artifactId>commons-dbutils</artifactId>
    <version>1.6</version>
</dependency>

<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>

2021/01/25

1、WAS中间件服务器简介:   https://blog.csdn.net/qq_19924321/article/details/107198465

2、J2EE与javaweb的区别

1、Java分类

   Java分为JavaSE(Java标准版)、J2EE(Java企业版)和JavaME(Java微型版);

   JavaSE(Java Standard Edition),一般用来开发桌面应用程序,但是在开发桌面应用程序上相对VB,Delphi,VC++并没有什么优势。

   JavaEE(Java Enterprise Edition),一般用于开发JavaWeb应用程序,初级的一般是用JSP(Java Server Pages)+servlet+JavaBean来开发的,对大型的网站一般是使用框架来开发的,例如struts,hibernate,spring。

   JavaME(Java Micro Edition),诺基亚手机上运行的Java程序就是用这个版本开发的程序。

2、JavaWeb与J2EE的区别

   J2EE是Java的企业应用开发,涵盖了B/S和C(Client客户端)/S(Server服务器),注重的是结构和框架,我们所熟知的struts2、hibernate和spring即ssh就是j2ee的一些基本框架。

   JavaWeb是指Java在B(Browser浏览器)/S(Server服务器)方面的开发,做的是网络应用;

j2EE和JavaWeb说的是两个层面,javaee是指Java的企业级应用,可以说是一个规范,包含servlet,jsp,jndi,jms,mvc框架,对象持久化等等组件,说白了就是用来开发服务器的程序,而javaweb是指用Java技术来解决相关web互联网领域的技术总和,其中就包含javaee的组件。

3、WebLogic、WebSphere、JBOSS、Tomcat 之间的区别:https://zhuanlan.zhihu.com/p/221961622

4、EJB:

      用通俗话说,EJB就是:"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。是的,没错!EJB 就是将那些"类"放到一个服务器上,用C/S 形式的软件客户端对服务器上的"类"进行调用。快崩溃了吧!这么几句就非常清楚的解释了EJB是什么(也是本人在高人的博文里看来的),而很多文章总是执着于解释EJB原理,EJB出现的意义。

a.EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。

b.RMI实现原理:就是通过Java对象可序列化机制(对象的序列化过程就是将对象状态转换成字节流和从字节流恢复对象)实现分布计算,实现远程类对象的实例化以及调用的方法。

c.服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能

5、Java 为什么占两个字节的char类型采用utf-8时可以存储中文?

转载自:https://blog.csdn.net/u010737354/article/details/52456570
先从字符编码讲起。 1、美国人首先对其英文字符进行了编码,也就是最早的ascii码,用一个字节的低7位来表示英文的128个字符,高1位统一为0; 
2、后来欧洲人发现尼玛你这128位哪够用,比如我高贵的法国人字母上面的还有注音符,这个怎么区分,得,把高1位编进来吧,这样欧洲普遍使用一个全字节进行编码,最多可表示256位。欧美人就是喜欢直来直去,字符少,编码用得位数少;
3、但是即使位数少,不同国家地区用不同的字符编码,虽然0--127表示的符号是一样的,但是128--255这一段的解释完全乱套了,即使2进制完全一样,表示的字符完全不一样,比如135在法语,希伯来语,俄语编码中完全是不同的符号; 
4、更麻烦的是,尼玛这电脑高科技传到中国后,中国人发现我们有10万多个汉字,你们欧美这256字塞牙缝都不够。于是就发明了GB2312这些汉字编码,典型的用2个字节来表示绝大部分的常用汉字,最多可以表示65536个汉字字符,这样就不难理解有些汉字你在新华字典里查得到,但是电脑上如果不处理一下你是显示不出来的了吧。 
5、这下各用各的字符集编码,这世界咋统一?俄国人发封email给中国人,两边字符集编码不同,尼玛显示都是乱码啊。为了统一,于是就发明了unicode,将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,现在unicode可以容纳100多万个符号,每个符号的编码都不一样,这下可统一了,所有语言都可以互通,一个网页页面里可以同时显示各国文字。 
6、然而,unicode虽然统一了全世界字符的二进制编码,但没有规定如何存储啊,亲。x86和amd体系结构的电脑小端序和大端序都分不清,别提计算机如何识别到底是unicode还是acsii了。如果Unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,文本文件的大小会因此大出二三倍,这对于存储来说是极大的浪费。这样导致一个后果:出现了Unicode的多种存储方式。 
7、互联网的兴起,网页上要显示各种字符,必须统一啊,亲。utf-8就是Unicode最重要的实现方式之一。另外还有utf-16、utf-32等。UTF-8不是固定字长编码的,而是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。 
8、注意unicode的字符编码和utf-8的存储编码表示是不同的,例如"严"字的Unicode码是4E25,UTF-8编码是E4B8A5,这个7里面解释了的,UTF-8编码不仅考虑了编码,还考虑了存储,E4B8A5是在存储识别编码的基础上塞进了4E25。 
9、UTF-8 使用一至四个字节为每个字符编码。128 个 ASCII 字符(Unicode 范围由 U+0000 至 U+007F)只需一个字节,带有变音符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及马尔代夫语(Unicode 范围由 U+0080 至 U+07FF)需要二个字节,其他基本多文种平面(BMP)中的字符(CJK属于此类-Qieqie注)使用三个字节,其他 Unicode 辅助平面的字符使用四字节编码。 
10、最后,要回答你的问题,常规来看,中文汉字在utf-8中到底占几个字节,一般是3个字节,最常见的编码方式是1110xxxx 10xxxxxx 10xxxxxx。

引用自:https://blog.csdn.net/weixin_44296929/article/details/106907250

Java语言内部存储采用的是Unicode编码,Unicode编码中的每个字符占两个字节,中文也是占两个字节,所以,Java中的字符可以存储一个中文汉字。

1、而在不同的编码方式中,中文所占的字节数是不同的:

① ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

② UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

③ Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

④ UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

⑤ UTF-32编码中,世界上任何字符的存储都需要4个字节。

2、解释为什么Java的char类型只占用两个字节,采用utf-8编码时,为什么可以存储汉字?

Unicode是一种字符集(charset),用两个字节就能囊括世界上多有的文字集合。

UTF-8是一种编码方式(encoding),是Unicode的一种表现方式。

在Java文件中如果声明了char c = '中';,编译后生成的class文件会把转化成Unicode的一种表现方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值