了解JS 、 HTML 、selenium版本对应(参数)、自动化测试工具、jira、python单元测试框架(操作封装、数据管理、html测试报告、用例执行规划、记录日志、参数化、脚本自动执行)
了解那些测试的内容
入门测试行业很容易、完成大部分测试工作也很简单,但是你要成为一个好的测试人员很难。测试工作中有很多内容都相对简单,有很多体力活。
资料测试、测试执行、安装环境等重复性高的工作。但是你要成为一个好的测试,需要懂测试分析和设计方法、编码、网络知识、Linux、数据库、问题分析方法、各种测试工具等等。
1.测试zhidao是为了发现程序中的错误
2.这种分析能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
3.没有发现错误内的测试也是有价值的,完整的测试是评定软件质量的一种方法
测试方法:
A.白盒测容试
(白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试)
B.黑盒测试
(黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。
C.灰盒测试
(灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。
1、测试技术和业务能力都很重要。但是你要努力做好平衡。这与你的工作岗位有关。如果你是功能测试,侧重业务能力。如果你是专项测试,侧重测试技术。如果你是领导。我不知道。
2、在非工作时间学习,建议多打磨测试技术。因为它们在就业市场更通用。
3、问题是能力提升最好的催化剂。分析问题、解决问题、总结问题相关的知识、输出经验文档可以快速提升你的能力和经验。
4、研究工具、多动手实践是学编码的有效手段,只看书不动手是没有任何用处的。这里的工具指的是项目组同事自行开发的效率提升、解决问题的工具。Python/Shell脚本语言可以直接看源码。Java语言编写的.jar包可以用jd-gui.exe反编译查看。
常用的Linux命令:
介绍:https://www.cnblogs.com/xuxinstyle/p/9609551.html
三次握手过程
建立TCP连接时,需要客户端和服务器共发送3个包。
-
第一次:客户端发送初始序号x和syn=1请求标志
-
第二次:服务器发送请求标志syn,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1
-
第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1
【详解:
- 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x
- 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y
- 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1
上面分析过程可以看出,握手两次达不到让双方都得出自己、对方的接收、发送能力都正常的结论的。】
四次挥手过程分析
- 第一次:客户端请求断开FIN,seq=u
- 第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
- 第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
- 第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
为什么上图中的A在TIME-WAIT状态必须等待2MSL时间呢?
第一,为了保证A发送的最后一个ACK报文能够到达B。这个ACK报文段有可能丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后就立即释放连接,就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认报文段。这样,B就无法按照正常的步骤进入CLOSED状态。
第二,A在发送完ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求的报文段。
为什么三次握手和四次挥手?
- 三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里
- 四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。
第三次握手失败后,会处于半连接状态,会重新5次进行第三次握手尝试,这时候会浪费主机资源,SYN泛洪攻击就是利用这机制
三次握手连接阶段,最后一次ACK包丢失会进入什么样的一个状态?
Server 端
第三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。
而Server重发SYN+ACK包的次数,可以通过设置/proc/sys/net/ipv4/tcp_synack_retries修改,默认值为5.
如果重发指定次数之后,仍然未收到 client 的ACK应答,那么一段时间后,Server自动关闭这个连接。
Client 端
在linux c 中,client 一般是通过 connect() 函数来连接服务器的,而connect()是在 TCP的三次握手的第二次握手完成后就成功返回值。也就是说 client 在接收到 SYN+ACK包,它的TCP连接状态就为 established (已连接),表示该连接已经建立。那么如果 第三次握手中的ACK包丢失的情况下,Client 向 server端发送数据,Server端将以 RST包响应,方能感知到Server的错误。
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。 与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。相对于TCP协议,UDP协议的另外一个不同之处在于如何接收突发性的多个数据报。不同于TCP,UDP并不能确保数据的发送和接收顺序。事实上,UDP协议的这种乱序性基本上很少出现,通常只会在网络非常拥挤的情况下才有可能发生。
既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
OSPF(Open Shortest Path First)路由协议建立邻居的过程有那几个状态?
OSPF建立邻居过程的7个状态机:
down——>init——>two-way——>exstart——>exchange——>loading——>full
1.down //双方还没有进行任何交互
2.init //此状态只交互hello包,没有同步任何路由信息
3.two-way //达到状态two-way,建立邻居关系(形成邻居关系后要进行DR/BDR选举)
4.exstart // 进行主从关系选举,为了确定谁在exchange状态先发送DBD包
5.exchange //通过交互DBD包,建立各自的拓扑表
6.loading //请求对方路由信息,此状态交互LSR包、LSU包、LSACK包
7.full //建立邻接关系 达到LSDB的同步
DNS使用的到协议(TCP/UDP分别在什么情况下使用)
DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议;
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。
DNS在同时占用用TCP和UDP的53端口 在数据传送时使用可靠的TCP协议 在域名解析时使用UDP协议
TLS/SSL处于OSI哪一层
SSL(Secure Socket Layer安全套接层)以及其继承者TSL(Transport Layer Security 传输层安全)是为了网络通信安全 提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
二、SSL具体有啥内容?
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
那么SSL的记录协议层和握手协议层到底是工作在什么地方,如果我们单纯的在TCP/IP模型上找的话很难找到,因为TCP/IP模型分四层:应用层,传输层,网络互联层,网络接口层,我们看到SSL协议的底层也就是记录协议层已经工作在了传输层之上了,而握手协议是建立在记录协议层上的,所以,在四层模型中,我们很难找到他们具体对应的位置,我们要到OSI七层模型中找,我们具体看看7层模型。
(应该是传输层到应用层)
广播风暴产生的原因及解决方法
产生广播风暴的原因:
通过对以上网络设备的了解,我们就可以简单分析出来,网络产生广播风暴的原因了。一般情况下,产生网络广播风暴的原因,主要有以下几种:
1、网络设备原因:我们经常会有这样一个误区,交换机是点对点转发,不会产生广播风暴。在我们购买网络设置时,购买的交换机,通常是智能型的Hub,却被奸商当做交换机来卖。这样,在网络稍微繁忙的时候,肯定会产生广播风暴了。
2、网卡损坏:如果网络机器的网卡损坏,也同样会产生广播风暴。损坏的网卡,不停向交换机发送大量的数据包,产生了大量无用的数据包,产生了广播风暴。由于网卡物理损坏引起的广播风暴,故障比较难排除,由于损坏的网卡一般还能上网,我们一般借用Sniffer局域网管理软件,查看网络数据流量,来判断故障点的位置。
3、网络环路:曾经在一次的网络故障排除中,发现一个很可笑的错误,一条双绞线,两端插在同一个交换机的不同端口上,导致了网络性能急骤下降,打开网页都非常困难。这种故障,就是典型的网络环路。网络环路的产生,一般是由于一条物理网络线路的两端,同时接在了一台网络设备中。
4、网络病毒:目前,一些比较流行的网络病毒,Funlove、震荡波、RPC等病毒,一旦有机器中毒后,会立即通过网络进行传播。网络病毒的传播,就会损耗大量的网络带宽,引起网络堵塞,引起广播风暴。
解决办法:
首先怀疑为核心交换机物理故障,观察交换机的指示灯状态以及各端口的状态,显示正常。对核心交换机清除缓存、关闭重启,并检查交换机的配置情况,没有改变。
经过以上的检查和测试,分析故障应该不在硬件部分,利用Sniffer抓包分析软件将网络中的数据包抓下来分析,发现有大量数据包来自同一个MAC地址,目的地址是根本不存在的IP
一致性哈希算法
【一致哈希 是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n 个关键字重新映射,其中K是关键字的数量, n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。】
例如,有三台Redis,对于每次的访问都可以通过计算hash来求得hash值。
如公式 h=hash(key)%3,我们把Redis编号设置成0,1,2来保存对应hash计算出来的值,h的值等于Redis对应的编号。
但是hash算法也会面临容错性和扩展性的问题。容错性是指当系统中的某个服务出现问题时,不能影响其他系统。扩展性是指当加入新的服务器后,整个系统能正确高效运行。
现假设有一台Redis服务器宕机了,那么为了填补空缺,要将宕机的服务器从编号列表中移除,后面的服务器按顺序前移一位并将其编号值减一,此时每个key就要按h = Hash(key) % 2重新计算。
同样,如果新增一台服务器,规则也同样需要重新计算,h = Hash(key) % 4。因此,系统中如果有服务器更变,会直接影响到Hash值,大量的key会重定向到其他服务器中,造成缓存命中率降低,而这种情况在分布式系统中是十分糟糕的。
1、假如2宕机了
那么,数据B对应的节点保存到RedisService3中。因此,其中一台宕机后,干扰的只有前面的数据(原数据被保存到顺时针的下一个服务器),而不会干扰到其他的数据。
2、拓展多一个服务器
原本数据C是保存到Redis3中,但由于增加了Redis4,数据C被保存到Redis4中。干扰的也只有Redis3而已,其他数据不会受到影响。
因此,一致性哈希算法对于节点的增减都只需重定位换空间的一小部分即可,具有较好的容错性和可扩展性
3、分布不均匀
为了解决这种数据存储不平衡的问题,一致性哈希算法引入了虚拟节点机制,
即对每个节点计算多个哈希值,每个计算结果位置都放置在对应节点中,这些节点称为虚拟节点。
RedisService1#1、 RedisService1#2、 RedisService1#3、
RedisService2#1、 RedisService2#2、 RedisService2#3
五层网络协议
OSI先有模型,权再有协议,比较适合理论上探讨。TCP/IP先有协议,再有模型,已得到广泛的实际应用。
HTTP状态码解读
常见状态码及解决方法
- 404:找不到,地址错误|(未找到)服务器找不到请求的网页
- 500:逻辑错误| (服务器内部错误)服务器遇到错误,无法完成请求
- 400:一般是入参不匹配| (错误请求)服务器不理解请求的语法
- 504:超时 | (网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求
- 403:(禁止)服务器拒绝请求
- 503:(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态
了解http协议相关信息的途径
1、winpcap C语言头文件 抓包
2、Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一
SMP和NUMA
HTTP和HTTPS:
【
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
】
HTTPS连接缓存不如HTTP高效,流量成本高。
HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。
HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。
https请求流程(加密方式)
HTTPS即加密的HTTP,HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。
测试小爱音响
1、方言
2、不是叫他,声音还很大的说话,以及其他噪音
3、手机接电话 说出和它一样的名字
4、手机录音是否能唤醒
5、安静的情况下是否会自动发声
6、电量和网络是否对它有影响
场景1:弱网环境(比如:电梯,地下室)
场景2:高速运行中(驾驶中)
场景3:杂声干扰
场景4:多人同时唤醒
场景5:错误唤醒语句
场景6:第一次启动唤醒,长时间放置后唤醒等
三个关键字描述测试的工作
(个人看法:负责、忍耐、细致
熟悉性能测试的设计、执行、分析、排障,熟悉至少一种主流性能测试工具(比如loadrunner和jmeter);
进程、线程的了解
1、一个进程可以有很多线程,每条线程并行执行不同的任务。
2、进程是资源分配最小单位,线程是程序执行的最小单位。
3、在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责I/O处理
4、在java中,如果每个请求到达就创建一个新线程,开销是相当大的。
(线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
临界资源和临界区:
临界资源:
各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。
临界区:
每个进程中访问临界资源的那段代码称为临界区。显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。如果此刻该临界资源未被访问,进程便可进入临界区对该资源进行访问,并设置它正被访问的标志;如果此刻该临界资源正被某进程访问,则本进程不能进入临界区。
kill pid与kill -9 pid的区别
影响系统运行性能的原因(锁机制,调度算法等)
在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用。
1、先来先服务调度算法
【该调度算法既可以用于作业调度也可以用于进程调度。
在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。】
FCFS调度算法的特点是算法简单,但效率低;对长作业比较有利,但对短作业不利(相对SJF和高响应比);
2、短作业(进程) 优先调度算法
【以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。
短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。】
对长作业不利,会造成进程饥饿。
3、优先权调度算法
【优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度;
在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。
在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。】
4、高响应比优先调度算法
【高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。】
5、基于时间片的轮转调度算法
【时间片轮转调度算法主要适用于分时系统。
在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。在时间片轮转调度算法中,时间片的大小对系统性能的影响很大】
6、线程的通信方式
锁机制
互斥锁:提供了以排他方式防止数据结构被并发修改的方法。
读写锁:允许多个线程同时读共享数据,而对写操作是互斥的。
条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
信号量机制(Semaphore)
包括无名线程信号量和命名线程信号量。
信号量(semaphore):信号量的数据结构为一个值和一个指针,
指针指向等待该信号量的下一个进程。
信号量的值与相应资源的使用情况有关:
当它的值大于0时,表示当前可用资源的数量;
当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
信号量的值仅能由PV操作来改变。
PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作。
PV操作的意义:用信号量及PV操作来实现进程的同步和互斥。
PV操作属于进程的低级通信。
java使用jdbc连接数据库步骤
-
确定连接的数据库类型《mysql,oracle,db2,moangdb,sqlservlet》
-
下载数据库的驱动(http://mvnrepository.org),并把jar包添加到项目中
-
把数据库连接的驱动类加载到java虚拟机中
-
通过DriverManager类中getConnection方法获取到对应数据库连接对象
-
通过连接对象创建编译对象
-
通过编译对象想sql发出指令
-
接受并处理返回的结果
-
释放相关操作资源
python 连接的版本:
import pymysql
安全性测试(Security test)
- 登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
- 用户名和密码是否通过加密的方式,发送给Web服务器
- 用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
- 用户名和密码的输入框,应该屏蔽SQL 注入攻击
- 用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
- 错误登陆的次数限制(防止暴力破解)
测试登录页面
功能测试(Function test)
- 输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
- 输入错误的用户名或者密码, 验证登录会失败,并且提示相应的错误信息。
- 登录成功后能否能否跳转到正确的页面
- 用户名和密码,如果太短或者太长,应该怎么处理
- 用户名和密码,中有特殊字符,和其他非英文的情况
- 记住用户名的功能
- 登陆失败后,不能记录密码的功能
- 用户名和密码前后有空格的处理
- 密码是否以星号显示
shell指令区别
$n # 第n个参数,n=1,2,…9
$* # 所有参数列表(不包括脚本本身)
$@ # 所有参数列表(独立字符串)
$# # 参数个数(不包括脚本本身)
$$ # 当前程式的PID
$! # 执行上一个指令的PID
$? # 执行上一个指令的返回值
python中的虚数:
2复数由实数部分和虚数部分构成
3表示虚数的语法: real+imagj
4 实数部分和虚数部分都是浮点数
5 虚数部分必须有后缀 j 或 J
最长子串(不重复)
import sys for line in sys.stdin: a=line.strip(' ') set_a=set(a); list_a=list(a) len1=len(list_a); len2=len(set_a);list1=[] for i in range(len1-1): for j in range(len2): if (len1-i)>=len2: tmp=list_a[i:len2-j+i] else: tmp=list_a[i:len1] len4=len(set(tmp)) if len(list(tmp))==len4: list1.append(len4) break print(max(list1))
文件权限
-rw-r--r--,表示这是一个普通文件,创建文件的用户的权限为rw-,创建文件的用户所在的组的权限为r--,其他用户的权限为r--。
在修改权限时,是用不同数字来表示不同权限的。4表示读取权限,2表示写入权限,1表示执行权限。
设置权限时,要给3类用户分别设置权限。
例如chmod 761表示,给创建文件的用户设置的权限是7,7=4+2+1,所以意思是给创建文件的用户赋予读取,写入和执行权限。6=4+2,也就是说给创建文件的用户所在的组赋予读取和写入权限,最后一个1表示执行权限,也就是说,给其他用户执行权限。
Oracle:
数据库 > 表空间 > 段(segment) > 区(extent) > 块(block)> 文件 (file)
Linux 内存布局:
在Linux中,进程的内存空间按低地址到高地址的顺序分为:代码段text、数据段data、bss段、堆、栈和内核数据区(命令行参数和环境变量等)
fork
在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,
shell中,如果想匹配以wangyi开头的行,
^wangyi