踩坑记stupidone

假如访问一个HTTP接口,本来是POST的去到哪里变GET了,可以认为是redirect导致的,因为redirect都只能是GET,比如301

情况就是在HTTP访问,但是后台只希望HTTPS,就会发生301redirect

2021-01-1920:51:14

1.文件名带上pid

2.使用第三方管道链接吧rotatelogs

2021-01-0418:13:20:

头条中的thrift都是copy一份的,不知道为什么要深copy

#FAQs:#Q:为什么这里的base.thrift与service_rpc/idl/base.thrift不一致?#A:service_rpc/idl/base.thrift生成的C++代码是无法编译通过的。#TrafficEnv使用相同的字段类型和字段名,C++中有名字冲突;Client字段在fbthrift中是保留字。##Q:使用这里的base.thrift与service_rpc/idl/base.thrift是否兼容?#A:使用BinaryProtocol传输是完全兼容的,而你也不应该使用其他的Protocol。##Q:golang代码可以依赖这里的base.thrift吗?#A:可以,golang生成的代码大小写是依据golang的语法,而不是idl的定义。#但是基于kite和data/idl在路径约定方面的差异,可能你会碰到一些困难。##Q:python代码可以依赖这里的base.thrift吗?#A:可以。如果依赖了data/idl生成的python代码,后续要迁移到pie框架时需要注意字段名字的改变。#由于python不是编译执行的,这样的错误可能会发生在运行时。##Q:我的idl既要在C++中使用,又要在python/golang中使用,怎么办?#A:既提交到data/idl,又提交到service_rpc/idl。在两个库中,依赖各自的base.thrift。##Q:为什么要维护两份idl,不能统一吗?#A:如果你尝试过然后失败了,请把下面的计数器+1。#4ViewCode

2020-12-2818:34:09:

1.在cronjob命令中,&>/tmp/log是没用的,因为cronjob用的是/bin/sh这个shell,而这个命令是用在/bin/bash

2.在一些shell运行的后台命令中,我们应该重定向stdin(注意是stdin,不是stdout和stderr),因为怕这个进程开启一些子进程,然后这些子进程需要从terminal输入,这样就一直hang住了,所以需要加上

3.python的print是有buffer的,可以用python-u处理Forcethestdoutandstderrstreamstobeunbuffered.Thisoptionhasnoeffectonthestdinstream.

2020-08-0320:25:23:

IO多路服用,就是用来检测IO是否可操作的一种机制。

1.端口只有65535个,怎么维持百万的链接.fd可以有很多个(源ip,目的ip,源端口,目的端口,协议)

2.reactor/proactor

3.网络模型

1.epoll+多线程.(a&b)

a.read主线程,其他放去thread

b.每一个fd可读,直接放去thread

2.epollaccept+1:n网络模型.accept+8*thread。强CPU处理

3.epolln*accept+m*thread.强接入能力

4.所有的sockFD

1.listenfd->accept

2.clientfd->recv/send

2020-7-2320:41:15:

协程就是一个轻微的调度单位,他希望有异步的效率,和同步的写法。

客户端的同步异步:

1.同步:一个请求,一个相应。

2.异步:一个请求,两个请求。一个相应,两个相应。

服务器的同步与异步:

1.同步:经过epoll_wait知道哪些fd可读后,单线程处理。

2.异步:经过epoll_wait知道哪些fd可读后,多线程处理。这种方法麻烦,比如fd1正在处理,epoll又告诉了其他线程,fd1又有数据了,这样就多个线程共用一个fd的现象了.

同步的流程改成异步(提高效率):

1.commit

1.1:创建好fd(就是socket)

1.2:准备数据

1.3:send

1.4:加入去epoll监听(epoll_ctl),准备callback

2.callback:需要另外一个线程支持,相当于回调接口

2.1:epoll_wait()

3.create_context()

4.destroy_context()

异步的会了,协程的写法是,放去epoll监听后,不要马上结束了,想同步得到数据,这样写起来舒服

所以需要:

1.yiled

2.resume

怎么实现

1.setJump/longJump

2.uContext

3.自己实现,汇编操作

线程怎么调度,以X86为例子,有15个寄存器,一个running的线程,save好所有寄存器,然后其他线程的,load去现在的cpu

yeild到epoll_wait中

resume到一个协程

AIO异步IO和IO异步操作的区别

1.他们没可比性,AIO不是一个操作。IO异步操作就是服务器的异步操作。

2.AIO,内核提供的一种,在内核态里面,假如IO有数据了,(io_setup)回调用户态的东西。

3.思考题:为什么有了AIO,服务器编程还是不用呢?因为它是内核态阻塞的

2020-07-1711:20:14:

nginx顶在前面意味着对于后端python来说是低并发高频率的请求

2.并发连接数:某个时刻服务器最大并发

3.并发用户数:注意,一个用户可能很多个连接

top,htop命令中的

1.VIRT:虚拟内存大小

2.RES:常驻内存大小

3.SHR:共享内存大小

阻塞IO:发起一个recvfrom,内核会挂起直到有数据得到。

非阻塞IO:发起一个recvfrom,如果没有数据就会返回EWOULDBLOCK状态码,应用要一直读。

IO复用模型:如果用第一种,N个请求需要N的线程一直询问。浪费太多线程了,然后这种用select(一个线程去询问),有数据后callback原来的线程(或者有数据后再起一个线程去跑)(起可以是用线程池的,不需要真的起)。

信号驱动IO模型:select还是在应用层轮询,现在这个交给内核做。内核返回可读了给应用线程。

异步IO:这个内核有数据,直接复制好数据,然后通知应用线程。

同步和异步永远都是一个宏观的概念,阻塞非阻塞是微观的,就是细节化是不是应该一直等待

1.同步阻塞,就是requests

2.同步非阻塞,就是request一个task,然后一直轮询这个task

3.异步没有阻塞

4.异步非阻塞,就是有结果,他们再来一个callback

为什么多线程访问同一个变量需要加锁?

因为有高速缓存这个东西,内存相对于cpu来说太慢了,所以cpu会把值读入cpu的高速缓存,然后来操作,最后再覆盖原来那个值。所以就会出现冲突。

解决方法1:

cpu总线锁,锁住cpu去那块内存拿值。但是上面的方式会有一个问题,由于在锁住总线期间,其他CPU无法访问内存,导致效率低下。

解决方法2:

内存一致性协议,比如我写下去了,然后就标志一个位置说明他是写过了,以后别人读或者写都要重新load之类的。

我们需要保证的是:

有序性:

有指令重排序风险

线程1:

isTrue=True

线程2:

whileisTrue:

do。。。

这样是不安全的,可能有先while,后赋值的风险。

需要用lock来保证。

可见性:

用volatile修饰的东西,马上会写进去主存,就是没有了高速缓存这个概念了。

原子性:

2020-04-2918:34:41:

ddif=/dev/urandomof=1GB.binbs=4Giflag=fullblock

2020-04-2514:26:29:

py

decode和encode不同:

>>>b=b"\347\262\244AB223\350\257\225">>>b.decode("utf-8")'粤AB223试'>>>b.decode("utf-8").encode("utf-8")b'\xe7\xb2\xa4AB223\xe8\xaf\x95'

2020-04-1423:30:41:

在netstat-apn|grep-i3000如果出现下面情况,其实是只有247那个是本机的,下面那个是其他container的,只是通过某个东西链接起来了。

tcp000.0.0.0:30000.0.0.0:*LISTEN247/nctcp000.0.0.0:30000.0.0.0:*LISTEN-

2020-04-1411:23:55:

1.dockerrun--rmbusyboxnslookuparchive.ubuntu.com100.100.2.136

2.在本机中:nslookuparchive.ubuntu.com是可以的。

2020-04-1322:54:02:

HTTP要做到安全,两条路:

1、加密通讯隧道本身

这种就是SSL

1.1:相当于是有身份证

2、加密通讯信息:

2.1:这个做法是防止不了篡改的。

2.1.1:无法确定请求的目标主机,是否真的是那台,不然就可能是肉鸡。

2.1.2:无法确定返回请求的是否真实的客户端,这样就可能是假的客户端。(配合肉鸡,使得服务器也发现不了。

总结就是无法确认通信的双方。

2020-04-0420:10:18:

比如设计一个汽车:

汽车--》车身(就是车的framework)--》底盘(bottom)--》轮胎(wheel)

如果这样设计,car=newCar()

如果我需要改变轮胎大小呢?就需要car=newCar(wheel_size=20),然后不断传递下去。。。就会经历很多层。这个做法叫做下层控制上层。

怎么处理呢?

1.其实是newCar的时候,需要传入更多的参数,就是用DI的思想。

size=40wheel=newWheel(40)bottom=newBottom(wheel)framework=newFramework(bottom)car=newCar(framework)这样更改大小,就需要更改wheel类而已。

2.当然还可以用getter、setter

IOCcontainer:就是把上面new的过程,用xml写好,后面写文件直接生成。这样后面的人写代码的时候,不需要知道这个service具体是怎么创建的,只需要知道他的config就ok了。

2020-03-3100:54:25:

1、gomodinitgithub.com/vinsia/fly

2、using./script/setup.sh

2020-03-3016:11:51:

1、std::unique_ptr解决的问题就是防止两个地方指向同一个内存,然后主动析构就GG了,如果不析构,内存又一直在。std::unique_ptr禁止使用=符号,每次移动都要用std::move,然后原来那个就失败了。

2、std::shared_ptr就是用引用计数然后释放内存。

3、

拷贝构造函数

Person(constPerson&p)=delete;

2020-03-2912:03:57:

2020-03-2801:58:41:

如果某个网站有些按钮登陆不上,比如google登陆账号登陆不上,按next没反应。

可以试试关掉vpn,改变dns。

2020-03-0817:39:53:

ulimit-a

1.系统设置的最大fd数量会影响并发数。

4.确认长连接:

2020-02-2623:01:16:

1.选项-c用来告诉编译器编译源代码但不要执行链接,输出结果为对象文件。输出为:xx.o

2.g++--std=c++11main.cpp-omain得到的就是main一个可执行文件,如果不加-o,得到的就是a.out这个可执行文件。

3.所谓静态编译,就是将xx.a和目标文件一起连接打入到可执行文件中。使用ar工具,可以编译出静态库。

静态编译的弊端:

1.文件大。银盘要的大

2.全量更新。

2020-02-2617:51:30:

查看一个函数是否协程:

importinspect

ifinspect.isgeneratorfunction(func):

2020-02-1311:55:26:

59.43是CN2路线

2020-02-1221:34:01:

DHCP(动态主机配置协议):

2020-02-1216:50:35:

2020-2-922:57:41:

1、HTTP的TCP的连接什么时候会断开?HTTP1.0默认对开,服务器可以设置connection:keep-alive,初始化连接+ssl开销消失了,证明是同一个TCP连接。HTTP1.1默认开启,除非header中明确connection:close.

2、一个TCP连接可以对应多少个HTTP请求?多个。

3、单个TCP连接可以同时发送多少个请求呢?HTTP1.1中只能一个。一个request一个response,虽然有piplining试图解决(发送多个,不等待返回,服务器按顺序返回),但是浏览器关闭的。因为有很多问题:

3.1、proxy不能正确处理。

3.2、正确的流水线实现是复杂的。

但是HTTP2.0提供了multiplexing,可以做到。

5、浏览器对同一个host建立的TCP连接,有没有限制。chrome限制6个。

6、返回的HTML里面的图片是怎么下载的,什么协议,什么顺序,建立了多少连接。

2020-02-0519:05:59:

1、单例模式,globalstate。

2、太多静态方法。Thiscannotbeoverwritten.

4、doingworkintheconstructorisbad,因为他不能重写

2020-01-2113:36:42:

访问网站时:

2020-01-1814:20:29:

1、timeout

2、retry

3、exception

4、logging.

5、modulecommunication

2020-01-1621:20:23:

1、statelessor原子。尽量不要改class的静态成员。

2、操作数据库onebyone。如果需要一次更改很多个东西的,考虑抽成一张表。

3、操作exception的时候慎重。

2020-01-0411:37:38:

2、

2020-01-0214:59:21:

1>/proc/1/fd/12>&1

可以解释为stdout输出去了/proc/1/fd/1文件,stderr紧随其后给了stdout

但是:2>&11>/proc/1/fd/1是不行的。

因为1>/proc/1/fd/1是把标准输出搞去文件哪里了。`2>&1`相当于复制了标准输出的行为,但是这个时候标准输出还是在终端,没有拷贝到。先改(\)后复制(\\)。而不是,先复制(/),后改(/\)

tricket方法:

1、&>/proc/1/fd/1,就是把stdout和stderr都搞去哪里了,就不用管顺序。

2、2>&11>&/proc/1/fd/1,其实也是,为什么不加&呢。这样也不用官顺序。

2019-12-3120:24:38:

2、过程:

HTTPS=HTTP+认证+加密+完整性保护。

公开秘钥:就是一个公钥,一个私钥的。

共享秘钥:就是一个token

3、HTTPS其实和SSH差一步,就是SSH给过来的公开秘钥,我怎么证明他是真的是他呢?不然又会有中间人劫持了,这一步就是认证,公开秘钥是解决了通信加密问题。怎么认证呢,用证书。

步骤就是:(首先对于域名做的证书,应该是全球唯一的

1、我自签一个证书给这个域名。

2、chrome是会调用系统的证书的,我安装这个软件的时候,安装这个证书。

这样访问global:zhihu.com-->my:zhihu.com,chrome还是不会报错。

这叫劫持根证书。

客户端就没必要SSLL:

1、每个客户端就用不同证书的,麻烦+不是人人都会。

2、如果我拿到这个证书,那就无敌了。(图解HTTPP159)

2019-12-2511:19:26:

1.使用adduser,不要用useradd

3.添加用户去sudo组。usermod-aGsudovimi

2.更改密码

2.1在当前用户下使用passwd更改密码,需要输入原来密码。

2.2在当前用户下使用sudopasswdvimi更改密码,不需要输入原来密码。

2.3在root用户下使用passwdvimi更改密码,直接输入新密码。

2019-12-2415:25:34:

linux希望多进程,进程间通信。

1、很多工具需要用多进程,比较编译,但是windows对于多进程支持十分不好。

UbuntuLinux:耗时0.8秒

Windows7:耗时79.8秒

2、服务器,某些服务器框架依靠大量创建进程来干活,甚至是对每个用户请求就创建一个进程。

3、现在的多核心,如果多线程,线程之间的数据共享。资源必须从一个核心搬去另一个,这里消耗了。

2019-12-2210:57:10:

操作系统为什么要有用户态和内核态:

答案是为了安全,计算机就五个基本组成模块,输入设备、输出设备,计算器,控制器,存取器。

其中只有存取器是有状态而言,其他都是直接读取存取器拿值然后工作的,所以能改变存取器就是可以改变计算机的运行状态。这个东西不能随便让人改。

进入内核态的条件:

1、系统调用。

2、中断。

3、异常。

2019-12-2202:07:14:

1.1、省了进入内核态,但是进入内核态一般是200ns,线程的上下文切换是3-5us,所以上下文切换还是大头。对于无栈,就没有上下文切换,对于有栈,还是有协程的上下文切换的。

1.2、golang的协程上下文切换,仅需120ns,比进入内核态还低。详情见上面连接。是普通线程切换的1/30,因为协程需要的栈才2KB,但是线程需要的会去到10MB,why?

2、把异步的逻辑同步化。

协程:

无栈:(async,await)

这种是完全是用户态调度,需要一协全协,对于老代码,根本上就是重构。但是无须存储上下文,所以不需要栈,减少消耗。(yield出去的时候相当于在哪里变成调用其他函数)

有栈:(golang)

比线程开销少(TODO:WHY)。

有栈协成还分为用户调度,还是语言上就有了调度器(golang)

1、如果语言上有了调度器,用起来就和线程差不多。这样就是异步的操作了,怎么写成同步化呢?用channel通信就可以。

2、如果没,用起来就和async,await一样。还是要自己yeild,这是何苦呢,就是省了进入内核态?

很多服务都是:

1、高并发。

2、重IO,mysql和redis,或者network

3、低计算。

4、需要延迟低。每个用户处理耗时越短越好,经常是ms级别的

没有协程之前,就用异步非阻塞+callback来实现高并发。但是这种对于开发人员非常不友好。

2019-12-0310:47:45:

RLock只是说单个线程可以重复拿锁,其他和lock没其他不同

2019-12-0220:06:36:

是所有logs都是放去stderr的。

dockerlogs-f默认输出到标准错误,然后用管道+grep是不行的,因为管道默认是拿程序的标准输出作为自己的标准输入。

可以这样,dockerlogs-fvc-server2>&1|grep-i-E'insert'

2019-11-2917:21:34:

定时器实现方案:

2、用py的timer,每个都开一个线程,怎么控制关闭和线程池呢。

3、schedule配合BoundedSemaphore

2019-11-2816:31:02:

如果要上传一些数据给别人的服务,那么我们要怎么设计。

3、最差的设计,设置一个新的服务,在原有的数据服务中,有更新就post过去新的服务。因为本来的服务不应该知道有其他服务的存在。又不是新的微服务。这样设计耦合太大了。

but第一和第二的设计写起来没第三种方便。实时性应该也没那么好,也耗cpu?其实web服务怎么知道请求来了呢,中断?

其实第一第二种也不是实时性没那么好,是微服务设置错了,应该做成推送的形式,而不是轮训。比如comet延迟回答(但是需要占用一个handler,websocket不用?)

2019-11-2521:42:41:

2019-11-2221:49:18:

1、互斥

2、可重入(同一个线程可以多次得到这个锁),这个用+1,-1

3、锁超时

4、高效,高可用。

5、支持阻塞,非阻塞

6、支持公平、非公平。

2019-11-2100:18:22:

步骤是:

slam:

1.客户端访问server,server重定向去idp。

2.客户端去新页面填写用户密码,按一下会去idp得到token,然后其实在新页面会带着一个token访问server。这个时候server又叫你redirect回去一开始的页面。

bug1,app端不能够这样做,因为app离开程序,去了自带流浪器里面,

虽然POST的url可以拉起应用,但是手机应用无法解析POST的内容,我们也就无法读取SAMLToken

这个时候只能写一个inapp的页面嵌套了。

sso:

1.客户端访问server,server重定向去idp

2.客户端去新页面填写密码,得到code,然后redirect回去client。因为是code,所以可以redirect。

3.客户端再去server根据code拿token,server会给他assess_token和refresh_token.

4.后面客户端就可以搞事情了。

因为是code,解决了app的问题。就是redirect的时候,那个url的schema可以自己定义,手机可以解析到那段url。

3.1、认证:验证你是否是合法用户。

2019-11-1322:04:57:

1、mysql如果一次锁多行,并不是原子的。所以如果有两个事物一起进入锁多行,就会GG。所以在design的时候不能不能让后台updatelist。要设计好,让粒度改成单个。粒度只能是单个。delete和like不知道,反正selectlistforupdate有bug。

2、user_tag设计,要设计去另外一个表,然后user表存这个表的id:如果直接存在user表,有问题,

2.1怎么判重,要先把所有user_tag选出来,还要锁表,不然的话请求1过来判断不存在,请求2也判断不存在,然后在同一个用户add了两个相同的tagname了。

2.2如果新开一个表,就直接判,不用加锁。。不过要在tag_name加上UniqueKey

3、mysql什么时候用forupdate:

3.1好像如果是直接updateUsersetname='vimi'whereid=input_id这种,select出来无须forupdate吧,而且他根本不需要select啊。

2019-11-1218:01:25:

前端get请求传数组:

1、a=1,2,3这种后台难处理。前端容易。

2、a=1&a=2&a=3,据说后台天然能适应。(这个还是有点看语言)

3、protobuf,最好拉。

2019-11-0915:51:46:

mysql改了时区,需要重新连接。也就是要重启server.

所以,假如mysql有时区。

这是因为,mysql拿的结果本来就是CST,然后给这个timestamp前端,前端又转了一次。所以+8.

2、mysql改了时区,重新链接,新写进去的还是utc,用了datetime.datetime.utcfromtimestamp(),然后再根据mysql里面的时区,再转了一下。相当于UTC再减去了8

这个和mysqldump出来的数据不同,mysqldump出来的数据是不带时区的,再restorage也是不带时区的,因为在dump出来的文件里面已经提前设置好了time_zone是00:00的。

mysqldump可以设置不用UTC,默认都是用UTC的。--skip-tz-utc

3、time_update有点问题,用了server_default,func.now(),用的应该是中国时区。

4、mysqldump有点厉害,没改时区前的数据,他会正确根据以前的时区转回去UTC,改了的那些,他也会根据改了的时区,转回去UTC。注意time_update,搞不懂。又没事了

2019-11-0409:49:19:

mockinfrontend

asyncgetVehicleUsage(){constsleep=(second)=>newPromise((resolve,reject)=>{setTimeout(()=>{resolve(newVehicleUsages());},second);});constresponse=awaitsleep(2000);returnawaitresponse;}

2019-11-0301:06:11:

过程:

1、服务器证明自己是可靠的。其实这个是建立链接的时候,服务器要给一个公开秘钥我们,但是怎么证明这个公开秘钥是对的呢,就是怎么证明这个公开秘钥就是那个服务器的,就需要证书认证。同理客户端给服务器的。图解HTTPP156

1.1服务器告诉客户端我是xxx(比如s1是我的师傅)

1.2客户端找到s1并且确认,就认为服务器可靠。

1.3如果s1说不认识,那么就去找s1的师傅s2,一直找到root,只要有一个能证明服务器是正确的,就可以信任。

这些s1和s1的师傅s2是什么呢,就是权威机构的公开秘钥,怎么找到呢,一般植入浏览器,为什么要植入呢,因为如果你通过网路传输,又陷入死循环,就是我怎么证明他是权威的呢。没有被黑客入侵呢。p156

2、信任后,得到

2019-10-2723:54:14:

同步、异步:说的是后台方面的,异步相当于带提醒功能的水壶,同步不带。

阻塞、非阻塞:说的是客户端方面的,选择等待水开,还是水开提醒你(就算是同步的后台,也可以用非租塞,定时去看就行了)

Java三种IO模型:

BIO:同步阻塞IO

NIO:同步非阻塞IO

AIO:异步非阻塞IO

2019-10-2213:22:48:【TODO】

时区,都是应用层面上的东西,后台mysql肯定要存一个无时区的东西,backend应用也不应该有时区这个概念,应该相信app给你的肯定是UTC,就按UTC存。不然的话,前端给你一个timestamp,后台一转成date对象(date对象方便用)就GG了,因为转的时候又会根据你的时区+-8,前端应该清楚考虑时区问题。

2019-10-2123:14:26:

1、bridge模式,普通的一种模式。在docker0中分配一个子网给container,vethpair,一端放去container里面,一端放去主机中,实现通信。docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables-tnat-vnL查看。

2、host模式,直接和eth0共用网段。不生成多余的网卡。

3、container模式,容器bjoin去容器a,他们两个通过lo网卡通信,也是生成一个vethpair。

4、none模式,什么都没有的模式。container里面没有网卡、ip、路由等信息,需要自己配置,适合用来做离线任务。

5、

2019-10-1516:28:55:

改东西需要先加proto,等两边合完了,再做需求。不然的话有个问题:

1、先不考虑用很旧很旧的binary的问题。

2、可能用了release,然后后台上了,还是用了旧的release,就会解析不成功。因为这个时候binary已经定死了的。

思考:

1、兼容?如果别人用旧的binary中,proto不对,也可以兼容。这样的话是可以的。【现在是因为text_format没有设置ignore_unknown_field.

2、fail了他,这个应该比较好,提示用户应该怎么改。

2019-10-1211:10:02:

关于前端验证,见下文。

思考:如果一个应用依赖的服务突然不行了,debug方法:

1、ping那个服务,看看是否能ping通。

1.1如果没有显示ip,证明本地的dns服务都不行了,是本地的问题。这个时候,不能断定应用出bug,因为可能应用像浏览器一样cache了,所以可能应用正常的。

1.2如果有ip,但是ping不通,那是服务的问题,但是还是不能证明本地没问题,因为可能应用cache了一个旧的ip,一直访问他,

1.3如果能ping通,就是本地应用问题了。可能cache了ip

2019-10-0915:13:30:

protobuf定义的时候不要使用复数,因为转去其他语言的时候是不确定的,有可能是xxxList的(比如js),那就回usersList.

2019-10-0913:49:43:

一开始从db找出所有active的东西,返回第一个active的并且更改为assign,那肯定不希望锁全部啊。所以第一次select不会锁。

希望的是for一次,然后重新select,这个时候forupdate,看看那个东西是不是还是active,如果还是active的,就是他了,更改他。

但是这个是有bug的,因为在第三种模式,可重复读下,再次select,其实结果是一样的。需要先commit上一个事务。在python里面就是Database.refresh(xxx,with_for_update=True)

错了,即使在第三种模式下,select*forupdate还是会读到最新的。

2019-10-0913:48:034:

curl-I只是读取头部

2019-10-0819:00:56:

mainService{LoginService;InitService;MessageService;}主service中有很多sub-service的问题,问题是如果每个sub-service都是自己管自己,这样他们就不能和其他service通信。和调用。解决方法:

1、使用context,在主service上有一个全局的context

2、sub-service应该是有inputoutput并且stateless,【比较推荐】

3、context的话有个问题,就是怎么和mainServiceTwo通信,这个时候需要用接口。

2019-10-0818:30:25:

找出文件行数>=300的find.-iname"*"|xargswc-l*.py|awk'$1>=300{print$1,$2,NR}'|grep-vwc

2019-09-3015:58:44:

2019-09-2922:06:57:

其实就是语言层面上支持了kfaka做的东西。

不要随便定义type,iferr==typeA,这样会麻烦会造成循环引用。。应用判断他是什么属性,而不是判断他是否什么。。。iferr.isTypeA()

2019-09-2911:18:15:

是这样的null是一个valueundefined的意思是没有value

js主要是要处理后端数据后端数据里面的null在前端就是一个value为了和自己的没有value做区分所以发明了这个东西

bug:

比如后端要求你给我post,{a:any,b:any}我就给你返回{a:value,b:value},{a:any}我就给你返回{a:value}

2019-09-2909:29:42:

2019-09-2616:13:23:

坑:需要默认显示用户已经输入的东西,就需要有inputValue={previous}等,然后这样的话,每个change都要render一次,不然用户的那个对象还是哪里,前端就一直显示不变。

2019-08-2614:04:28:

同源定义:需要协议+域名+端口号相同

跨域都是流浪器帮忙的限制,后台需要加上,好像还需要加上vary:Origin.

Access-order-allow:*好像已经被禁止了,说这样太多了。

流浪器上确实需要限制跨域请求。原因有二:

1、从DOM角度说,用了iframe去调用了其他网站的页面,如果没限制,就可以控制它的DOM,然后用户输入密码的时候,就可以get到了。Document.getElementById之类的。

2、从cookies角度说,流浪器会自动帮我们发送cookies的,那么访问A网站后有了cookies,再访问B网站,难道发送A网站的cookies过去?B网站随便做一层转去A网站,就相当于你访问了A网站.

注意,所有的这些东西,都是流浪器搞得,直接用curl是没问题的。

2019-08-2217:36:58:

newDate(1568822212221)WedSep18201923:56:52GMT+0800(ChinaStandardTime){}ms:13位。

2019-08-1723:47:39:

在proto里面的字段

发送有,解析没有的都是可以的,是可以理解的,因为是根据名字的id来判断的。不要随便改id。

要验证的话,不能单单反序列化出来可以了就行,需要序列化,看看能不能。

optaional:1、发送有,解析没有:可以的。2、发送没,解析有:可以的,只是没有哪一列的值。required:1、发送有,解析没有:可以的,就是没有了那个required哪行。2、发送没,解析有:不行,required的不必须有。

2019-08-1415:01:47:

不能依赖前端做URL校验吧,需求是在前端就判断这个东西在不在本地的storageserver上面,因为apiserver只有一个,所以如果把这个url放去apiserver上面验证,就不知道是广州还是北京的请求,从而无法校验。

所以思路就是在前端判断嘛,因为前端的dnsserver解析到的肯定是本地的路径。但是有如下三个问题:

1、前端流浪器dns缓存?比如我北京的人,来了广州出差,以前访问的网站会不会已经被流浪器缓存着了,所以这个时候检验就失败了。(广州的用了北京的校验)

(上面那个是不会的,1、关闭流浪器,cache就消失。2、同事一去到广州连接上网咯,路由表就会被更新,dns服务器配置也会被更新)

2、linux里面的dns服务器被改了,这个时候同理。(这个是有可能的)

3、其他服务的dns被改了,去了其他地方下载(虽然这个东西有点少出现)

2019-08-1000:27:58:

写alembic的时候不能使用orm,因为这样和model层就强绑定了,或者你不要全部列都select出来,不然以后别人加多一列(应该是你这个orm用了一些列,但是这些列被delete了,特别是那些xxx_old那些临时咧),这个alembic直接跑不了。

2019-08-0412:44:24:(系统会主动告诉你的)

2019-08-0214:44:02:

2019-08-0213:48:40:

写东西需要兼容,比如proto的cache,如果proto格式改了怎么办?trycatch,不符合也不能蹦。

2019-07-2922:34:54:

HTTP一个从1.0---2.0的过程其实是越来越二进制化了,HTTP2.0的头部都是用bitstring

2019-07-2922:32:35:

有时候dockerfile里面创建文件夹不能带有'%'或者其他字符,或者不能使用`source~/.zshrc`,那是因为dockerfile里面默认使用'/bin/sh',可以使用RUN["/bin/bash","-c","mkdir-paaa/ttt/222%aaa"]来代替

但是还是创建不了带有%的,然后试过创建一个假的,然后mv成带有%的,还是不行。。。结果是把它改成用ln软链接过去改名,就ok了。

2019-07-2619:57:10:

sharelock:锁行的,保证读正确select...forshare

exclusivelock:锁行的,保证写和删正确。TODO(新增怎么保证?新增算不存在的行,怎么锁)select...forupdate.

②、记录锁,RecordLocks:这个是用来锁索引的,官方说防止别人更改了那一个值(selectwhereid=xxxx),才出现的。注意的是:假如那个东西不存在索引,官方有一个默认索引给他。让他锁着。

③、gaplocks,就是一个范围锁,别人用了selectbetween10..20,不让别人插入。如果有uniqueindex,就不用gaplocks

④、Next-KeyLocks,recordlock+gaplock,把数据库的东西连成一段一段来锁。

⑤、InsertIntentionLocks,插入意向锁,用来两个事务同时插入,但是只要主键不冲突就可以插入的。

⑥、AUTO-INCLocks,这个是一个表锁,所以这样插入数据会使得表锁了。

2019-07-2520:16:17:

创建子进程要为他创建一个特别的pgid,这样就可以删除这个子进程的时候,把所有他可能生成出来的进程也杀掉,就不会有孤儿进程了。

2019-07-2417:50:01:

如果新加功能,参数不搞默认值,就很容易有坑了。。xxxcannotbenull.

2019-07-2319:50:10:

>selecttrip_idfromdetailwheretask_type='UPLOAD'andhost='data-uploader-letianyungu-001'limit1;这样不行的?因为用了单引号,以后和cpp统一,能用双引号的就用双引号

2019-07-1516:27:28:不要使用email作为判断用户的标识,因为这样在设计URL的时候很麻烦。因为restful是这样设计,但是url上不能有@,(虽然有也是可以但是不推荐),所以这样就gg了。

1、proxychains

sudoapt-getinstallproxychains

sudovim/etc/proxychains.conf

docker的COPY./app/tmp/然后去到里面是/tmp/....里面都是app下面的内容

linux的cp./app/tmp/去到里面就是/tmp/app

前端的

letvalueofarr,只能用在arr,不能用object,然后取出的是arr元素的值。不是idx

setTimeout后来发现setTimeout的第一个参数必须是需要编译的代码或者是一个函数方法,而如果直接传入一行可执行代码,那么抱歉,这里会立即执行,没有延迟效果。

4、数据库表如果用了user_id的,另外一个blog表不要用user_id,因为要很多都是根据username,userid不外放,每次查来查去,直接用username

5、js中的print()是打印的意思。

6、mysql中的mysqldump,会把原来的sql文件中有

`comment`textNOTNULLDEFAULT'',他导出来,后面的DEFAULT就会不见了的。

8、js中的每一个文件可以有一个exportdefaultxxx=()=>{},导入可以直接importxxxfrom'yyy.js'

其他的只能用exportconstxxx=()=>{},只能用这个箭头函数,导入需要import{xxx}from'yyy.js'

const和default不冲突

9、主动关闭的时候,自己出现Time_wait,会自己消失

所以过程是这样:

客户端发起关闭tcpM请求,服务器进入CLOSE_WAIT状态,然后发送M+1告诉客户端,我知道你关闭了,客户端进入FIN_WAIT_1,然后到

服务器发送关闭tcpN请求,服务器进入LAST_ACK状态,客户端进如FIN_WAIT_2状态,发送N+1给服务器,服务器进入CLOSED

10、js生成随机数用这个window.crypto.getrandomvalues

11、写前端的定时器的话,要记得如果有其他界面铺在上面了,是不是考虑取消一下定时器。或者不做事情

12、materialui如果不能scroll,可以试试fullwidth后,也可以试试display:grid

13、mysql中表、字段都可以有字符集,而且target这些默认变量名就不能做字段名,不然desc不了这个table,还有mysql-client的时候也需要设置字符集去读取。--default-character-set=utf8

14、showCREATETABLEUser

15、Python3中使用mysql-db,

①、pip3install--upgradesteuptools

②、sudoapt-getinstalllibmysqlclient-dev

③、pip3installmysqlclient

16、又一次,mysql用不了中文的话,其实是链接的时候那个url没写charset=utf8

17、mysql终端输入不了中文的话,其实是那个环境变量没设置好,locale-LANG=C.UTF-8

18、python可以用[].extend()来添加一个list

19、js中,如果有定时任务,每次去fetch一下请求的,记得记得带上responseid

function()

requestSeq+=1

constseq=requestSeq;

//api....doing....

if(responseSeq>seq)return;

responseSeq=seq;

20、暴露一个redis的connection,还要想到如果没连接上,那怎么办。可以考虑用get_set函数

21、

22、sqlalchemy,事物级别:可重复读

session中,add了的,没commit,进程结束后没写入数据库

session中,同一个事物,add后,可以query出来

session中,可以query出来localhost链接insert的东西

session中,一定是commit才能结束一个事物,但是close的话,对象的方法都会用不了的。

1、想要删除联想的路径,可以移动到那个东西,然后shift+delete.

2、chrome://extensions/shortcuts这里可以更改chromeextensions的快捷键。

24、zshrc中的东西,如果你写路径是这样的file_path='~/aaa/vimi',然后拼接路径new_path=${file_path}/new_path,这样cd${new_path}是不行的,正确应该file_path=~/aaaa/vimi,不加引号。

tcp000.0.0.0:30000.0.0.0:*LISTEN247/nctcp000.0.0.0:30000.0.0.0:*LISTEN-但是上面的方式会有一个问题,由于在锁住总线期间,其他CPU无法访问内存,导致效率低下。

THE END
1.中国自己发明的东西有哪些中国自己发明的东西有造纸术、指南针、火药及印刷术、鼓这几种。指南针是用以判别方位的一种简单仪器;造纸术是用竹片和木片替代龟甲和兽骨;活字印刷术是人类近代文明的先导,为知识的广泛传播...https://m.iask.sina.com.cn/jxwd/6dO65g2owFr.html
2.他一直努力要发明新东西。的英文翻译英语怎么说海词词典,最权威的学习词典,专业出版他一直努力要发明新东西。的英文,他一直努力要发明新东西。翻译,他一直努力要发明新东西。英语怎么说等详细讲解。海词词典:学习变容易,记忆很深刻。http://dict.cn/%E4%BB%96%E4%B8%80%E7%9B%B4%E5%8A%AA%E5%8A%9B%E8%A6%81%E5%8F%91%E6%98%8E%E6%96%B0%E4%B8%9C%E8%A5%BF%E3%80%82
3....有“铀”这种东西,那这个字是什么时候发明的?怎么发明的?古代中国人又不知道世界上有“铀”这种东西,那这个字是什么时候发明的?怎么发明的? 扫码下载作业帮搜索答疑一搜即得 答案解析 查看更多优质解析 解答一 举报 是近代为了表现一种新发现的化学元素而新造的字. 解析看不懂?免费查看同类题视频解析查看解答 更多答案(3) ...https://qb.zuoyebang.com/xfe-question/question/3228329420fcc16c4f72ba20cb314b89.html
1.科技小发明手工简单我也能做今天,我想跟大家分享一下手工简单的科技小发明。这种类型的小发明不仅成本低廉,而且制作过程简单易学,即使是没有太多技术背景的人,也能轻松完成。 首先,我们来看看日常生活中的一些例子,比如智能家居系统。这听起来很高端,但实际上,只要有一些基本的电子元件和一些编程知识,你就可以自己动手做出这样的系统了。你可以通...https://www.czhrmaurw.cn/ke-ji/413102.html
2.自己发明的东西怎么申请专利自己发明的东西怎么申请专利 导读:根据《专利法》,发明专利申请的批准程序包括五个阶段:接受,初步审查,公布,实质审查和授权。申请过程中,建议找正规代理所,基本不会有泄密的风险。但是,专利的本质就是公开换保护。不论你如何做保密工作,申请后18个月国知局都会将案件内容公开的。https://www.64365.com/zs/1238501.aspx
3.手工制作科技小发明简单DIY智造创意小发明的简单手工指南总之,无论是想要提升工作效率还是只是为了满足兴趣,都有很多机会去探索并创造自己的科技小发明。只要掌握基本的手工技能和电子知识,就能够实现那些看似复杂但实际上很简单的小技巧。在DIY过程中,不仅锻炼了你的创新能力,也增强了你的逻辑思维能力,同时享受了一种独特的心灵慰藉——自我实现。https://www.alw39icut.cn/xing-ye-zi-xun/283823.html
4.自己发明的东西怎么申请专利自己发明的东西申请专利基本上都是申请的发明专利,申请发明专利的步骤和方法与其他企业等都是差不多的。有些人自己是第一次申请专利,不了解怎么操作,下面就由鱼爪网为大家介绍一下自己发明的东西怎么申请专利吧。 自己发明的东西怎么申请专利 个人与公司都是可以就发明创造、实用新型以及外观设计申请专利的,但最后是否...https://www.yuzhua.com/consult/2-49-331252.html
5.日本发明涡轮增压技术,为何他们自己却不用?其中有何“猫腻”?涡轮增压技术,这可是个好东西,能让你的车瞬间变成小钢炮,动力澎湃,激情四射。按理说,日本人发明了这玩意儿,应该把它捧在手心里才对。可事实呢?日本街头,还是自然吸气的车占大头,涡轮增压车型反而成了稀罕物。这就跟明星代言自家产品,自己却从来不用似的,你说奇怪不奇怪? https://www.yoojia.com/article/10080133367303841646.html
6.思想者方旭东:中国“四大发明”这一说法究竟是怎么来的?中国古代四大发明,相信大家都耳熟能详,但是“四大发明”这个说法是怎么来的,可能很多人就不是那么清楚了。我想以此切入,开始今天的演讲。 “四大发明”初期其实是“三大发明” 首先我想指出,“四大发明”这个说法不是从来就有的,而是慢慢出现的,并且“四大发明”最初也不是我们中国人自己讲出来的。 https://www.jfdaily.com/news/detail?id=86745
7.自己发明的东西手抄报关于发明的手抄报自己发明的东西手抄报 关于发明的手抄报 活动内容包括科幻画比赛与展示办科技手抄报科技小制作及小发明. 714用色彩妆点02让浓墨飘香黄冈中学惠州学校2017科技节手抄报类 714用色彩妆点02让浓墨飘香黄冈中学惠州学校2017科技节手抄报类 创意无穷的手抄报蕴含科技之美的剪贴画天马行空的小发明奇思妙想...https://www.puchedu.cn/shouchaobao/2090029.html
8.如果你学了心理知识会怎么样忽然,我意识到自己的担心都是多么的无用,因为不管我怎么急,车也不会因此而快一点,反而我的急,让我容易出错。是什么东西促进了我的焦虑? 手表!想到这点之后,我立马摘下手表,放进包里。一下子,脑袋里那个不断催促的声音消失了。那一刻,我便在想,手表这东西不就是我们人类自己发明的吗?一开始发明手表的目的...https://www.yjbys.com/xinli/zixun/757124.html
9.个人发明的东西怎么申请专利?个体开发的软件申请专利个人发明的东西怎么申请专利? 我国专利法规定的专利类型有三种:发明专利、实用新型专利、外观设计专利。 1、发明专利 针对产品、方法或者产品、方法的改进所提出的新的技术方案,可以申请发明专利; 2、实用新型专利 针对产品的形状、构造或者其结合所提出的适于实用的新的技术方案,可以申请实用新型专利;...https://blog.csdn.net/hb15688412262/article/details/130686790
10.我想发明作文300字(精选116篇)那怎么办呢?可不可以让他自己充电呢?当然可以,他只要吃完空气中的脏东西,就可以充电了,如果空气到处是清新的,那他就会快乐的唱着歌。 这就是我发明的“净化空气”机器人。 我想发明作文300字 篇13 生活中有很多意外的事,比如说那天下大雨,我就被淋成了一个"落汤鸡”。我全身的衣服都被淋湿了,裤脚和衣袖都...https://m.ruiwen.com/zuowen/300zi/3319128.html