11、mysql用Limit
limit 1,1 oracle用rowNum
12、String判空
StringUtils.isEmpty()
这两个方法都是判断字符是否为空的,前者要求没有任何字符,后者要求是空白字符,isBank判断的空字符其实包括了isEmpty,也就是说isEmpty判断的范围比isBank小。而两者最大的区别就在于——isBank能判空格符而isEmpty不能。
select c2.appr_no,dbms_lob_substr(wm_concat(distinct(c1.approver)),400,1) as approver from copy1 c1,copy2 c2 where
instr(‘,’||c2.appr_no||‘,’,’,‘||c1.appr_no||‘,’>0 group by c2.appr_no order by c2.appr_no asc)
13、oracle处理like查询
14、PriorityQueue 优先级队列
15、服务器部署
16、cherry-pick
在branch1开发,进行多个提交,这时切换到branch2,想把之前branch1分支提交的commit都【复制】过来,怎么办?
首先切换到branch1分支,然后查看提交历史记录,也可以用sourceTree查看,也可以用命令git log
例如我的git log 如下:
commit1 xxx_id1
commit2 xxx_id2
commit3 xxx_id3
我想把 commit1 和 commit3 复制到 branch2 分支里,只需要切换到 branch2 分支,然后执行
git cherry-pick xxx_id1…xxx_id3
注意中间的两个点,表示把两个commit区间的所有commit多复制过去
单个 commit 只需要 git cherry-pick commitid
多个commit 只需要git cherry-pick
commitid1…commitid100
注意,不包含第一个 commitid , 即 git cherry-pick (commitid1…commitid100]
如果想搞成[]区间,使用 git cherry-pick A^…B 相当于[A B]包含A
17、git Reset[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
18、git Reset
输入q
19、浏览代码心得
1、JsonObject 存放键值对,相当于Map
2、可将字符串转化为JsonObject对象, 在putAll 全部放置到系统内部中
.putAll(JsonObject.parseObject())
sql剥离
20、sql
select a.emp_no, (b.salary - c.salary) as growth
from
employees as a
inner join salaries as b
on a.emp_no = b.emp_no and b.to_date = ‘9999-01-01’
inner join salaries as c
on a.emp_no = c.emp_no and a.hire_date = c.from_date
order by growth asc
SELECT
``s1.emp_no,
``s1.salary,
``(SELECT
``COUNT(DISTINCT s2.salary)
``FROM
``salaries s2
``WHERE s2.to_date = ``'9999-01-01'
``AND s2.salary >= s1.salary) AS `rank` -- 去重:计算并列排名
FROM
``salaries s1
WHERE s1.to_date = ``'9999-01-01'
ORDER BY s1.salary DESC,
``s1.emp_no ;
21、索引
-
添加主键
ALTER TABLE tbl_name ADD PRIMARY KEY (col_list);``// 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
-
添加唯一索引
ALTER TABLE tbl_name ADD UNIQUE index_name (col_list);``// 这条语句创建索引的值必须是唯一的。
-
添加普通索引
ALTER TABLE tbl_name ADD INDEX index_name (col_list);``// 添加普通索引,索引值可出现多次。
-
添加全文索引
ALTER TABLE tbl_name ADD FULLTEXT index_name (col_list);``// 该语句指定了索引为 FULLTEXT ,用于全文索引。
PS: 附赠删除索引的语法:
DROP INDEX index_name ON tbl_name;``// 或者``ALTER TABLE tbl_name DROP INDEX index_name;``ALTER TABLE tbl_name DROP PRIMARY KEY;
[举报](javascript:void(0)😉
22、去重
23、mysql不允许查询的同时删除数据,需要将查询的原始数据重命名为另一个表
24、replace(emp_no,10001,10005)函数
其中包含三个参数,第一个参数为该字段的名称,第二参数为该字段的需要被修改值,第三个参数为该字段修改后的值。
25、条件
有group by的查询语句中,select指定的字段要么就包含在group by语句的后面,作为分组的依据,要么就包含在聚合函数中
23、
(select count(distinct b.number) from passing_number b where b.number>=a.number )
统计排名
24、计算总和窗口函数
over()中使用了order by子句,所以默认从第一行累计到当前行;若不使用order by子句,则会针对整个分区求和(此处没指定partition by,所以将整个表视为一个分区
25、统计留存率
要统计牛客新登录用户的次日成功的留存率,首先把公式列出来:
(第一天登录的新用户并且第二天也登录的用户)/(总用户)即为新登录用户的次日成功的留存率
总用户其实挺好算,如下:
select count(distinct user_id) from login
找到每个用户第一天登陆的日子,其实挺好找,和前面找最近登录的日子差不多,一个是max,一个是min:
select user_id,min(date) from login group by user_id
比如上面查找语句是1,2020-10-12;那么如果找到一个结果为1,2020-10-13的那么是不是就符合结果了,于是可以如下写:
select user_id,date(min(date),``'+1 day'``) from login group by user_id
这样就可以找到所有的在第一天登录的新用户并且第二天也登录的用户,以及第二天的日期。
所以从这个里面找到所有的count(distinct user_id)除以总用户就可以得到结果了,于是整个sql语句如下:
select ``round(count(distinct user_id)*1.0/(select count(distinct user_id) from login) ,3)``from login``where (user_id,date)``in (select user_id,date(min(date),``'+1 day'``) from login group by user_id);
mysql的解法为:
select ``round(count(distinct user_id)*1.0/(select count(distinct user_id) from login) ,3)``from login``where (user_id,date)``in (select user_id,DATE_ADD(min(date),INTERVAL 1 DAY) from login group by user_id);
16、次日留存
26、查最差是第几名
select grade, sum(number) over(order by grade) t_rank
from class_grade
order by grade;
窗口函数
dense_rank()排名
- select * *from vitae a*
- where (a.peopleId,a.seq) in (*select peopleId,seq **from vitae **group **by peopleId,seq **having count(*) > 1)*********
- and rowid not in (select *min(rowid) **from vitae **group **by peopleId,seq **having count(*)>1)*********
27stream流映射数据库字典项
28 flatMap聚沙成塔
29开发随笔
项目日志查看
biz-error.log 报错信息
tail -f命令同步查看执行情况
more 命令查看文件所有信息
- 按回车:默认下一行数据;
- 按空格键盘,默认下一页,以当前屏幕为单位;
- 按Ctrl+ B 上一页,以当前屏幕大小为单位;
- 按B 回到文档第一页面
一期服务日志
二期服务日志
/var/log/apps/sppXxxx.log
文件升降序
ls -lrt 升序
ls -lt降序
cat:从第一行开始显示文本内容(适用于内容较少的)
tac:从最后一行开始显示,是 cat 的逆顺序
more:一页一页的显示文本内容(适用于内容较多的)
less:与 more 类似,但是比 more 更好的是,它可以往前翻页!
head:只看文本的前面几行
tail:只看文本的后面几行
nl:显示文本内容与行号
————————————————
30、json格式转换
ApplyFlow flow=JsonParser.create().parse(JSONObject.toJSONString(object),APPLYFLOW.class);
31、去重删除
32、hashMap键值对
keySet是键的集合,Set里面的类型即key的类型
entrySet是 键-值 对的集合,Set里面的类型是Map.Entry
keySet()的速度比entrySet()慢了很多
使用entrySet则必须将map对象转换为Map.Entry,keySet则不需要
33、@JsonInclude
字段不为空才返回该值
@TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错
BeanUtils.copyProperties(vo,entity)
34、BigDecimal
BIGDECIMAL用于参数校验
比较方法用compareTo
35、格式
jackson:
data-format:yyyy-mm-dd HH:MM:ss
36、redis需要开启持久化
37、string判空
StringUtils.isEmpty null!=
List判空
37、开发环境检查
欢迎界面设置
java Compiler 设置java8
file Encoding 设置UTF-8 字符码
39 git log
40、数据库处理
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FbGsTk8B-1652771139806)(C:\Users\Stereo\AppData\Roaming\Typora\typora-user-images\image-20220217111009283.png)](https://img-blog.csdnimg.cn/eb38bac8559445bcbf4c048000cc580a.png)
41、Oracle去除重复(某一列的值重复),取最新(日期字段最新)的一条数据
解决思路:用Oracle的row_number() over函数来解决该问题。
解决过程:
1.查看表中的重复记录
select
t.id,
t.device_id,
t.update_dtm,
t.test_result
from DEVICE_INFO_TBL t
2.标记重复的记录
select
t.id,
t.device_id,
t.update_dtm,
t.test_result,
row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg
from DEVICE_INFO_TBL t
3.过滤重复数据,取得最新的记录
select
temp.id,
temp.device_id,
temp.update_dtm,
temp.test_result
from (
select
t.id,
t.device_id,
t.update_dtm,
t.test_result,
row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg
from DEVICE_INFO_TBL t ) temp
where temp.row_flg = ‘1’
row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
43、HTTP
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhZT4NF4-1652771139807)(C:\Users\Stereo\AppData\Roaming\Typora\typora-user-images\image-20220218114412858.png)]
44、去重插入
45、单一多条返回处理策略
46、日期解析器
@Configuration
public class LocalDateTimeSerializerConfig {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
public LocalDateTimeSerializer localDateTimeDeserializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
}
日期字段输出
47、文件配置所在地
48、数据库实例配置
https://jingyan.baidu.com/article/00a07f381d59fc82d028dcc9.html
49、tcping 特定端口
https://jingyan.baidu.com/article/c1a3101e878dcede656deb05.html
50、@RequestParam和@RequestBody
注解@RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。
RequestParam可以接受简单类型的属性,也可以接受对象类型。
@RequestParam有三个配置参数:
required 表示是否必须,默认为 true,必须。
defaultValue 可设置请求参数的默认值。
value 为接收url的参数名(相当于key值)。
json @RequestBody
普通就 @RequestParam
51、服务器不注册进入Eureka
eureka.client.register-with-eureka 配置成false
52、数据库连接
数据库配置
53、使用stream去重List对象集合
单属性:
List<Course> arrayList = courseThirds.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing( Course::getBjmc))),ArrayList::new));
多属性:
List<Course> arrayList = courses.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(
o -> o.getKcmc() + ";" + o.getJsbh() + ";"
+ o.getZc() + ";" + o.getXq() + ";" + o.getJc())
)), ArrayList::new));
54、
JSONObject.toJavaObject
Objects.equals
IMS
1
再强调一下,你们在sql里做运算,或者取数的话,一定要加上nvl0,如果是除数就改为nvl1