ARTS挑战第七周

Algorithm

复习题:

  • 99. 恢复二叉搜索树:使用o(1)空间复杂度算法,先用lvr算法找到左边异常点:如果当前节点值小于上一个节点值,则上一个节点是异常节点。再用rvl算法找到右边节点,如果当前节点值大于上一个节点值,则说明上一个节点是异常节点。这个最好还是举个例子画画,不然容易错。
  • 560. 和为K的子数组 preSum[i] = preSum[i-1]+nums[i-1],表示前i个数的和。然后枚举所有的k=sum[i…j]=preSum[j+1]-preSum[i].但这个枚举i,j的过程是N次方复杂度,会超时。我们在遍历j时,只需要知道有多少个preSum[i]=preSum[j+1]-K.因此在计算preSum数组时,可以统计前面出现过的所有的preSum的次数,通过hash表直接拿到这个次数,用这个次数加上去就好。

新题

Review

DTO, DAO and MVC Concept

DTO: Data Transfer Object,是用来在类以及模块之间的传输对象,一般只包含私有变量以及gettter、setter、constructor,一般不包含业务逻辑

DAO:Data Access Object,是用来封装数据库CRUD逻辑的类

以下代码是DAO和DTO区别的例子

interface PersonDTO {
    String getName();
    void setName(String name);
    //.....
}
interface PersonDAO {
    PersonDTO findById(long id);
    void save(PersonDTO person);
    //.....
}

DTO和DAO都是MVC中的model部分,MVC是将整个应用划分为Model、View、Controller三部分。

Concurrency in Java 8— Oversimplified

关于java8 的并发编程极简入门教程,感觉比较实用,翻译了一下翻译文章

Tips

  1. 利用 n&(n-1) 可以消除二进制表示的最右边一个1,利用n&(-n)可以拿到二进制表示的最右边一个1
  2. cache伪共享是指多个线程修改独立的变量时,这些变量共享同一个cache line,系统保证cache一致性会将整个cache line锁定,导致出现资源竞争。解决的办法就是给变量添加padding,对齐cache line大小(64字节),从而让这些变量处于不同cache line https://www.cnblogs.com/cyfonly/p/5800758.html
  3. CAS(CompareAndSwap)存在ABA问题,即cpu1将值从A改到B再从B改到A,CPU2进行CAS操作时,由于运来的值还是A,因此会成功,这样会覆盖掉cpu1的修改。解决的办法就是给值加上版本号。
  4. c++ set遍历时,会按照从小到大的顺序排序。
  5. c++ list (双链表)需要记住的用法:push_back、pop_back、push_front、pop_front、insert(iterator, value)、erase(iterator)。首元素 front,尾元素 back
  6. linux-shell 位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1$2$3丢弃,$0不移动。不带参数的shift命令相当于shift 1

Share

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值