buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

《这个让传“秒”,那个让传“毫秒”....别懵逼,应用开发中有这些常识》/《从“胡椒按两卖,白菜按斤卖”看应用软件开发的常识》

《这个让传“秒”,那个让传“毫秒”....别懵逼,应用开发中有这些常识》/《从“胡椒按两卖,白菜按斤卖”看应用软件开发的常识》

菜市场上,买胡椒、孜然等佐料得按两买,买大白菜、土豆是按斤买。

一个人的身高,单位用cm即可;北京到上海两个城市间的距离,则要用km来表示。

这些是生活常识。

 

到我们软件开发上,也有类似的常识。

例如:系统间通信的连接超时时间,单位是毫秒。http的connect timeout的单位是ms,springrabbitmq的重试间隔是ms,同样的有redis分布式锁的等待时间。而我们使用缓存来缓存数据时,缓存的TTL通常用秒就可以了,你设置一个毫秒级的缓存,意义也不大。再例如,定时任务的执行间隔,用秒或分钟来控制。

再例如:我们命名“订单号”时,是叫orderNo呢,还是叫orderId呢?这涉及到id与no的区别。id是单词“identity”的缩写,唯一标识的意思,我们的数据表里通常有一个主键字段叫id,就是这个意思。no呢,这里的no不是yes的反义词哦,no指代Number单词的缩写NO.,NO.1代表1号、第一、第1号、第一位、第一名等含义,NO.2代表2号、第二、第2号、第二位、第二名等含义。就是说,no表示序号、编号。因此,我们可以下结论————“订单号”命名为orderNo更合适一些。BTW,就像把C#误读作“C井”一样,你orderNo读作order/nəʊ/,同样会闹笑话。

再例如:分页的页码,pageNo与pageIndex,用哪一个呢?上面已经解释了no的意思了,表示序号、编号,所以,如果用pageNo的话,那么,pageNo的取值是从1开始的。再说index,index表示下标/索引, index是从0开始计数。所以,如果用pageIndex的话,那么,pageIndex就应该从0开始取值。 通常情况下,前端分页控件用pageNo,后端数据库分页查询时,将pageNo转换为SQL的offset计算。而之于后端数组分片等场景,则是以index的形式定义,符合编程语言约定。

 

开发如同生活,不同的场景需要不同的度量单位。掌握这些常识,能避免我们在日常开发中犯一些低级错误,也能让我们的代码更加专业。如同厨师不会用天平称白菜,专业开发者懂得在合适的场景使用合适的度量单位。这些看似微小的选择,正是区分代码工匠与普通码农的关键所在。


 

PS:来说一个技术点,List作为参数数据丢失问题

下面方法,执行foo1,结果会是什么?

private void foo1() {
    List<String> list =new ArrayList<>();
    foo2(list);
    System.out.println("---outside="+list);
}

private void foo2(List<String> list) {
    list = Arrays.asList("123", "dsf");
    System.out.println("---internal="+list);
}

结果如下。 调用foo2之后,list的值依然是空集合。

---internal=[123, dsf]
---outside=[]

 

你是不是以为list应该是[123,dsf]呢? 那就错了。

来看看IDE中这个foo2,list参数是灰色。并且,IDE还提示你,这种情况可以把list作为局部变量。

 

根据IDE提示

重构后→

 

 

这是java的一个基础知识点。 当List作为方法入参时,你在方法里可以改变List中的元素,包括增减元素,但是不能给List对象重新赋值。严格来说,对于引用类型来说,当引用对象作为方法参数时,我们在方法内部只可更改内存中的内容,但不可变更内存地址。 下面的案例同样证明了这一点。

private void foo1() {
    Account entity=null;
    foo2(entity);
    System.out.println("---outside="+entity);
}

private void foo2(Account obj) {
    obj=new Account();
    System.out.println("---internal="+obj);
}

结果输出的是:

---internal=Account(id=null, accountId=null, accountName=null, ...)
---outside=null

 

posted on 2023-03-24 16:56  buguge  阅读(243)  评论(0)    收藏  举报