理论部分

1.测试分为哪几个阶段

2.测试的流程是什么

3.如何做好测试计划

4.常见的测试用例设计方法有哪些

5.一条bug记录包含哪些内容

5.如何分层自动化测试

6.如何保证脚本的有效性

7.如何降低自动化维护成本

8.常见的测试覆盖类型

9.B/S和C/S架构什么区别

,客户端,比如微信,QQ

,浏览器页面,比如百度页面

10.安全性都包含哪些内容

11.测试报告都包含哪些内容

12.Alpha和Beta测试的区别是什么

13.bug的类型都有哪些

Python部分

1.面向对象的概念

代码示例:

 # Animal是类,相同事物的统称
 class Animal(object):
     def run(self):
         print('Animal is running...')

 # Dog类,继承于Animal类
 class Dog(Animal):
     pass

 puppy = Dog()
 puppy.run()

 # 多态,子类方法覆盖父类方法
 class Cat(Animal):
     def __init__(self, name):
         # __name是属性
         self.__name = name

     def getName(self):
         print(self.__name)

     def run(self):
         print('Cat is running...')

 # limi是一个猫类的实例
 limi = Cat("limi")
 # run是实例的一个方法
 limi.run()
 # getName方法
 limi.getName()

2.什么是进程,线程,协程

代码示例:

 # encoding: utf-8
 #进程
 # from multiprocessing import Process
 #
 # def foo(i):
 #     print("This is Process ", i)
 #
 # for i in range(5):
 #     p = Process(target=foo, args=(i,))
 #     p.start()

 #线程
 # import threading
 #
 # def show(i):
 #     print('This is Thread', i)
 #
 # for i in range(5):
 #     t = threading.Thread(target=show, args=(i,))
 #     t.start()

 #协程
 import gevent

 def foo():
     print("start_foo")
     gevent.sleep(2)
     print("end_foo")

 def bar():
     print("start_bar")
     gevent.sleep(0)
     print("end_bar")

 # foo()
 # bar()
 gevent.joinall([
     gevent.spawn(foo),
     gevent.spawn(bar),
 ])

3.如何使用python实现socket编程

 #encoding: utf-8
 #服务端

 # 导入 socket 模块
 import socket

 # 创建 socket 对象
 s = socket.socket()
 # 绑定端口
 s.bind(("127.0.0.1", 6666))

 # 等待客户端连接
 s.listen(5)

 while True:
     # 建立客户端连接
     c, addr = s.accept()
     print '连接地址:', addr
     c.send('Welcome')
     # 关闭连接
     c.close()
 #encoding: utf-8
 客户端
 # 导入 socket 模块
 import socket

 # 创建 socket 对象
 s = socket.socket()

 #连接服务端
 s.connect(("127.0.0.1", 6666))
 print s.recv(1024)
 s.close()

4.什么是lambda函数

 #encoding: utf-8

 #计算平方
 def square(x):
     return x**2

 print square(10)

 #lambda表达式
 r = lambda x:x**2
 print r(10)

5.tuple和list有什么区别

6.range()函数的用法

 #range生成从0到100的列表
 alist = range(0, 101)
 print(alist)

 #设置步长为2
 blist = range(2, 101, 2)
 print(blist)

7.字符串的拆分方法有哪些

8.单引号,双引号,三引号的区别

9.*args,**kwargs有什么作用

 #encoding: utf-8

 #arg
 def test_args(first, *args):
    print first
    for v in args:
       print "args %s" % v

 #args = (2, 3, 4, 5)
 test_args(1, 2, 3, 4, 5, 6)

 #kwargs
 def test_kwargs(first, *args, **kwargs):
    print first
    for v in args:
       print "args %s" % v
    for k, v in kwargs.items():
       print "kwargs", (k, v)
 #args = (2, 3, 4, 5)
 #kwargs: k1=5, k2=6, k0=4
 test_kwargs(1, 2, 3, 4, 5, k0=4, k1=5, k2=6)

10.python中pass语句的作用

 #encoding: utf-8

 def test():
     pass

 test()

11.re模块中match和search方法的不同

 #encoding: utf-8
 import re

 s1 = "helloworld, helloworld"
 w1 = 'hello'
 w2 = 'world'

 #search扫描整个字符串
 print(re.search(w2, s1))
 print(re.search(w2, s1).group())

 #match只在字符串开始的位置匹配
 print(re.match(w2, s1))
 print(re.match(w2, s1).group())

12.WSGI和FastCGI的的关系

13.python是如何操作文件的

 #encoding: utf-8

 #写文件
 f = open('test.txt', 'wt')
 f.write("hello world")
 f.close()

 #使用with,追加内容,不用关心文件关闭问题
 with open("test.txt", 'at') as f:
     f.write("\nhello mook")

 #读取文件
 with open("test.txt", 'rt') as f:
     print(f.read())

14.python的内存管理机制

 #encoding: utf-8
 from sys import getrefcount

 #引用计数
 a1 = 10000000
 a2 = 10000000
 #del a1
 del a2

 print(id(a1))
 #print(id(a2))

 #检验a1和a2是同一个东西
 #print(a1 is a2)

 # #获取a2的引用计数
 print(getrefcount(a1))

15.dict的items与iteritems的区别

 #encoding: utf-8

 testl = {'key1': 2, 'key2': 3, 'key3': 4}

 kv1 = testl.items()
 # print(next(kv1))

 kv2 = testl.iteritems()
 print(next(kv2))
 print(next(kv2))
 print(next(kv2)) 

16.python常用算法

sorted()方法排序后生成新的列表,不会改变原来的列表

list.sort()方法排序后会改变原来的列表

 #encoding: utf-8

 alist = [0, 10, 88, 19, 9, 1]
 #print(sorted(alist))

 #print(sorted(alist, reverse=True))

 alist.sort(reverse=True)
 print(alist)

冒泡排序:

 #encoding: utf-8

 # 冒泡排序
 def bubble_sort(lists):
     #获取数组长度
     count = len(lists)-1
     itemrange = range(count, 0, -1)
     #N个元素遍历N次
     for index in itemrange:
         #第i个和第i+1个依次对比
         for sub_index in range(index):
             #大的元素冒上去
             if lists[sub_index] > lists[sub_index+1]:
                 lists[sub_index],lists[sub_index+1]=lists[sub_index+1],lists[sub_index]
     return lists

 alist = [0, 10, 88, 19, 9, 1]
 print(bubble_sort(alist))

快速排序:

 #encoding: utf-8
 # 快速排序
 def quick_sort(lists, left, right):
     #递归过程中,发现left和right一致时,停止递归,直接返回列表
     if left >= right:
         return lists
     #定义游标
     low = left
     high = right

     #取参考标志,最左边的元素
     key = lists[low]
     while low < high:
         #从最右侧向左,依次和标志元素对比,如果右侧的元素大于标志元素
         while low < high and lists[high] >= key:
             #右侧减1
             high -= 1
         #否则low赋high值
         lists[low] = lists[high]

         #从最左侧向右,依次和标志元素对比,如果左侧的元素小于标志元素
         while low < high and lists[low] <= key:
             #左侧加1
             low += 1
         #否则high赋low值
         lists[high] = lists[low]

     #最后给high位置赋值
     lists[high] = key

     #处理左侧元素
     quick_sort(lists, left, low - 1)
     #处理右侧元素
     quick_sort(lists, low + 1, right)
     return lists

 alist = [0, 10, 88, 19, 9, 1, 7]
 print(quick_sort(alist, 0, 6))

堆排序:

 #encoding: utf-8

 def heap_sort(lst):
     def sift_down(start, end):
         """最大堆调整"""
         root = start
         print "root %d start %d end %d"%(root, start, end)
         while True:
             child = 2 * root + 1
             #print "child index: %d" % child

             #终止条件,孩子的索引值超过数组最大长度
             if child > end:
                 break
             #print "lst child value:%d" % lst[child]

             #确定最大的孩子节点的索引值
             if child + 1 <= end and lst[child] < lst[child + 1]:
                 child += 1
                 #print "child+1 index: %d" % child

             #孩子节点最大值和根节点交换
             if lst[root] < lst[child]:
                 lst[root], lst[child] = lst[child], lst[root]
                 #print "lstroot %d" % lst[root], "lstchild %d" % lst[child]
                 root = child
                 #print "root %d" % root
             else:
                 break

     print("-----------------创建最大堆------------------")
     # 创建最大堆
     print(xrange((len(lst) - 2) // 2, -1, -1))
     for start in xrange((len(lst) - 2) // 2, -1, -1):
         print "---->Loop start %d" % start
         sift_down(start, len(lst) - 1)
         print(lst)

     print("-----------------排序过程------------------")
     # 堆排序
     for end in xrange(len(lst) - 1, 0, -1):
         #首尾交换
         lst[0], lst[end] = lst[end], lst[0]
         #剩余重新堆排序
         sift_down(0, end - 1)
         print(lst)
     return lst

 alist = [70, 60, 12, 40, 30, 8, 10]
 print(heap_sort(alist))

二分查找:

 # encoding: utf-8

 alist = [0, 1, 10, 88, 19, 9, 1]

 def binary_search(arr, start, end, hkey):
     if start > end:
         return -1
     mid = start + (end - start) / 2
     if arr[mid] > hkey:
         return binary_search(arr, start, mid - 1, hkey)
     if arr[mid] < hkey:
         return binary_search(arr, mid + 1, end, hkey)
     return mid

 alist = sorted(alist)
 print(alist)
 print binary_search(alist, 0, 6, 9)

素数(质数):

 #encoding: utf-8

 #0,1不是素数
 #除了1和它自身外,不能被其他自然数整除的数
 def is_prime(n):
     if n <= 1:
         return False

     for i in range(2, n-1):
         if n % i == 0:
             return False
     return True

 for i in range(0, 100):
     if is_prime(i):
         print i

Linux部分

基础命令

网络命令:

系统命令:

计算机网络相关

1.OSI网络七层模型指的哪些内容

2.http协议中get,post的区别

2.tcp和udp的区别

3.tcp连接3次握手的具体过程

tcp连接4次挥手的过程(主动方可以是客户端,也可以是服务端)

4.socket建立连接的过程

操作系统相关

1.进程与线程的区别

2.进程都有哪些状态

3.进程同步与互斥的区别

4.进程间通信都包括哪些

5.进程的调度算法有哪些

6.死锁产生的原因

7.页面置换算法都有哪些

8.makefile的作用是什么

9.什么是虚存,实存,共享内存

MySQL相关

1.创建数据库:CREATE DATABASE 数据库名;

2.删除数据库:DROP  DATABASE 数据库名;

3.创建数据表:CREATE TABLE 表名;

4.插入数据:INSERT INTO 表名 VALUES(内容);

5.查询数据:SELECT 字段名 FROM 表名 WHERE 条件;

6.更新数据:UPDATE 表名 SET 字段名=新值 WHERE 条件;

7.删除数据表:DROP TABLE 表名;

Fiddler工具相关

1.如何抓取手机包

具体使用过程,可以参考自己之前的博客:http://www.cnblogs.com/ailiailan/p/hanxiaobei.html

2.实现慢网速,过滤

过滤:

慢网速:

自定义修改延时时间:

Android相关

1.Android的四大组件

2.Activity的生命周期

Activity的4个状态:运行、暂停、停止、关闭;关闭有系统来完成。

4个状态间的转换过程图:

3.什么是ANR

ANR:应用无响应,是由系统来监控应用程序的,如果应用程序超时,系统会弹出ANR提示

4.Android常见的5种布局

5.Android中动画类型有哪几种

ADB相关

1.重启adb服务

2.app的安装与卸载

3.电脑和手机之间传输数据

4.如何静默安装app

5.adb命令启停一个app

-S:如果app已经启动了,先执行停止app,再启动

6.通过关键字查找已安装的包

-f:所有包              -3:第三方包               -i:已经安装的包

7.截屏、录屏

8.抓log

9.获取当前CPU,内存状态

Monkey相关

1.Monkey进行压力测试的命令

2.如何重现crash,anr

3.如何提取crash,anr信息

adb shell monkey -v -v -v -p packagename count >文件名.txt  (3个-v会显示最详细的log信息)

4.如何设置monkey运行8个小时

--throttle 毫秒数     (定义两个动作之间的时间间隔)   时间间隔 * count = 总执行时间

5.在crash/anr出现后,如何继续执行

6.monkey执行指定的事件类型

自动化工具

1.Instrumentation的原理是什么

2.Instrumentation用来测试什么

3.什么时候用Instrumentation

4.UIAutomator是什么

5.UIAutomator可以测试什么

6.如何识别App视图内的元素

7.Selendroid原理

8.Robotium原理

9.Appium的理念是什么

10.Appium相关概念

11.Appium的环境

12.Appium初始化需要配置哪些内容

13.Appium测试Native App的原理

14.Appium测试Hybrid App的原理

15.Appium测试Ios App的原理

16.Native App元素的定位工具

17.定位元素的Api有哪些

18.Native App脚本的编写原则

19.Native App初始化注意事项

20.Hybrid App的定位方式

21.Hybrid App脚本的编写原则

22.Hybrid App初始化注意事项

自动化框架

1.unittest框架都包含哪些内容

TestFixture包含

2.什么是数据驱动

3.数据驱动DDT的原理

4.数据驱动DDT的意义

5.什么是行为驱动

6.行为驱动Lettuce的原理是什么

代码示例:

自动化测试代码:

 #encoding:utf-8
 from lettuce import *
 from appium import webdriver

 @before.each_scenario
 def lauchApp(scenario):
     desired_caps = {}
     desired_caps['platformName'] = 'Android'
     desired_caps['platformVersion'] = '5.1'
     desired_caps['deviceName'] = '192.168.56.102:5555'
     desired_caps['appPackage'] = 'com.android.calculator2'
     desired_caps['appActivity'] = '.Calculator'
     desired_caps["unicodeKeyboard"] = "True"
     desired_caps["resetKeyboard"] = "True"
     world.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

 @after.each_scenario
 def closeApp(scenario):
     world.driver.quit()

 @step("I have two number: (\d+) and (\d+)")
 def have2number(step, number1, number2):
     world.number1 = number1
     world.number2 = number2

 @step("Do add method")
 def doAdd(step):
     numa = world.driver.find_element_by_id("digit_"+world.number1)
     numa.click()

     add = world.driver.find_element_by_id("op_add")
     add.click()

     numb = world.driver.find_element_by_id("digit_"+world.number2)
     numb.click()

     equal =  world.driver.find_element_by_id("eq")
     equal.click()

     world.result = world.driver.find_element_by_class_name("android.widget.EditText").text

 @step("I get result: (\d+)")
 def judgeResult(step, result):
     assert result == world.result, "The result are not equal %s and %s" %result and world.result

测试用例:

 Feature: Calculation
     Input two number, then compare result

     Scenario: Do a simple add method
         Given I have two number: 1 and 5
         When Do add method
         Then I get result: 6

     Scenario: Do a simple add method
         Given I have two number: 2 and 5
         When Do add method
         Then I get result: 8

7.什么是关键字驱动

8.关键字驱动测试框架Robot framework的原理

RIDE工具:

9.测试报告管理

代码示例:

 #encoding: utf-8
 import unittest
 import time
 from HTMLTestRunner import HTMLTestRunner

 class MyTestCase(unittest.TestCase):
     #每条用例初始化
     def setUp(self):
         self.initdata = "hello imooc"
     #测试用例,以test开头
     def test_something(self):
         self.assertEqual("hello imooc", self.initdata)
     #每条用例执行完后释放资源
     def tearDown(self):
         pass

 if __name__ == '__main__':
     #声明一个suite
     suite = unittest.TestSuite()
     #从类加载用例集
     cases = unittest.TestLoader().loadTestsFromTestCase(MyTestCase)
     #添加用例到suite
     suite.addTests(cases)

     #生成HTMLTestReport
     #以时间戳来定义报告名称
     now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
     HtmlFile = "report/" + now + "_Report.html"
     fp = file(HtmlFile, "wb")

     #声明一个runner
     myTestRunner = HTMLTestRunner(stream=fp, title=u"测试报告", description=u"用例测试情况")

     #执行Runner
     myTestRunner.run(suite)
     fp.close()

10.邮件通知

代码示例:

#!/usr/bin/python
# -*- coding: utf8 -*-
import smtplib
from email.mime.text import MIMEText

mail_host = "smtp.163.com"  # 设置服务器
mail_user = "Yannan@163.com"  # 用户名
mail_pass = "tester123"  # 口令
mail_postfix = "163.com"  # 发件箱的后缀

# to_list:收件人;sub:主题;content:邮件内容
def send_mail(to_list, sub, reportpath):
    file = open(reportpath, "rb")
    content = ""
    for line in file.readlines():
        content = content + line.replace("class='hiddenRow'", "")

    # 这里的hello可以任意设置,收到信后,将按照设置显示
    me = "TestCenter" + "<" + mail_user + ">"
    # 创建一个实例,这里设置为html格式邮件
    msg = MIMEText(content, _subtype='html', _charset='utf-8')
    # 设置主题
    msg['Subject'] = sub
    msg['From'] = me
    msg['To'] = ";".join(to_list)
    try:
        s = smtplib.SMTP()
        # 连接smtp服务器
        s.connect(mail_host)
        # 登陆服务器
        s.login(mail_user, mail_pass)
        # 发送邮件
        s.sendmail(me, to_list, msg.as_string())
        s.close()
        return True
    except Exception, e:
        return False

接口测试相关

1.Fiddler抓取https包

2.如何实现一个Api测试框架

3.如何使用Python requests实现get请求

代码示例:

 #encoding: utf-8

 import requests
 import unittest
 import ddt

 @ddt.ddt
 class testClass(unittest.TestCase):

     @ddt.data("App专项测试", "自动化", "Python")
     def testGet(self, queryword):
         #header部分的配置
         headers_data = {
             'User-Agent':'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36',
             'Host':'m.imooc.com',
             'Referer': 'https://m.imooc.com/',
             'Connection':'keep-alive',
             'Accept-Encoding':'gzip, deflate, br'
         }

         #cookies部分的配置
         cookies_data = dict(imooc_uuid='ffbd103a-b800-4170-a267-4ea3b301ff06',
                             imooc_isnew_ct=',
                             imooc_isnew=',
                             page = 'https://m.imooc.com/')

         #get请求的构造
         res = requests.get(
             "https://m.imooc.com/search/?words="+queryword,
             headers=headers_data,
             cookies=cookies_data)

         #print res.status_code
         #print res.text

         self.assertTrue(u"共找到" in res.text)

 if __name__ == "__main__":
     unittest.main()

4.如何使用Python requests实现post请求

代码示例:

 #encoding: utf-8
 import requests
 import unittest
 import ddt

 @ddt.ddt
 class testClass(unittest.TestCase):

     @ddt.data(
         ("),
         (")
     )
     @ddt.unpack
     def testPost(self, username_data, password_data):
         formdata = {
             "username": username_data,
             "password": password_data,
             "verify": '',
             "referer":'https://m.imooc.com'}

         headers_data = {
             'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36',
             'Host': 'm.imooc.com'
         }

         #cookies部分的配置
         cookies_data = dict(imooc_uuid='ffbd103a-b800-4170-a267-4ea3b301ff06',
                             imooc_isnew_ct=',
                             imooc_isnew=',
                             page = 'https://m.imooc.com/')

         res = requests.post("https://m.imooc.com/passport/user/login",
             data = formdata,
             headers = headers_data,
             cookies = cookies_data
         )

         print res.json()

         self.assertTrue(90003 == res.json()['status'] or 10005 == res.json()['status'])

 if __name__ == "__main__":
     unittest.main()

5.什么是持续集成

6.持续集成都包括哪些内容

7.持续集成有什么意义

8.实现持续集成的工具有哪些

9.如何搭建Jenkins持续集成平台

10.使用Jenkins需要做哪些配置

11.持续集成的应用

服务端测试

1.服务端压力测试需要关注哪些指标

兼容性测试

1.App兼容性测试都考虑哪些因素

可以借助云测平台,提高兼容性测试的覆盖度

2.WAP网页兼容性测试都考虑哪些因素

3.PC网页兼容性测试都考虑哪些因素

Bug 调试与定位

1.APP相关的bug调试工具有哪些

2.WAP网页相关的bug调试工具有哪些

3.PC网页相关的bug调试工具有哪些

测试工程师技术tree(“自言自语”)的更多相关文章

  1. 上海洋码头(www.ymatou.com)急招技术人才(职位:互联网软件开发工程师,.NET网站架构师,Web前端开发工程师,高级测试工程师,产品经理)

    对公司招聘职位有兴趣的童鞋可以把简历发送到zhangzhiqiang@ymatou.com,我们HR会快速给你答复. 互联网软件开发工程师 岗位职责: 1.参与洋码头各个平台(www.ymatou.c ...

  2. 《Python测试开发技术栈—巴哥职场进化记》—软件测试工程师“兵器库”

    上文<Python测试开发技术栈-巴哥职场进化记>-初来乍到,请多关照 我们介绍了巴哥入职后见到了自己的导师华哥,第一次参加团队站会,认识了团队中的开发小哥哥和产品小姐姐以及吃到了公司的加 ...

  3. 功能测试很low?不能升级到高级测试工程师?

    功能测试很low?不能升级到高级测试工程师? 功能测试很low?功能测试很简单?功能测试就是黑盒测试?功能测试没有技术含量?功能测试工资低?只会功能测试没有竞争力?功能测试这活初中生都可以干?功能测试 ...

  4. 【招聘】.NET高级开发、前端高级开发、测试工程师

    .NET架构师 工作地点:厦门-湖里区 工作年限:5年及以上 学历要求:大专或以上 工资范围:15000元 - 25000元 福利待遇:五险一金,带薪年休假,年度旅游,丰富的员工团队活动:生日会.中秋 ...

  5. python测试工程师高端基础面试题整理

    面试总括篇 技术技能 开发语言:python 数据库:mysql 操作系统;linux 网络协议基础 测试技能:自动化(UIselenium+接口)+性能 业务知识 测试工程师执业规划 初级--> ...

  6. 饿了么测试专场技术沙龙实况回顾&PPT 下载

    PPT下载和视频观看链接 链接:https://pan.baidu.com/s/1dE8uXHZ 密码:6j5z视频直播回顾: http://www.itdks.com/dakashuo/playba ...

  7. 【测试工程师面试】在BOSS直聘上和面试官的一问一答

    岗位描述: 信用卡核心系统功能测试,负责测试计划制定,测试设计,测试执行,测试进度掌控,自动化工具建设等工作.有责任心,执行力强,工作认真细致,逻辑思维强熟悉linux,oracle或者IBM大型机操 ...

  8. [面试]中高级测试工程师必备,月薪15K+

    1.你的测试职业发展是什么? 测试经验越多,测试能力越高.所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去.而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求 ...

  9. 《Google软件测试之道》测试工程师

    愿和我一样读过这本书的人有所共鸣或者启发,愿没读过这本书的人,能获得一点点收获... 说到软件测试工程师,首先我们需要明白一个问题,软件测试工程师的职责是什么? 关于这个话题,不同的人有不同的定义:抛 ...

随机推荐

  1. MIT / BSD / Apache / LGPL / Mozilla / GPL 区别

    自由度:MIT > BSD > Apache > LGPL > Mozilla > GPL

  2. SSM实现mysql数据库账号密码加密连接

    引言 咱们公司从事的是信息安全涉密应用的一些项目研发一共有分为三步,相比较于一般公司和一般的项目,对于信息安全要求更加严格,领导要求数据量和用户的用户名及密码信息都必需是要密文配置和存储的,这就涉及到 ...

  3. javascript中的定时器入门

    JavaScript提供定时器(timer)的功能,可以延期执行或重复执行函数或代码段. window对象提供了三个方法来实现定时器的效果,分别是setTimeout().setInternal()和 ...

  4. Thinkphp 5.1.24 parseKey缺陷导致聚合注入 分析

    测试url: http://127.0.0.1/thinkphp/thinkphp_5.1.24/public/index.php/index/index/sqli2?id=2 控制器是获取id参数作 ...

  5. VMware+node+nginx+vue

    1.安装CentOS 这里不再复述,不会的请移步VMware虚拟机安装centos7   2.部署 1.安装 node.js cd /usr/local/ wget https://nodejs.or ...

  6. Unrecognized header format %

    <VirtualHost *:*> RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} </ ...

  7. 剑指offer 21:包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 要求在O(1)时间内完成,由于栈后进先出的原则,不能出现破坏栈结构的事情.因 ...

  8. Java反射04 : 通过Array动态创建和访问Java数组

    java.lang.reflect.Array类提供了通过静态方法来动态创建和访问Java数组的操作. 本文转载自:https://blog.csdn.net/hanchao5272/article/ ...

  9. aws创建ec2虚拟机

    利用亚马逊AWS搭建个人服务器 https://www.jianshu.com/p/a045d4217175 https://segmentfault.com/a/1190000019201071?u ...

  10. postman---Postman配置环境变量和全局变量

    我们在测试的过程中,遇到最多的问题也可以是环境的问题了吧,今天开发用了这个测试环境,明天又换了另一个测试环境,这样对于我们测试非常的麻烦,特别最接口的时候需要来回的输入环境地址比较麻烦,今天我们看看强 ...