1.post和get的区别
此答案原文来自https://blog.csdn.net/qq_15158911/article/details/80966457
GET和POST是HTTP协议中的两种发送请求的方法。
HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
所以GET和POST的底层都是TCP/IP,也就是说,GET/POST都是TCP链接
常用区别:
1. GET把参数包含在URL中,POST通过request body传递参数
2. GET请求在URL中传送的参数是有长度限制的,POST没有。
3. GET请求的参数只能是ASCII码,所以中文需要URL编码,而POST支持多种编码方式
最重要的区别:
GET产生一个TCP数据包;POST产生两个TCP数据包。(firefox浏览器除外)
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
其他的区别:
1. GET在浏览器回退时是无害的,而POST会再次提交请求。
2. GET产生的URL地址可以被Bookmark,而POST不可以。
3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
4. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
5. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
6. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
2.TCP的三次握手与四次挥手
此答案来自https://blog.csdn.net/qq_38950316/article/details/81087809
三次握手过程理解
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
四次挥手过程理解
1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
3.测试用例常见的设计方法
等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。
1.等价类划分
就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例
究竟要划分到何种程度才合适呢?
你有多少资源和时间,还有,看是否值得。毕竟无论你怎么测试,总会有未发现的缺陷存在,所以,先解决容易被发现的问题再说。
2.正交实验法
当组合条件不多的时候,穷举暂时没问题,但是,一旦条件多了,组合个数就会以指数形式增长。这个时候,就要用到正交表了,通过选出有代表性的测试实例,达到以少数代替全面的效果。
4.软件测试的方法
答案来自https://zhidao.baidu.com/question/492182095.html的回答
1、按是否查看程序内部结构分为:
(1)黑盒测试(black-box testing):只关心输入和输出的结果。
(2)白盒测试(white-box testing):去研究里面的源代码和程序结构。
2、按是否运行程序分为:
(1)静态测试(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。
(5)动态测试(dynamic testing),是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程。
3、按阶段划分:
(1)单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
(2)集成测试(integration testing),是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。
(3)系统测试(system testing),指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
(4)验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。
4、黑盒测试分为功能测试和性能测试:
(1)功能测试(function testing),是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。
(2)性能测试(performance testing),软件性能测试分为:
一般性能测试:指的是让被测系统在正常的软硬件环境下运行,不向其施加任何压力的性能测试。
稳定性测试也叫可靠性测试(reliability testing):是指连续运行被测系统检查系统运行时的稳定程度。
负载测试(load testing):是指让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的稳定性。
压力测试(stress testing):是指持续不断的给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。
5、其他测试类型:
回归测试(regression testing)是指对软件的新的版本测试时,重复执行上一个版本测试时的用例。
冒烟测试(smoke testing),是指在对一个新版本进行大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
随机测试(random testing),是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
开发流程
软件测试的基本流程:
1、单元测试、集成测试、系统测试和验收测试(确认测试)。
2、测试需求分析,测试计划编写,测试用例编写,测试,缺陷记录,回归测试,判断测试结束,测试报告提交。
3、测试流程依次如下:
a.需求:阅读需求,理解需求,与客户、开发、架构多方交流,深入了解需求。
b.测试计划: 根据需求估算测试所需资源(人力、设备等)、所需时间、功能点划分、如何合理分配安排资源等。
c.用例设计:根据测试计划、任务分配、功能点划分,设计合理的测试用例。
d.执行测试:根据测试用例的详细步骤,执行测试用例。
e.执行结果记录和bug记录:对每个case记录测试的结果,有bug的在测试管理工具中编写bug记录。
f.defect tracking:追踪leader分配给你追踪的bug.直到 bug fixed。
g.测试报告:通过不断测试、追踪,直到被测软件达到测试需求要求,并没有重大bug。
h.用户体验、软件发布等……
常用的linux 命令
1.ps查看进程
ps -A 显示所有进程信息
ps -ef|grep ssh ps与grep 常用组合用法,查找特定进程
最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。
ps aux | grep program_filter_word
ps -ef |grep tomcat 查看Tomcat是否启动
如果有一大长长长串的东西出现,说明tomcat是启动了,第一个是启动该进程的用户,第二个是该进程的id,第三个 是占用CPU的百分比,第四个是占用内存的百分比.
2.Kill
-9 sigkill can't be caught or ignored
-15 sigterm
Kill -15 大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以 配置的。如果程序正在等待IO,可能就不会立马做出相应。这相当于正常停止进程,停止进程的时候会释放进程所占用的资源
也就是说,SIGTERM多半是会被阻塞的、忽略。SIGTERM多半是会被阻塞的、忽略
Kill -9 admin的必杀令 不过,也不是所有的程序都会乖乖听话,总有那些状态下的程序无法立刻相应。
他们的区别就好比电脑关机中的软关机(通过“开始”菜单选择“关机”)与硬关机(直接切断电源),虽然都能关机,但是程序所作的处理是不一样的。
3.访问tomcat
访问tomcat的bin 目录:
cd /usr/local/tomcat/bin
使用Tomcat关闭命令 ./shutdown.sh
查看是否关闭 ps -ef|grep java
若还没有关闭,可用kill -97010(pid的端口号)
再次查看是否关闭 ps -ef|grep java
启动tomcat ./startup.sh
查看tomcat日志
切换到日志文件夹cdusr/local/tomcat5/logs
ls查看目录中的文件 ls -F查看目录中的文件 ls -l显示文件和目录的详细资料
ls -a 显示指定目录下所有目录与文件,包括隐藏文件
常用的sql 语句
1. 查询
SELECT * FROM 表名称
DISTINCT 用于返回不同的值,去掉重复的值
SELECT DISTINCT 字段名 FROM 表名
SELECT COUNT(DISTINCT column_name) FROM table_name 指定列的不同值的数目
SELECT * FROM table_name WHERE column_name LIKE pattern
%”表示任意字符都符合条件
SELECT * FROM member WHERE name like ‘%price%’;
“price”字前后都含有百分号“%”,这就表示“price”字前面和“price”字后面不管是任何字符都满足查询条件,即使“price”字前后没有字符也符合条件
多个字段排序时,用逗号,隔开
SELECT * FROM 表名 ORDER BY 字段1,字段2
2. 更新
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
3. 插入
插入所有字段:
INSERT INTO 表名称 VALUES (值1, 值2,....)
插入指定字段:
INSERT INTO 表名(字段1,字段2...) VALUES (字段1值,字段2值...)
4. 排序
SELECT Company, OrderNumber FROM Orders ORDER BY Company [desc] 升序或降序
5. 关联查询
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
6.删除
DELETE FROM 表名 WHERE 字段名=值(条件)
7.英文版的数据库,数据库中的字段值是unicode编码的
首先看看字段类型是不是 : char ->nchar varchar ->nvarchar text ->ntext
然后在查询时加入N:select * form table where city=N'上海'
或者
在连接数据库的url后面添加?useUnicode=true&characterEncoding=utf8
8限制查询结果集
SELECT TOP 10 * FROM MY_TABLE --查询前10条记录
SELECT TOP 10 PERCENT * FROM MY_TABLE --查询所有记录的前10%的记录
网友评论