日常学习回顾与汇总

日常学习回顾与汇总

20200321 星期六

mysql

1
2
3
4
5
6
7
8
9
group_concat()与group by一起使用,支持排序

group_concat( columnA order by columnA desc/asc)

distinct columnA,columnB

cast(columnA as decimal(20,4))

case when 表达式 then 结果 when 表达式2 then 结果 else 结果 end

English

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
I love dog. 我爱吃狗肉
dog eat dog 残酷的竞争
Love me , love my dog. 爱屋及乌
Every dog has its day. 凡人皆有出头之日

fish out of water 尴尬,不自在的人
She is blackwashed. 有人黑你
Come out in the wash. 真相大白
Come on be reasonable. 理智一点

reputation 声誉声望

play my foot in my mouth 说错话
a slip of the tongue 口误 说漏嘴
my foot 我不信,得了吧
foot the bill 买单
keep a foot in both camps 脚踏两只船

java

if…else的优化

  1. 提前return ,去除不必else

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    private static void one() {

    int a = 10;
    int b = 100;

    // 优化前
    if (a < b) {
    System.out.println(b - a);
    } else {
    return;
    }
    //优化后
    if (b <= a) {
    return;
    }
    System.out.println(b - a);

    }
  1. 三目运算符

  2. 使用枚举

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    private static void three() {
    int status = 5;
    String statusName = "";

    //优化前
    if (status == 0) {
    statusName = "临时保存";
    } else if (status == 1) {
    statusName = "提交";
    } else if (status == 2) {
    statusName = "审批";
    } else if (status == 3) {
    statusName = "拒绝";
    } else if (status == 4) {
    statusName = "回收";
    } else if (status == 5) {
    statusName = "删除";
    }

    //优化后
    statusName = Status.getStatusName(status);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    package base;

    public enum Status {
    temp(0,"临时保存"),save(1,"提交"),sp(2,"审批"),hs(3,"回收"),jj(4,"拒绝"),delete(5,"删除");

    public static String getStatusName(int value){
    for(Status o: Status.values() ){
    if(o.getValue() == value){
    return o.getDesc();
    }
    }
    return "";
    }


    private int value;
    private String desc;

    public int getValue() {
    return value;
    }

    public void setValue(int value) {
    this.value = value;
    }

    public String getDesc() {
    return desc;
    }

    public void setDesc(String desc) {
    this.desc = desc;
    }

    Status(int value, String desc) {
    this.value = value;
    this.desc = desc;
    }
    }
  1. 合并条件表达式

    多个表达式,可以进行判断的进行何在一个条件里面进行判断

  2. 使用optional

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String name = "张三";
    //优化前
    if(name != null){
    System.out.println(name);
    } else {
    System.out.println("NULL");
    }

    //优化后
    Optional<String> nameOP = Optional.of(name);
    // JAVA9
    nameOP.ifPresentOrElse(System.out::println, () -> System.out.println("Null"));
  1. 表驱动法

    表驱动法,又称之为表驱动、表驱动方法。表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或case)来把它们找出来的方法。以下的demo,把map抽象成表,在map中查找信息,而省去不必要的逻辑语句。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 优化前
if (param.equals(value1)) {
doAction1(someParams);
} else if (param.equals(value2)) {
doAction2(someParams);
} else if (param.equals(value3)) {
doAction3(someParams);
}
//优化后
Map<?, Function<?> action> actionMappings = new HashMap<>(); // 这里泛型 ? 是为方便演示,实际可替换为你需要的类型
// 初始化
actionMappings.put(value1, (someParams) -> { doAction1(someParams)});
actionMappings.put(value2, (someParams) -> { doAction2(someParams)});
actionMappings.put(value3, (someParams) -> { doAction3(someParams)});
// 省略多余逻辑语句
actionMappings.get(param).apply(someParams)
  1. 优化逻辑结构,正常流程走主干

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //优化前
    public double getAdjustedCapital(){
    if(_capital <= 0.0 ){
    return 0.0;
    }
    if(_intRate > 0 && _duration >0){
    return (_income / _duration) *ADJ_FACTOR;
    }
    return 0.0;
    }
    //优化后

    public double getAdjustedCapital(){
    if(_capital <= 0.0 ){
    return 0.0;
    }
    if(_intRate <= 0 || _duration <= 0){
    return 0.0;
    }
    return (_income / _duration) *ADJ_FACTOR;
  1. 策略模式+工厂方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        String medalType = "guest";
    if ("guest".equals(medalType)) {
    System.out.println("嘉宾勋章");
    } else if ("vip".equals(medalType)) {
    System.out.println("会员勋章");
    } else if ("guard".equals(medalType)) {
    System.out.println("展示守护勋章");
    }

    //勋章接口
    public interface IMedalService {
    void showMedal();
    String getMedalType();
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    //守护勋章策略实现类
    public class GuardMedalServiceImpl implements IMedalService {
    @Override
    public void showMedal() {
    System.out.println("展示守护勋章");
    }
    @Override
    public String getMedalType() {
    return "guard";
    }
    }
    //嘉宾勋章策略实现类
    public class GuestMedalServiceImpl implements IMedalService {
    @Override
    public void showMedal() {
    System.out.println("嘉宾勋章");
    }
    @Override
    public String getMedalType() {
    return "guest";
    }
    }
    //VIP勋章策略实现类
    public class VipMedalServiceImpl implements IMedalService {
    @Override
    public void showMedal() {
    System.out.println("会员勋章");
    }
    @Override
    public String getMedalType() {
    return "vip";
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //勋章服务工产类
    public class MedalServicesFactory {
    private static final Map<String, IMedalService> map = new HashMap<>();
    static {
    map.put("guard", new GuardMedalServiceImpl());
    map.put("vip", new VipMedalServiceImpl());
    map.put("guest", new GuestMedalServiceImpl());
    }
    public static IMedalService getMedalService(String medalType) {
    return map.get(medalType);
    }
    }
    1
    2
    3
    String medalType = "guest";
    IMedalService medalService = MedalServicesFactory.getMedalService(medalType);
    medalService.showMedal();

JVM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-XX:MetaspaceSize=128m 元空间默认大小

-XX:MaxMetaspaceSize=128m 元空间最大大小

-Xms1024m 堆最大大小

-Xmx1024m 堆最小大小

-Xmn256m 新生代大小

-Xss256k 栈最大深度

-XX:SurvivorRatio=8 新生代分区比例(8:2

-XX:+userConcMarkSweepGC 指定CMS收集器

-XX:+printGCDetails 打印详细的GC日志

20200325 星期三

English

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Eat one's words   收回前言  承认错误
Break one's word 食言
keep one's word 守信用 履行诺言
cut it out 省省吧 闭嘴

level off 稳定下来

go to your room 你完蛋了(来源于美国把孩子关小黑屋)
sleep late 睡到很晚才起来
It's sick 狂拽炫霸
I feel you 我懂你
You are a chicken 胆小鬼 胆怯的人

prise 赞扬 钦佩
compliment 赞美称赞
flatter 奉承 讨好
Good for you 干的漂亮
fire something off 匆忙寄发(邮件等)

Don't go around something the world owes you a living.The world owes you nothing.
别到处跟别人抱怨这个世界欠你什么,这个世界什么都不欠你的。

bad apple 坏家伙

a cool fish 冷漠的人,态度冰冷的人

drawn-out 冗长的

You have a phone call 你来电话了
It is your call 这是你的电话
Your phone is ringing.

hang up 挂断
answer the phone 回电话
screen your calls 不方便接电话/骚扰电话

I have got the wrong number 打错电话

It didn't get through 电话打不通

I'm broke. 我没钱了。

make heavy weather of sth 小题大做
replacement 代替 替补
take out the rubbish. 扔垃圾

mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
count(column)  查询不为null的数目
count(*) sql标准用法,查询所有数据

mysql执行引擎:InnonDB MyISAM

MyISAM:表级锁,可以把表的总行数记录下来,会直接把行数返回,前提是没有where 条件
MyISAM做了一个简单的优化,那就是它可以把表的总行数单独记录下来,如果从一张表中使用COUNT(*)进行查询的时候,可以直接返回这个记录下来的数值即可。

InnonDB:支持事务,行级锁
InnoDB中索引分为:
聚簇索引(主键索引)->查询的是整行记录
非聚簇索引(非主键索引)->该行记录的逐渐值

非聚簇索引比聚簇索引小很多,mysql优先选择最小的非聚簇索引来扫表,故在建表时,创建一个非主键索引很有必要。

InnonDB: count(1)和count(*) 查询速率是一样的

Mysql索引扫盲总结

其他

模因:英文 meme

基因使得各种物种生物把自己的生理特征遗传给下一代。

模因使得人类把思想、行为传播给其他人。

两者有区别:遗传性(童话,诗歌)、变异性(改编童话)、选择性(适者生存)

传播方式、表理行事、自主选择权

20200330

mysql

  • 尽量使用select 具体字段

    • 节省资源,减少网络开销
    • select * 可能不会使用到覆盖索引
  • 如果知道只有一条结果,建议使用limit 1

    • 如果存在limit 1 找到第一条就会返回不会继续扫描
    • 如果查询条件为唯一索引的话没有必要加上limit 1 ,因为唯一索引也是在查找到第一个记过后进行返回0
  • 尽量避免在where语句众使用or进行连接条件

    • 使用or可能会使索引失效,从而扫描全表,使用union all

      1
      select * from t_user where id= 1 union all select * from t_user where name = '张三'

      如果name没有索引,操作为:索引扫描+全表扫描+合并

  • 优化limit分页

    • 当偏移量很大时,limit就会很低下

      1
      2
      3
      4
      select * from t_user limit 100000,10
      -- 改造后
      select * form t_user where id >100000 limit 10
      -- 或者

本文标题:日常学习回顾与汇总

文章作者:wsylp

发布时间:2020年03月22日 - 17:03

最后更新:2020年03月30日 - 13:03

原始链接:http://wsylp.top/2020/03/22/日常学习回顾与汇总/

许可协议: 本文为 wsylp 版权所有 转载请保留原文链接及作者。

-------------本文结束感谢阅读-------------