ARTS 第3周

2019-04-21  本文已影响0人  陈卧虫

ARTS 第3周分享

[TOC]

Algorithm

832. Flipping an Image

难度:[easy]

[思路]

  1. 先flip,再invert

  2. flip将二维数组中的每一个数组进行flip,所以先遍历这个二维数组

  3. 对每个一维数组进行flip

    • 倒叙遍历这个数组,结果用一个新数组存储
    • 用新数组替换原数组
  4. invet,两层循环遍历所有元素,将每一元素0和1互换即可

[参考代码]

func flipAndInvertImage(A [][]int) [][]int {
    // flip
    for i, v := range A {
        vr := make([]int,0)
        for ii:=len(v)-1; ii>=0; ii-- {
            vr = append(vr, v[ii])
            fmt.Println(vr)
        }
        A[i] = vr
        fmt.Println(A[i])
        fmt.Println("vr********************")
    }
    fmt.Println(A)

    // reverse
    for io, v := range A {
        for ii, vi := range v {
            if vi == 0 {
                A[io][ii] = 1
            } else {
                A[io][ii] = 0
            }
        }
    }
    return A
}

Review

Go 系列教程 —— 15. 指针:https://studygolang.com/articles/12512

主要讲的对go语言指针的基本介绍已经使用

Tips

vim 分屏的使用总结

这周分享两个本周自己碰到的问题工作小问题以及总结吧

第一个是vim的分屏,本人golang程序员,使用vim模式的goland开发,在Goland中开启分屏是很麻烦的,于是就想直接使用vim命令来开启和关闭分屏,额,就是为了高效(懒),

下面就是我查资料以后觉得比较有用的vim分屏操作的一个整理

新建分屏

解释:[]中括号表示可有可无,n表示数字

  1. 命令行模式下
  1. 分屏打开两个文件
  1. 分屏新建文件

切换分屏

a. 把光标移到右边的屏中
ctrl+w l
b. 把光标移到左边的屏中
ctrl+w h
c. 把光标移到上边的屏中
ctrl+w k
d. 把光标移到下边的屏中
ctrl+w j
e. 把光标移到下一个屏中
ctrl+w w
f. 把光标移到上一个屏中
ctrl+w p

移动分屏

a. 向右移动
ctrl+w L
b. 向左移动
ctrl+w H
c. 向上移动
ctrl+w K
d. 向下移动
ctrl+w J
e. 向下旋转窗口 没效果
ctrl+w r
f. 向上旋转窗口 没效果
ctrl+w R
g. 当前窗口与下一个窗口对调 只限于开启双屏
ctrl+w x

关闭分屏

git rebase

git rebase之前也会使用,作用就是让提交记录变成直线而不是各种开叉与合并,这对于强迫症的我来说是一个相当实用的命令了,

以前都是这种情况:

我的本地分支落后于远程分支,但是我在本体提交了,所以我push推送到远端时会失败,我就需要先pull拉取远端的代码到本地,这时候git就会为你自动合并。一般这时我会使用git rebase 它会把分叉的提交变成直线,之后,我才push到远端。

但是这次却出了一个问题,我和leader同时改了一个文件,并且他先推送到远端,这就导致我的版本落后于远端,所以我只能先pull拉取他的代码啦,结果肯定是冲突了。

我解决完冲突再次commit之后,我就使用了git rebase命令希望把开叉变成直线,结果是我失败啦!开叉还是存在,我还自动进入了一个新的分支中去,之后就是一段胡乱操作猛如虎,自己都忘了自己做了啥,最终勉强提交上去了,但是那个开叉去一直存在了,它成了我心中的痛。。。

痛定思痛之后我决定仔细研究一番git rebase

以下是总结链接:

https://www.jianshu.com/p/39c45f990c99

Share

漫话:如何给女朋友解释什么是乐观锁与悲观锁:
https://mp.weixin.qq.com/s/TZy8iIGDL3gHPhVxTnJDeQ

实现并发控制的主要手段就是通过锁:

悲观锁

在修改数据前,先锁定(Pessimistic Concurrency Control,缩写“PCC”)

实现方式:通过数据库的锁机制

乐观锁

不使用锁,通过记录数据版本,对比版本判断是否修改( Optimistic Locking Control,OLC)

实现方式:检测版本和更新数据 Compare and Swap(CAS)

//查询出商品库存信息,quantity = 3
select quantity from items where id=1;
//修改商品库存为2
update items set quantity=2 where quantity=3;
  1. 在更新之前查询数据库表中当前库存数(quantity),

    然后在做update的时候,以刚从库存查询出来的数值作为一个修改条件。

  2. 提交更新的时候,判断数据库表对应记录的当前库存数与第一次取出来的库存数进行比对。

缺点:传说中的ABA问题

解决方案:增加递增记录版本的字段:version

//查询出商品信息,version = 1
select version from items where id=1;
//修改商品库存为2
update items set quantity=2,version=3 where id=1 and version=2;

每次操作的版本号都会随之增加,所以不会出现ABA问题,因为版本号只会增加不会减少.

减小乐观锁力度,最大程度的提升吞吐率,提高并发能力!如下:

update item
set quantity=quantity-1
where id=1 and quantity-1>0;

以上SQL语句中,如果用户下单数为1,则通过quantity - 1 > 0的方式进行乐观锁控制。

以上update语句,在执行过程中,会在一次原子操作中自己查询一遍quantity的值,并将其扣减掉1。

高并发环境下锁粒度把控是一门重要的学问,选择一个好的锁,在保证数据安全的情况下,可以大大提升吞吐率,进而提升性能。

总结:加锁一定要考虑粒度!

本周阅读

第三周:1,2,4,5,7
漫话:如何给女朋友解释什么是乐观锁与悲观锁:https://mp.weixin.qq.com/s/TZy8iIGDL3gHPhVxTnJDeQ
跟我一起写 Makefile(一):https://blog.csdn.net/haoel/article/details/2886

一个好的 Go 语言 Makefile 是怎样的:https://mp.weixin.qq.com/s/wPnDnxtWQzmoMoCV8DSUKg
都是关于makefile编写,自己还是不太懂。
跟我一起写 Makefile(二): https://blog.csdn.net/haoel/article/details/2887
跟我一起写 Makefile(三): https://blog.csdn.net/haoel/article/details/2888
跟我一起写 Makefile(四):https://blog.csdn.net/haoel/article/details/2889
vim分屏操作: https://www.jianshu.com/p/52949caa7e93
在goland的vim模式中的分屏快捷键:
垂直分屏:vs ( vertical split)
水平分屏:sp ( SPlit )
关闭分屏:qa (quit all)

- 空

git rebase 使用详解:https://blog.csdn.net/chenansic/article/details/44122107
[golang] struct转JSON,解析JSON:https://blog.csdn.net/shachao888/article/details/53840577

Go的竞态探测器: https://brantou.github.io/2017/05/23/go-race-detector/
如何提升你的能力?给年轻程序员的几条建议: https://tech.glowing.com/cn/advices-to-junior-developers/?utm_medium=website&utm_source=gank.io%252Fxiandu

-

3.6 Git 分支 - 变基:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
Go 系列教程 —— 15. 指针:https://studygolang.com/articles/12512
上一篇下一篇

猜你喜欢

热点阅读