一些技术点的简单描述

2xx-成功:这类状态代码表明服务器成功地接受了客户端请求。
200-确定。客户端请求已成功。

301-即永久重定向。
302-对象已临时移动。
304-未修改。
307-临时重定向。

401-未验证通过 需要账号密码
403-禁止访问 权限限制 SSL IP地址 客户端证书
404-文件或资源未找到。
405-HTTP请求方法错误
406-客户端浏览器不接受所请求页面的MIME类型。
407-要求进行代理身份验证。

500-服务器内部错误 服务器占用率 文件权限
501-页眉值指定了未实现的配置。
502-网关问题
503-服务器节点不可用
504-网关超时。
505-HTTP版本不受支持

项目推动能力
规范项目流程
测试资源的充分程度
用例的覆盖率
会议纪要和业务文档
测试分析,对业务更加熟悉
主流程接口测试
多环境多轮测试
代码变更行覆盖率
回归测试切换多种用例
每日测试报告
多轮验收

持续集成CI:频繁地 (一天多次) 将代码集成到主干,经过让产品可以快速迭代,同时还能保持高质量
代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

持续交付CD : 频繁地将软件的新版本,交付给质量团队或者用户,以供测试
持续部署 代码在任何时刻都是可部署的,可以进入生产阶段。

性能的常用指标包括页面的白屏时间,首屏时间,资源占用,页面渲染时间,帧率
content-type x-www-form-urlencoded 和 json
x-www-form-urlencoded是浏览器默认的编码格式,如果参数值中需要&,则必须对其进行编码
form-data 不会对参数编码

为什么要用索引?
使用索引后减少了存储引擎需要扫描的数据量,加快查询速度
索引可以把随机I/O变为顺序I/O
索引可以帮助我们对所搜结果进行排序以避免使用磁盘临时表

SVN
集中式版本控制系统,版本库是集中存放在中央服务器的,工作的时候,用的是自己的电脑,所以,我们首先需要
从中央服务器上拉取最新的版本,然后开始工作,等工作完了,再把自己的工作提交到中央服务器。

Git
分布式版本控制系统没有中央服务器的概念,我们使用相关的客户端提取的不只是最新的文件,而是把代码仓库完整
地镜像下来,相当于每个人的电脑都是一个完整的版本库,这样的话,任何一处协同工作的服务器出现故障,都可以
用任何一个镜像出来的本地仓库恢复。并且,即便在网络环境比较差的情况下也不用担心,因为版本库就在本地电脑

GitHub开源免费,私有仓库收费,适合开源项目
GitLab私有仓库也免费。允许免费设置仓库权限;

Linux下创建进程的三种方式
执行过程是执行fork(),vfork(),clone()时,通过一个系统调用表映射到sys_fork(),sys_vfork(),sys_clone(),
再在这三个函数中去调用do_fork()去做具体的创建进程工作。

fork创建一个进程时,子进程只是完全复制父进程的资源,子进程独立于父进程, 具有良好的并发性
vfork创建的子进程与父进程共享地址空间,也就是说子进程完全运行在父进程的地址空间上,如果这时子进程修改了某个变量,这将影响到父进程。
fork()和vfork()是无参数的,而clone()则带有参数,clone() 是则可以将父进程资源有选择地复制给子进程由clone_flags决定,返回紫禁城的pid

多态的实现
父类的引用指向子类的对象。接口的引用指向实现类的对象 , 重载和重写
在程序中定义的引用变量所指向的具体类型和该引用变量的生成对象调用在编程的时候并不确定,当处于运行期间才确定。

C语言和java各类型占字节数
char 1 short int 2 int 4 float 4 double 8 long 8 long long 8
byte 1 char 2 short 2 int 4 float 4 long 8 double 8

指针数组与数组指针的区别
指针数组:是指一个数组里面装着指针,也即指针数组是一个数组; 定义形式:int *a[10];
数组指针:是指一个指向数组的指针,它其实还是一个指针,只不过是指向数组而已 定义形式:int (p)[10]; 其中,由于[]的优先级高于,所以必须添加(*p).

ls -l 查看权限
进入根目录 cd / 进入home目录 cd ~ 回退到上一级目录 cd 进入上一次目录 cd -
pwd 查看当前路径
mkdir 创建目录 rmdir 删除空文件夹
rm -i 在删除前需要确认 rm -f, 强制删除。忽略不存在的文件,不提示确认 rm -r, 删除目录及其内容
mv 移动文件或删除
cp 复制
cat -n 查看文件并显示行号
more -5 每次显示一页 显示5行 less 上下键 Q
head -n 20 展示前20行
tail -n 20 查看n行
env 查看环境变量 echo $PATH 查看PATH
which 查看可执行文件地址
find ./ -name ‘*.log’ 查找文件名
grep -i 忽略大小写 -w 整个单词 ^ $ 开始和结束 [a-z]{3,} \d 数字 \w 字母和数字
chmod ugoa + rwx -c 输出处理信息

maven是一个项目管理工具,负责版本,构建,输出物管理,依赖关系 文档和构建结果 项目关系 移植性管理
maven的生命周期 - 编译、测试、打包、集成测试、验证、部署
约定优于配置 - 默认值,尽量不去修改
/项目目录
pom.xml 用于maven的配置文件
/src 源代码目录
/src/main 工程源代码目录
/src/main/java 工程java源代码目录
/src/main/resource 工程的资源目录
/src/test 单元测试目录
/src/test/java
/target 输出目录,所有的输出物都存放在这个目录下
/target/classes 编译之后的class文件

groupId 必须 团体标识 com.
artifactId 必须 项目的唯一标识符 tomcat
version 必须
scope 作用域限制
type 一般在pom引用依赖时候出现,其他时候不用
optional 是否可选依赖

常用的mvn依赖
fastjson
easyexcel
lombok 省去setter getter

RPC远程过程调用 ,像调用本地服务一样调用服务器的方法, 基于TCP/IP传输层协议, 架构包括 客户端,客户端存根,服务端存根,服务端
HTTP服务主要是基于HTTP协议的,遵从RESTFUL风格,以URI对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述。
RPC存在效率优势。HTTP协议是在传输层协议TCP之上的,HTTP优点就是简单、直接、开发方便
RPC服务主要是针对大型企业的,而HTTP服务主要是针对小企业的,因为RPC效率更高,而HTTP服务开发迭代会更快

Restful 更简洁,更有层次,更易于实现缓存等机制。
传统 新增+更新=post ,现在 更新=PUT 传统删除=get或post , 现在删除=delete

七层协议
第一层:应用层。定义了用于在网络中进行通信和传输数据的接口; HTTP
第二层:表示层。定义不同的系统中数据的传输格式,编码和解码规范等;
第三层:会话层。管理用户的会话,控制用户间逻辑连接的建立和中断;
第四层:传输层。管理着网络中的端到端的数据传输; TCP/IP
第五层:网络层。定义网络设备间如何传输数据;
第六层:链路层。将上面的网络层的数据包封装成数据帧,便于物理层传输;
第七层:物理层。这一层主要就是传输这些二进制数据。

三次招手和四次挥手
TCP三次握手过程
第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,请求建立连接,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。
第二次握手:主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用那个序列号作为起始数据段来回应我
第三次握手:主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了。
四次挥手
第一次: 当主机A完成数据传输后,将控制位=1,提出停止TCP连接的请求 ;
第二次: 主机B收到控制位后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK=1;
第三次: 由B端再提出反方向的关闭请求,将FIN=1 ;
第四次: 主机A对主机B的请求进行确认,将ACK=1,双方向的关闭结束.。

HTTP 超文本传输协议
无状态协议,对于事务处理没有记忆能力
支持 B/S 及 C/S 模式。
灵活的数据类型,content-type
客户端和服务器端建立连接 -客户端发送请求数据到服务器-服务器端接收到请求后处理,然后将处理结果响应客户端–关闭客户端和服务器端的连接(HTTP1.1 后不会立即关闭)
请求行、请求头、空行和请求数据
get 请求方式 post 请求方式

HTTP1.1 持续连接,增减缓存-cache-control ,断点传输
Http2.0 连接共享,头部压缩,服务器推送
https 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护

Nginx 是一个高性能的HTTP和反向代理服务器,其特点是占有内存少,并发能力强,易于开发,部署方便。
缺点:Nginx 只适合静态和反向代理。
将服务器接收到的请求按照规则分发的过程,称为负载均衡。

nginx常用做静态内容服务和代理服务器,直接外来请求转发给后面的应用服务器,
nginx轻量级,抗并发,处理静态文件好
Apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。
tomcat更多用来做一个应用容器

Mysql
事务:把一组密不可分的操作系列集合在一起,这些操作要么全部执行,要么全部不执行。
1.原子性:事务是内的操作是一个整体,是不可分割的。
2.一致性:同一个事务,多次读取数据库中的同一个数据,读取的内容应该是一致的,不变的。
3.隔离性:不同事务之间相互独立,互不干扰。
4.持久性:事务提交后,事务内的操作对数据库的修改被永久保存在数据库文件中。

关系型的数据库,存储数据之前,必须先建表建库,随着数据的复杂度越来越高,所建表的数量也就越来越多
无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

Redis本质上也是一种键值数据库的,简单快捷特点的同时,
数据类型多 - 支持Strings、Lists类型(有序)Sets类型(无序)完成排序(SORT)
性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
原子性 - 所有操作都是原子性的
Redis还支持 推送和订阅, 通知, key 过期等等特性
redis目前还只能作为小数据量存储(全部数据能够加载在内存中) ,海量数据存储方面并不是redis所擅长的领域
速度快 持久化 自动操作 快速主-从复制

  1. 提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就可以了
  2. 提高了DB的可用性,只影响到需要访问的shard服务器上的数据的用户
  3. 提高了DB的可维护性,对系统的升级和配置可以按shard一个个来搞,对服务产生的影响较小
  4. 小的数据库存的查询压力小,查询更快,性能更好

mongodb 是一个内存数据库 通知,推送
易扩展,大数据量高性能,灵活的数据模型,高可用。
易扩展-去掉了关系型数据库的关系型特性
大数据 - 具有非常高的读写性能
灵活的数据模型 - 不需要为事先存储的数据建立字段
查看当前数据库: db
查看所有的数据库: show dbs 或者 show databases
切换数据库: use db_name
删除当前数据库:db.dropDatabase()
db.createCollection(name,options) ,
db.stu.insert({name:‘gj’,gender:1})
db.集合名称.save(document)
db.集合名称.find()
db.集合名称.update( ,{multi: })

MongoDB不支持事务操作,多线程读写出错
MongoDB占用空间过大

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展能力

Producer 消息生产者,向Broker发送消息的客户端
Consumer 消息消费者,从Broker读取消息的客户端
Broker 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群
Topic 主题,Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
Zookeeper:kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。
持久化消息 7天过期。非持久化消息最多4次。

zookeeper,分布式服务框架,文件系统+监听通知机制。
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

TestNg https://blog.csdn.net/df0128/article/details/83243822
配置TestNG.xml 设置某些文件执行 ?
@setup @Test @teardown
@BeforeGroups @AfterGroups
@BeforeSuite @AfterSuite
@BeforeClass @AfterClass
@BeforeTest @AfterTest
@DataProvider 数据驱动,提供二维数组 Object [] []

@Test(enabled = false) 忽略这个case不执行
@Test(timeOut = 5000) 性能测试 超时失败
@Test(groups=“group2”) 此用例归属某个组 可以有多个 @Test(groups = {“mysql”,“database”})
@Test(dependsOnMethods= {“TestNgLearn1”}, alwaysRun=true) 依赖某个方法 dependsOnGroups

使用参数
1 注解,然后xml中读取参数
@Test(enabled=true)
@Parameters({“param1”, “param2”})

2 @DataProvider使用参数
@DataProvider(name = “xx”)
@Test(dataProvider = “xx”)

TestNG.xml文件

<?xml version="1.0" encoding="UTF-8"?>
    报告名称          详细程度     串行并行 none           parallel为并行才有用
<groups>
  <incloud name="group1"></incloud>
  <incloud name="group2"></incloud>
</groups>
<classes>
  <class name="com.demo.test.testng.NewTest">
        <methods>
            <include name = "firstMethod" />   包含
            <exclude name = "excludedGroup" /> 不包含
        </methods>
  </class>
  <class name="com.demo.test.testng.TestCase1"/>
</classes>
 <listeners>
	<listener class-name="common.CustomizeTestNGReporterListener" />
</listeners>

测试环境查看
kubectl get pod -n citest| grep kic-crm-commercial

查看具体容器日志
kubectl logs -n citest --tail=200 -f

简便命令 写到 ~/.bash_profile这个文件中
kp 查pod kl+服务器 查日志
aliap kp=“kubectl get pods -n citest|grep kic-crm-”
alias kl="kubectl logs -n citest --tail=200 -f "

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值