精华内容
下载资源
问答
  • 常见的Python五大解释!
    千次阅读
    2021-04-27 05:01:40

    python是一门解释型语言,代码想要运行,必须通过解释器来执行,当然为了满足不同平台的需求,python解释器也分为不同的种类,接下来为大家介绍五款常用python解释器。

    目前常见的Python解释器包括:CPython、JPython、IPython、PyPy、IronPython五个版本。

    1、CPython:是使用C语言开发的python解释器,也是标准的python解释器,目前我们大部分人安装的python IDE都是CPython,也是使用最广泛的python解释器。

    2、JPython:是在JVM上实现的python,由Java语言编写。可以将python源码编译成JVM字节码,由JVM执行对应的字节码,因为可以很好的与JVM集成。

    3、IPython:是基于Cpython之上的一个交互式解释器,相对于Cpython而言,其交互方式有所增强,但是执行代码的功能还能与Cpython相同的。

    4、PyPy:是使用python实现的python动态编译器,提供了JIT编译器和沙盒功能,因此在运行速度上要比Cpython快很多。其起源是python开发者为了更好的Hack Python而创建的项目。灵活性高、易于使用和试验,不过对于第三方模块的支持不足。

    5、IronPython:面向微软.net平台,是由C#语言编写。可以将Python代码编译成字节码TODO CLR,并能很好的与.NET平台集成。

    更多相关内容
  • 21. Mybatis 的三种执行器

    万次阅读 多人点赞 2019-08-27 17:05:52
    在企业开发中, 对数据库的批量操作, 是一个非常常见的操作, Mybatis提供了批量执行器, 来支持批量操作. 1. Mybatis sql执行器 Mybatis 支持全局修改执行器, 参数名为: defaultExecutorType. 但是笔者并不推荐这种...

    在企业开发中, 对数据库的批量操作, 是一个非常常见的操作, Mybatis提供了批量执行器, 来支持批量操作.

    1. Mybatis sql执行器

    Mybatis 支持全局修改执行器, 参数名为: defaultExecutorType. 但是笔者并不推荐这种方式,笔者建议在获取sqlSession对象时设置. Mybatis 共有三种执行器:

    • SIMPLE: 默认的执行器, 对每条sql进行预编译->设置参数->执行等操作
    • BATCH: 批量执行器, 对相同sql进行一次预编译, 然后设置参数, 最后统一执行操作
    • REUSE: REUSE 执行器会重用预处理语句(prepared statements

    1.1 局部设置

    在获取sqlSession时设置, 需要注意的时, 如果选择的是批量执行器时, 需要手工提交事务.

    // 获取指定执行器的sqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)
    
    // 获取批量执行器时, 需要手动提交事务
    sqlSession.commit();
    

    1.2 全局配置

    可在全局配置文件中配置, 但是笔者不推荐这种方式, 了解即可.

    <settings>
        <setting name="defaultExecutorType" value="BATCH" />
    </settings>
    

    2. 三种执行器测试

    • 对于单挑sql执行, 不同的执行器没有太大的差异, 所以笔者使用批量插入操作来测试不同执行器的不同行为方式.
    • 需要特别注意的时, 当选择批量执行器时, 纵使在获取sqlSession时, 设置了自动提交事务, 也需要手动提交事务

    2.1 映射文件

    为保证测试条件尽可能一致, 笔者写里一个清空表的方法, 在每个测试用例执行之前, 先清空表.

    <mapper namespace="org.zongf.learn.mybatis3.l01.mapper.StudentMapper">
    
        <!-- 清空表中数据, 同时重置自增序列从0开始 -->
        <delete id="clear">
            truncate table t_student
        </delete>
    
        <!-- 新增 -->
        <insert id="save" useGeneratedKeys="true" keyProperty="id">
            insert into t_student  values (null , #{name}, #{age}, #{sex}, #{birth})
        </insert>
    
    </mapper>
    

    2.2 测试用例

    public class TestStudentMapper {
    
        // 批量保存方法
        private void batchSave(StudentMapper mapper) {
    
            // 初始化10000个对象
            List<StudentPO> list = new ArrayList<>();
            for (int i = 0; i < 10000; i++) {
                list.add(new StudentPO("zhangsan_" + i, "M",20 + i % 10,  LocalDate.now()));
            }
    
            // 批量执行
            long start = System.currentTimeMillis();
            for (StudentPO studentPO : list) {
                mapper.save(studentPO);
            }
            long end = System.currentTimeMillis();
    
            // 输出执行耗时
            System.out.println("耗时:" + (end - start) + " ms!");
        }
    
        // 每次执行前,请空表
        @Before
        public void setUp(){
            StudentMapper studentMapper = SqlSessionUtil.getMapper(StudentMapper.class);
            studentMapper.clear();
        }
    
        // 默认执行器
        @Test
        public void test_SIMPLE(){
            // 获取自动提交事务的Maper
            StudentMapper mapper = SqlSessionUtil.getMapperAutoTx(StudentMapper.class);
    
            // 执行批量保存
            batchSave(mapper);
        }
    
        // 重用预编译执行器
        @Test
        public void test_REUSE(){
            // 获取批量保存sqlSession
            SqlSession sqlSession = SqlSessionUtil.openSession(ExecutorType.REUSE, true);
    
            // 获取Mapper 对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    
            // 执行批量保存
            batchSave(mapper);
    
        }
    
        // 批量执行器
        @Test
        public void test_BATCH(){
            // 获取批量保存sqlSession
            SqlSession sqlSession = SqlSessionUtil.openSession(ExecutorType.BATCH, true);
    
            // 获取Mapper 对象
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    
            // 执行批量保存
            batchSave(mapper);
    
            sqlSession.commit();
        }
    }    
    

    3. 批量测试日志分析

    从测试结果可以看出, 在做批量操作时, 使用批量执行器, 性能会有很大的提升.

    3.1 SIMPLE 方式

    从执行日志可以看出, 每次插入操作, 都会执行编译, 设置参数, 执行sql操作.

    [2019-06-13 11:30:38:812][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==>  Preparing: insert into t_student values (null , ?, ?, ?, ?) 
    [2019-06-13 11:30:38:819][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_0(String), 20(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:30:38:824][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- <==    Updates: 1
    
    [2019-06-13 11:30:38:827][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==>  Preparing: insert into t_student values (null , ?, ?, ?, ?) 
    [2019-06-13 11:30:38:828][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_1(String), 21(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:30:38:832][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- <==    Updates: 1
    
    [2019-06-13 11:30:38:833][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==>  Preparing: insert into t_student values (null , ?, ?, ?, ?) 
    [2019-06-13 11:30:38:839][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_2(String), 22(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:30:38:841][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- <==    Updates: 1
    ...
    耗时:21575 ms!
    

    3.2 REUSE 方式

    从执行日志可以看出, 只有第一次插入操作, 执行了sql编译步骤, 对其它插入操作执行了设置参数, 执行sql的操作.

    [2019-06-13 11:31:11:752][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==>  Preparing: insert into t_student values (null , ?, ?, ?, ?) 
    
    [2019-06-13 11:31:11:757][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_0(String), 20(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:31:11:759][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- <==    Updates: 1
    
    [2019-06-13 11:31:11:761][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_1(String), 21(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:31:11:764][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- <==    Updates: 1
    
    [2019-06-13 11:31:11:776][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_2(String), 22(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:31:11:778][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- <==    Updates: 1
    ...
    耗时:19322 ms!
    

    3.3 BATCH

    从执行日志可以看出, 只对第一次插入操作执行了sql编译操作, 对其它插入操作仅执行了设置参数操作, 最后统一执行.

    [2019-06-13 11:31:29:270][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==>  Preparing: insert into t_student values (null , ?, ?, ?, ?) 
    [2019-06-13 11:31:29:276][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_0(String), 20(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:31:29:277][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_1(String), 21(Integer), M(String), 2019-06-13(Date)
    [2019-06-13 11:31:29:277][main][DEBUG][o.z.l.m.l.mapper.StudentMapper.save]- ==> Parameters: zhangsan_2(String), 22(Integer), M(String), 2019-06-13(Date)
    ...
    耗时:835 ms!
    
    展开全文
  • 常见的web攻击有哪些?如何防御?

    千次阅读 2022-04-02 20:43:09
    web攻击是什么 Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为,如植入恶意代码、修改网站权限、获取网站...常见的Web攻击: XSS (Cross Site Scripting) 跨站脚本攻击 CSRF(Cross-site

    web攻击是什么

    Web攻击(WebAttack)是针对用户上网行为或网站服务器等设备进行攻击的行为,如植入恶意代码、修改网站权限、获取网站用户隐私信息等

    Web应用程序的安全性是任何基于Web业务的重要组成部分

    确保Web应用程序的安全十分重要,即使是代码中很小的bug也有可能导致隐私信息被泄露,站点安全就是为了保护站点不受未授权的访问、使用、修改和破坏而采取的行为或实践

    常见的Web攻击有:

    • XSS (Cross Site Scripting) 跨站脚本攻击
    • CSRF(Cross-site request forgery)跨站请求伪造
    • SQL注入攻击

    XSS

    XSS,跨站脚本攻击,允许攻击者将恶意代码植入到提供给其他用户使用的页面中,xss涉及到三方,即攻击者、客户端与Web应用

    xss的攻击目标是为了盗取存储在客户端的cookie或者其他网站用户识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与站点进行交互

    举个例子:

    一个搜索页面,根据url参数决定关键词的内容

    <input type="text" value="<%= getParameter("keyword") %>">
    <button>搜索</button>
    <div>
      您搜索的关键词是:<%= getParameter("keyword") %>
    </div>

    这里看似没有问题,但是如果不按照套路出牌呢?

    用户输入:" ><script> alert('XXS');</script> ",拼接到HTML中返回给浏览器。形成了如下的HTML:

    <input type="text" value=""><script>alert('XSS');</script>">
    <button>搜索</button>
    <div>
      您搜索的关键词是:"><script>alert('XSS');</script>
    </div>

    浏览器无法辨别出 <script>alert('XSS')</script> 是恶意代码,因而将其执行,试想一下,如果是获取cookie发送给黑客服务器呢?

    根据攻击的来源,xss攻击可以分为

    • 存储型
    • 反射型
    • DOM 型

    存储型

    攻击步骤:

    1. 攻击者将恶意代码提交到目标网站的数据库中

    2. 用户打开目标网站时,网站服务端将恶意代码从数据库中取出,拼接在HTML中返回给浏览器

    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行

    4. 恶意代码窃取出用户数据并发送到攻击者的网站,或者冒充用户行为,调用目标网站接口执行攻击者指定的操作

    这种攻击常见于带有用户保存数据的网站功能,如论坛发帖,商品评论,用户隐私等

    反射型XSS

    攻击步骤:

    1. 攻击者构造出特殊的URL,其中包含恶意代码

    2. 用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器

    3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行

    4. 恶意代码窃取用户数据并发送到攻击者网站,或者冒充用户行为,调用目标网站接口执行攻击者指定的操作

    反射性XSS跟存储型XSS的区别是:存储型的恶意代码存在数据库里,反射型的存储在URL中

    反射型XSS漏洞常见于通过URL传递参数的功能如网站搜索、跳转等。

    由于需要用户主动打开恶意的URL才能生效,攻击者往往会结合多种手段诱导用户点击

    POST的内容也可以触发反射型XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并诱导用户点击),所以非常少见

    DOM型XSS

    攻击步骤:
    1. 攻击者构造出特殊的URL,其中包含恶意代码

    2. 用户打开带有恶意代码的URL

    3. 用户浏览器接收到响应后解析执行,前端JavaScript取出URL中的恶意代码并执行

    4. 恶意代码窃取用户数据并发送到攻击者网站,或者冒充用户行为,调用目标网站接口执行攻击者指定的操作

    DOM型的XSS跟前两种的区别在于,DOM型的XSS中,取出和执行恶意代码由浏览器端完成,属于前端JavaScript的自身安全漏洞,而其他两种XSS都属于服务端的安全漏洞

    XSS的预防

    通过前面的介绍,xss攻击有两大因素

    • 攻击者提交而恶意代码
    • 浏览器执行恶意代码

    针对第一个因素,我们在用户输入的过程中,过滤掉用户的恶劣代码,然后提交给后端,但攻击者绕开前端请求,直接构成请求就不能预防了

    而如果在后端写入数据库之前,对输入进行过滤,然后把内容传给前端,但这个内容在不同的地方就会有不同的显式

    例如:

    一个正常的用户输入 5 < 7 这个内容,在写入数据库之前,被转义,就变成了 5 < 7 在客户端中,一旦经过escapeHTML() ,客户端显式的内容就变成了了乱码的(5 < 7)在前端中,不同的位置所需的编码也是不同的:

    • 当 5 < 7 作为 HTML 拼接页面时,可以正常显示:
    <div title="comment">5 &lt; 7</div>
    • 当 5 < 7 通过 Ajax 返回,然后赋值给 JavaScript 的变量时,前端得到的字符串就是转义后的字符。这个内容不能直接用于 Vue 等模板的展示,也不能直接用于内容长度计算。不能用于标题、alert 等

    可以看到,过滤并非可靠的,则需要通过另一个因素去防控了,防止浏览器执行恶意代码

    在使用 .innerHTML 、.outerHTML、document.write() 时要注意特别小心,不要把不可信的数据作为HTML插到页面中,而尽量使用 .textContent、setAttribute()等

    如果使用 Vue/React 技术栈,并且不使用 v-html / dangerouslySetInnerHTML 功能,就在前端 render 阶段避免使用 innerHTML、outerHTM 等存在XSS 隐患的方法。

    DOM中内联事件监听器,如location、onclick、onerror、onload、onmouseover等,<a>标签的 href属性,JavaScript中的 evel() 、setTimeout()、setInterval()等,都能吧字符串作为代码运行,如果不可信的数据拼接到字符串中传递给这些API,很容易产生安全隐患,请务必避免

     

    <!-- 链接内包含恶意代码 -->
    < a href=" ">1</ a>
    
    <script>
    // setTimeout()/setInterval() 中调用恶意代码
    setTimeout("UNTRUSTED")
    setInterval("UNTRUSTED")
    
    // location 调用恶意代码
    location.href = 'UNTRUSTED'
    
    // eval() 中调用恶意代码
    eval("UNTRUSTED")

    CSRF

    CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发起跨站请求

    利用受害者在被攻击网站中已经获取了注册凭证,绕过后台验证,达到冒充用户对被攻击网站执行某项操作的目的

    经典流程:

    • 受害者登录a.com,并保留了登录凭证(Cookie)
    • 攻击者引诱受害者访问了b.com
    • b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie
    • a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求
    • a.com以受害者的名义执行了act=xx
    • 攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作

    crsf 可以通过get请求,即通过访问 img 页面后,浏览器自动访问目标地址,发送也是同样,也可以设置一个自动提交的表单发送 post 请求:

    <form action="http://bank.example/withdraw" method=POST>
        <input type="hidden" name="account" value="xiaoming" />
        <input type="hidden" name="amount" value="10000" />
        <input type="hidden" name="for" value="hacker" />
    </form>
    <script> document.forms[0].submit(); </script> 

     访问该页面后,表单会自动提交,相当于模拟用户发送了一次post请求

    还有一种就是通过 a 标签的,需要用户点击链接才会触发

    访问该页面后,表单会自动提交,相当于模拟用户发送了一次post请求

    <a href="http://test.com/csrf/withdraw.php?amount=1000&for=hacker" taget="_blank" >
        重磅消息!!
    </a>

    CSRF的特点

    • 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法阻止攻击的发生
    • 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据
    • 整个过程攻击者并不能直接获取受害者的登录凭证,仅仅是冒用
    • 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求可以直接嵌入在第三方论坛、文章中,难以进行追踪

    CSRF的预防

    CSRF通常是从第三方网站发起,被攻击网站无法防止攻击的发生,只能增强自身网站对CSRF的防护能力来提升安全性

    手段如下:

    • 阻止不明外源访问
      • 同源监测
      • Samesite Cookie
    • 提交时需要附加本域才能获取信息
      • CSRF Token
      • 双重Cookie验证

    这里主要讲讲token这种形式,流程如下:

    • 用户打开页面的时候,服务器需要给这个用户生成一个Token
    • 对于GET请求,Token将附在请求地址之后。对于POST请求来说,要在form的最后面加上
    <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>
    • 当用户从客户端得到了Token,再次提交给服务器的时候,需要判断Token的有效性

    SQL注入

    SQL注入攻击,是指通过恶意的sql查询或者添加语句插入到应用的输入参数中,再在后台Sql服务器上解析执行攻击

     

    流程如下所示:

    • 找出SQL漏洞的注入点

    • 判断数据库的类型以及版本

    • 猜解用户名和密码

    • 利用工具查找Web后台管理入口

    • 入侵和破坏

    预防方式如下:

    • 严格检查输入变量的类型和格式
    • 过滤和转义特殊字符
    • 对访问数据库的Web应用程序采用Web应用防火墙

    上述只是列举了常见的web攻击方式,实际开发过程中还会遇到很多安全问题,对于这些问题, 切记不可忽视

    参考文献

    • https://tech.meituan.com/2018/09/27/fe-security.html
    • https://developer.mozilla.org/zh-CN/docs/learn/Server-side/First_steps/Website_security
    展开全文
  • 性能测试常见指标有哪些

    万次阅读 多人点赞 2020-03-10 17:50:44
    3.资源性能指标 CPU 内存 磁盘吞吐量 网络吞吐量 3.1 CPU CPU又称中央处理,是一块超大规模的集成电路,是一台计算机的运算核心(core)和控制中心(Control Unit)。主要功能时解释计算机指令以及处理计算机软件...

    1、性能指标分类
    系统性能指标
    资源性能指标
    中间件指标
    数据库指标
    稳定性指标
    可扩展性指标
    可靠性指标

    2、系统性能指标
    响应时间
    系统处理能力
    吞吐量
    并发用户数
    错误率

    2.1 响应时间
    Response Time 简称RT,是指系统对请求作出响应的时间(处理请求的时间);
    不同的功能的响应时间也不尽相同,所以讨论一个系统的响应时间时,通常指该系统所有功能的平均响应时间或者所有功能的最大响应时间

    不同行业参考标准:
    互联网:500毫秒以下,如淘宝业务10毫秒左右
    金融:1秒以下为佳,复杂业务3秒以下
    保险:3秒以下为佳
    制造业:5秒以下为佳

    响应时间的绝对值并不能直接反映软件的性能的高低,软件性能的高低实际上取决于用户对该响应时间的接受程度

    2.2 系统处理能力
    系统处理能力是指系统在利用系统硬件平台和软件平台进行信息处理的能力。有以下指标来度量:
    HPS(Hits Per Second):每秒点击次数,次/秒
    TPS(Transaction per second):系统每秒处理交易数(事务数),笔/秒
    QPS(Query per second):系统每秒处理查询次数,次/秒

    一般情况下用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示对服务器点击请求(越大越好)

    不同行业参考标准:
    金融:1000TPS—50000TPS
    保险:100TPS----100000TPS
    制造:10TPS-----5000TPS
    互联网电子商务:10000TPS----1000000TPS
    互联网中型网站:1000TPS—50000TPS
    互联网小型网站:500TPS–10000TPS

    2.3 吞吐量
    吞吐量是指系统在单位时间内处理请求的数量
    对于单用户系统,响应时间可以很好地度量系统的性能,但对于并发(多用户)系统,通常可以用吞吐量作为性能指标

    2.4 并发用户数
    并发用户数指在同一时刻内,登录系统并进行业务操作的用户数量

    2.5 错误率
    错误率 简称FR,指系统在负载情况下,失败交易的概率,错误率=(失败交易数/交易总数)*100%
    参考标准:一般成功率不低于99.4%

    3.资源性能指标
    CPU
    内存
    磁盘吞吐量
    网络吞吐量

    3.1 CPU
    CPU又称中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心(core)和控制中心(Control Unit)。主要功能时解释计算机指令以及处理计算机软件中的数据。
    行业参考标准:
    CPU指标主要指的是CPU利用率,包括用户态(user),系统态(sys),等待态(wait),空闲态(idle)
    CPU利用率 <=75%
    CPU sys% <=30%
    CPU wait% <=5%

    3.2 内存
    内存是与CPU进行沟通的桥梁,计算机所有程序的运行都是在内存中进行的,内存的性能对系统影响非常大。
    行业参考标准:
    为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内存是否有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般低于70%,太多的交换将引起系统性能低下。

    3.3 磁盘吞吐量
    磁盘吞吐量简称Disk Throughput,是指在无磁盘故障的情况下单位时间内通过磁盘的数据量
    行业参考标准:
    磁盘指标有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的重要依据,磁盘繁忙率要低于70%

    3.4 网络吞吐量
    Network Throughput,是指在无网络故障的情况下单位时间内通过的网络的数据数量。单位:Byte/s. 网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备。一般不超过设备或链路的最大传输能力的70%

    4. 中间件指标
    常用的中间件例如Tomcat,weblogic等指标主要包括JVM,ThreadPool,JDBC
    |GC频率 | 次/s | java虚拟机垃圾部分回收频率
    |Full GC频率| 次/h | Java虚拟机垃圾完全回收频率
    | Full GC平均时长 | 秒 | 用于垃圾完全回收的平均时长
    | Full GC最大时长 | 秒 | 用于垃圾完全回收的最大时长
    |GC堆使用率 | 百分比 | 堆使用率
    |Active Thread Count| 个 | 活动的线程数
    | Pending User Request |个 | 处于排队的用户请求个数
    |JDBC Active Connection| 个| JDBC活动连接数

    5.数据库指标
    常用的数据库如MySQL指标主要包括SQL、吞吐量、缓存命中率、连接数
    SQL 耗时 微妙 执行SQL耗时
    吞吐量 QPS 个 每秒查询次数
    吞吐量 TPS 个 每秒事务次数
    命中率 Key Buffer命中率 百分比 索引缓冲区命中率
    命中率 InnoDB Buffer命中率 百分比 InnoDB缓冲命中率
    命中率 QueryCache命中率 百分比 查询缓存命中率
    命中率 TableCache命中率 百分比 表缓存命中率
    命中率 ThreadCache命中率 百分比 线程缓存命中率
    锁 等待次数 次 锁等待次数
    锁 等待时间 微妙 锁等待时间

    行业参考标准:
    SQL耗时越小越好,一般微秒级别
    命中率越高越好,一般不能低于95%
    锁等待次数越低越好,锁等待时间越短越好

    6.稳定性指标
    最短稳定时间:系统按照最大容量的80%或标准压力情况下运行,能够稳定运行的最短时间。
    一般来说 对于正常工作日(8小时)运行的系统,至少应该能保证系统稳定运行8小时以上。
    对于7*24小时运行的系统,至少保证稳定运行24小时以上
    参考标准:
    TPS曲线稳定,没有大幅度的波动
    各项资源指标没有泄露或异常情况

    7.可扩展性指标
    是指应用软件或操作系统以群集方式部署,增加的硬件资源与增加的处理能力之间的关系。
    计算公式:
    (增加性能/原始性能)/(增加资源/ 原始资源) *100%
    参考标准:
    理想的扩展能力是资源增加几倍,性能就提升几倍。扩展能力至少在70%以上。

    8.可靠性指标
    对于服务端性能测试,从系统可靠性指标度量分析时,常见从三类来入手:
    双机热备
    集群
    备份和恢复

    8.1 双机热备
    指标如下:
    节点切换是否成功及其消耗时间。
    双机切换是否有业务中断。
    节点回切是否成功及其耗时。
    双机回切是否有业务中断。
    节点回切过程中的数据丢失量在进行双机切换的同时,使用压力发生工具模拟实际业务发生情况,对应用保持一定的性能压力,保证测试结果符合生产实际情况。

    8.2 集群
    对于使用集群方式的系统,主要通过以下方式考量其集群可靠性:

    集群中某个节点出现故障时,系统是否有业务中断情况出现
    在集群中新增一个节点时,是否需要重启系统
    当故障节点恢复后,加入集群,是否需要重启系统
    当故障节点恢复后,加入集群,系统是否有业务中断情况出现
    节点切换需要多长时间在验证集群可靠性的同时,需根据具体情况使用压力工具模拟实际业务发生相关情况,对应用保持一定的性能压力,确保测试结果符合生产实际情况。

    8.3 备份和恢复
    本指标为了验证系统的备份/恢复机制是否有效可靠,包括系统的备份和恢复、数据库的备份和恢复、应用的备份和恢复,包括以下测试内容:

    备份是否成功及其消耗时间。
    备份是否使用脚本自动化完成。
    恢复是否成功及其消耗时间。
    恢复是否使用脚本自动化完成指标体系的运用原则。
    指标项的采用和考察取决于对相应系统的测试目的和测试需求。被测系统不一样,测试目的不一样,测试需求也不一样,考察的指标项也有很大差别。
    部分系统涉及额外的前端用户接入能力的,需要考察用户接入并发能力指标。
    对于批量处理过程的性能验证,主要考虑批量处理效率并估算批量处理时间窗口。
    如测试目标涉及到系统性能容量,测试需求中应根据相关指标项的定义,明确描述性能指标需求。
    测试指标获取后,需说明相关的前提条件(如在多少的业务量、系统资源情况等)。

    展开全文
  • 常见的操作系统有哪些

    万次阅读 2019-12-26 19:33:42
    一、常见的操作系统有哪些? 1、Windows操作系统 应用比较广泛。 2、Linux操作系统 免费使用,类UNIX 3、Unix操作系统 无界面,使用命令操作,一般安装在服务器上面。 4、Mac操作系统 苹果公司开发的,一般...
  • 常见的网络攻击手段有哪些

    千次阅读 2021-03-16 11:59:05
    那么,常见的网络攻击有哪些?防御策略是什么? 1、SQL注入攻击 SQL注入方法是网络罪犯最常用的注入手法。此类攻击方法直接针对网站和服务器的数据库。执行时,攻击者注入一段能够揭示隐藏数据和用户输入的代码,...
  • 常见的工业通讯协议有哪些

    万次阅读 2019-03-22 09:29:06
    每个仪表都自己独特的通讯协议,常见modbus通讯协议 、RS-232通讯协议、RS-485通讯协议 、HART通讯协议等等,那么这些通讯协议究竟是怎么工作的,有哪些优缺点呢?本文将重点介绍目前常见的几种通讯协议! ...
  • 常见的HTTP状态码有哪些

    万次阅读 多人点赞 2018-01-13 16:17:15
    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页...   ...下面是常见的HTTP状态码: 200 – 请求成功 301 – 资源(网页等)被永久转移到其它URL 404
  • Windows体系结构是分层的模块系统,主要层次硬件抽象层HAL、内核、执行体和大量的子系统集合。 子系统又分为环境子系统和保护子系统,其中环境子系统仿真不同的操作系统,保护子系统提供安全功能。 1、内核 ...
  • JVM常见的垃圾回收

    万次阅读 多人点赞 2019-03-31 20:37:41
    现在常见的垃圾收集器有如下几种: 新生代收集: Serial ParNew Parallel Scavenge 老年代收集: Serial Old CMS Parallel Old 堆内存垃圾收集:G1 每种垃圾收集之间连线,表示他们可以搭配使用。 二、...
  • 编码常见的三种编码

    千次阅读 2020-03-13 19:46:34
    什么是编码 编码 三种编码 一 这种编码存在的问题是两个输入为1是与只有I3为1时...虽然解决了第一类编码的问题但还是编码重叠的问题 第三种解决此问题 三 增加了 输出端GS解决了上述编码冲的的问题 ...
  • Win10文件资源管理命令参数怎么使用对于这个程序,最常见的打开方式就是双击此电脑/计算机/我的电脑图标,或者在Windows10中单击任务栏上的文件资源管理图标总之方法很多,这次IT之家要介绍的打开方式不是这些,...
  • 常见的运行时异常看这里:常见的Java异常有哪些(运行时) 常见的非运行时异常看这里:常见的java异常有哪些(非运行时) java中除了异常Exception之外,还有一大类错误,即ERROR,我们常见的ERROR如下:1、java.lang....
  • 比较常见的操作系统有哪些

    千次阅读 2016-03-14 15:29:55
    操作系统根据任务的处理方式可以分为简单批处理系统、多道程序批处理系统、多道程序分时系统以及...常见的操作系统Unix、Linux、DOS、Windows、Mac等。 常见的操作系统Unix、Linux、DOS、Windows、Mac等。
  • JVM几种常见的垃圾收集总结

    千次阅读 多人点赞 2019-07-01 15:27:46
    在介绍垃圾收集之前,首先介绍以下这几个概念 1. Stop-the-world 它是指 JVM 由于要执行 GC 而停止了应用程序的执行,并且这种情形会在任何一种 GC 算法中发生。当 Stop-the-world 发生时,除了 GC 的线程以外,...
  • 计算机高级语言包括哪些?

    千次阅读 2021-06-28 05:55:40
    计算机高级语言包括:vb、vc、foxpro、...应用程序源代码一边由相应语言的解释翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释,但这...
  • 常见安全漏洞

    千次阅读 2022-03-11 20:51:40
    平常项目上线的时候大家都进行过漏洞扫描,漏洞扫描主要针对哪些漏洞呢?这些漏洞都是怎么处理的呢?本文就介绍几个常见的安全漏洞
  • JVM 几种常见GC收集

    千次阅读 2019-08-06 12:01:37
    Stop - the - World: JVM由于要执行GC而停止了应用程序执行 任何一种GC算法中都会发生 多数GC优化通过减少Stop - the -...常见的垃圾收集 新生代垃圾收集: Serial收集(复制算法): 单线程收集,...
  • 简介horae是一个基于redis和disque实现的轻量级、高性能的异步任务执行器,它的核心是disque提供的任务队列,而队列先进先出的时序关系,顾得名:horae。horae : 时序女神,希腊神话中司掌季节时间和人间秩序的三...
  • HVV面试之——常见的框架漏洞

    千次阅读 2022-04-29 15:12:40
    常见的框架漏洞前言Spring框架漏洞漏洞原理Spring框架特征Struts2框架漏洞...1.Spring Security OAuth2 远程命令执行(CVE-2016-4977) Spring Security OAuth2是为Spring框架提供安全认证支持的一个模块。Spring Sec
  • 面试必备:《Java 最常见 200+ 面试题全面解析》

    万次阅读 多人点赞 2019-06-18 18:10:30
    132. mybatis 有哪些执行器(Executor)? 133. mybatis 分页插件的实现原理是什么? 134. mybatis 如何编写一个自定义插件? 十四、RabbitMQ 135. rabbitmq 的使用场景有哪些? 136. rabbitmq 有哪些重要的...
  • java中的常见异常

    千次阅读 2018-07-29 09:18:38
    5、请写出你最常见的 5 个 RuntimeException 6、throw 和 throws 的区别 7、final、 finally、 finalize 的区别? 1、java中异常分为哪些种类?     1. 按照异常需要处理的时机分为编译时异常(...
  • Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说多少种Shell,其实说的是Shell脚本解释。 shell本身是一个用C程序编写的程序。 用户可以通过shell来向Kernel...
  • Java 最常见的 200+ 面试题:面试必备

    万次阅读 多人点赞 2019-07-10 17:41:50
    这份面试清单是从我 2015 年做了 Team...虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...
  • web常见安全漏洞

    万次阅读 2018-09-08 10:04:25
    常见的DoS攻击计算机网络带宽攻击和连通性攻击。 为了进一步认识DoS攻击,下面举个简单的栗子来进行说明: 图1 TCP三次握手:数据段互换 Client发送连接请求报文,Server接受连接后回复ACK报文,并为...
  • web常见的攻击方式

    千次阅读 2022-04-18 09:39:00
    用户通过浏览器访问web网页,xss攻击通过各种办法在用户访问页面的时候,插入一些自己的代码或者脚本,让用户访问页面的时候,就可以执行这个脚本,攻击者通过插入的脚本的执行就会获得一些信息(比如cookie),发送...
  • 最新Java面试题,常见面试题及答案汇总

    万次阅读 多人点赞 2019-07-12 08:56:55
    132.mybatis 有哪些执行器(Executor)? 133.mybatis 分页插件的实现原理是什么? 134.mybatis 如何编写一个自定义插件? 十四、RabbitMQ 135.rabbitmq 的使用场景有哪些? 136.rabbitmq 有哪些重要的角色? 137....
  • -e:执行文字编辑来设定用户(当前用户或指定用户)时程表,内定的文字编辑是vi. -r:删除用户时程表. -l:列出用户时程表. 4.Cron文件格式 * * * * * command 分 时 日 月 周 命令 ...
  • 2020最新Java常见面试题及答案

    万次阅读 多人点赞 2019-10-26 15:53:35
    Java最新常见面试题 + 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 736,535
精华内容 294,614
关键字:

常见的执行器有哪些