摘要:
数组和切片的区别? 数组是同一种数据类型元素的集合,数组在定义时需要指定长度和元素类型: 例如:[3]int [3]int{1,2,3} [...]int{1,2,3} 如果数组作为函数的参数,实际传递的是一份数组的拷贝,而不是数组的指针,在函数中修改数组元素不会影响到原始数组。 切片更加常用,它是 阅读全文
摘要:
使用值为nil的slice和map会发生什么? 在nil切片中添加元素成功。在nil的map中添加会panic,因为map没有分配实际内存。为空的切片底层数组的指针为nil,但是len,cap都是0,当append时,go会自动分配新的底 层数组。 2.访问map的key需要注意什么? 当访问map 阅读全文
摘要:
PG的mvcc模式:多版本并发控制,通过在数据库中创建多个版本的数据来实现并发的读写操作。每个数据库事务都能够看到一个逻辑上一致的数据库快照,当一个事务修改了数据库中的数据时,他不会直接修改原始数据,而是创建一个新的数据版本,并将修改后的数据写入新的数据版本中,这样其他事务依然可以读取到旧的数据版本 阅读全文
摘要:
Casbin元模型: PERM模型 P(策略)={sub,obj,act,eft}一般存储到数据库 Sub:访问实体,一般是用户或者角色,可以用来表示用户的身份信息 object:被访问的资源,例如 文件,数据库表等 act:访问的方法,例如读取,写入。 eft:策略结果,一般为空,默 认指定all 阅读全文
摘要:
数据库中,datetime和timestamp区别? Datetime类型表示时间,可以精确到秒或更小精度,存储1000-9999年的时间 Timestamp表示时间,存储1970年1月1日经过的秒数(也叫UNIX时间戳),存储1970到2038年时间。 区别:datetime使用固定长度,不受时区 阅读全文
摘要:
内存管理对堆而言的,程序在运行时主动从堆上申请内存,这些内存通过go的内存分配器分配,由垃圾回收器回收。栈是每个goroutine独有的,不需要在操作的时候加锁,而堆上的内存有时需要加锁防止多线程冲突。对程序上的内存回收需要通过标记清除阶段,比如采用三色标记法。对栈而言,他的分配和释放是十分廉价的, 阅读全文
摘要:
PG表继承inherits继承表的关键字例子:create table A(name(char(2)) inherits (B) A表继承B表特性: 1.查看数据:查询父表可看子表,可以使用only,只看父表。 2.删除数据:删除父表的数据,子表和父表数据都会被删除;只删除子表数据不会影响父表。 3 阅读全文
摘要:
1.对Go的理解 它是一种编译型,并发型,拥有GC的编程。它不是面向对象语言,不具备封装,继承和多态,但是可以实现,通过interfance{}接口来实现多态性。 没有做异常处理,不能像java一样try...catch...,但是可以通过panic,defer和recover来处理。 其他语言的函 阅读全文
摘要:
Springboot自动装配流程: 1.首先初始化SpringbootApplication对象:它是一个复合注解,里面主要有@SpringbootConfiguration,@EnableAutoConfiguration,@ComponenScan。 @SpringbootConfigurati 阅读全文
摘要:
-高并发:以后这个系统的用户肯定越来越多,我们要考虑高并发的问题。最主要的是缓存和负载均衡!!! 静态资源存储在云端,并做cdn加速。Css和js做压缩再存储云端。 CDN加速:尽可能避开互联网上可能影响数据传输的速度和稳定性的瓶颈和环节,使内容传输更快,更稳定。CND加速需要依靠各个网络节点,比如 阅读全文
摘要:
线程池 线程的状态:1新建状态(没启动) 2 可运行状态(可能在运行,也可能等待cpu时间片) 3 阻塞(等待获取排他锁,或者等待其他线程唤醒,不醒无法获取时间片)4 限期等待(一段时间后被系统自动唤醒) 5 死亡:可能任务执行结束或产生异常结束。 线程池的状态: RUNNING:运行状态,可以接受 阅读全文