1.下列哪个语句在Python中是⾮法的?A、x = y = z =1 B、x = (y = z + 1)C、x, y = y, x D、x += y答案:B
2.关于Python内存管理,下列说法错误的是
A、变量不必事先声明 B、变量⽆须先创建和赋值⽽直接使⽤C、变量⽆须指定类型 D、可以使⽤del释放资源答案:B. (不先赋值会报错,is not defined)3、下⾯哪个不是Python合法的标识符A、int32 B、40XL C、self D、name答案:B(合法的标识符不能以数字开头)4、下列哪种说法是错误的
A、除字典类型外,所有标准对象均可以⽤于布尔测试B、空字符串的布尔值是FalseC、空列表对象的布尔值是False
D、值为0的任何数字对象的布尔值是False答案:D (a=0,0, bool(a)为True)5、下列表达式的值为True的是A、5+4j >2-3j B、3>2>2
C、(3,2)<(‘a’,‘b’) D、’abc’ > ‘xyz’
答案:C (在Py2.x版本中正确,在Py3.x运⾏错误)6、Python不⽀持的数据类型有A、char B、int C、float D、list
答案:A(python⾥⽆char型数据,有string字符串类型;但C语⾔中有char数据类型)7、关于Python中的复数,下列说法错误的是
A、表⽰复数的语法是real + imagej B、实部和虚部都是浮点数
C、虚部必须后缀j,且必须是⼩写 D、⽅法conjugate返回复数的共轭复数答案:C(复数虚部的后缀也可以是⼤写的J)8、关于字符串下列说法错误的是A、字符应该视为长度为1的字符串B、字符串以\\0标志字符串的结束
C、既可以⽤单引号,也可以⽤双引号创建字符串D、在三引号字符串中可以包含换⾏回车等特殊字符
答案:B(python因为字符串有长度,到了长度就标志字符串的结束)9、以下不能创建⼀个字典的语句是A、dict1 = {} B、dict2 = { 3 : 5 }
C、dict3 ={[1,2,3]: “uestc”} D、dict4 = {(1,2,3): “uestc”}答案:C(字典的键必须是不变的,⽽列表是可变的)10、下列Python语句正确的是:A、min = x if x< y = yB、max = x > y ?x:yC、if (x >y) print xD、while True :pass答案:D
python常见的命令⾏交互⾃动化模块有哪些?答案:a)Import moduleb) Import module1,module2c) From module import *
d) Frommodule import m1,m2,m3
e) From module import logger asmodule_logger12.python的底层⽹络交互模块有哪些?
答案:socket, urllib,urllib3 , requests, grab, pycurl13.python⽹络交互时,⼆进制打包解包的模块有哪些打包:pack(), 解包:upk()
14.python的测试框架有哪些?试列出常⽤的3个或更多答案:unittest, nose,unittest2, doctest, pytest15.⼀⾏把[1,2,3,1,2,3] 中的重复元素剔除。答案:list(set([1,2,3,1,2,3]))
16.现在要你使⽤pyDes(DES加密)和标准库中的namedtuple,假设你之前没有接触过,你如何快速上⼿?
答案:仔细阅读官⽅⽂档中namedtuple库和pyDes的使⽤。下载pyDes和namedtuple库,借鉴⽹上的使⽤教程,摸索实践。17.Python到底是什么样的语⾔?你可以⽐较其他技术或者语⾔来回答你的问题。
这⾥是⼀些关键点:Python是解释型语⾔。这意味着不像C和其他语⾔,Python运⾏前不需要编译。其他解释型语⾔包括PHP和Ruby。Python是动态类型的,这意味着你不需要在声明变量时指定类型。你可以先定义x=111,然后 x=”I’m a string”,⼀点问题也不会有。
Python是⾯向对象语⾔,所有允许定义类并且可以继承和组合。Python没有访问访问标识如在C++中的public, private, 这就⾮常信任程序员的素质,相信每个程序员都是“成⼈”了~
在Python中,函数是⼀等公民。这就意味着它们可以被赋值,从其他函数返回值,并且传递函数对象。类不是⼀等公民。
写Python代码很快,但是跑起来会⽐编译型语⾔慢。幸运的是,Python允许使⽤C扩展写程序,所以瓶颈可以得到处理。Numpy库就是⼀个很好例⼦,因为很多代码不是Python直接写的,所以运⾏很快。
Python使⽤场景很多 – web应⽤开发,⾃动化,科学建模,⼤数据应⽤,等等。它也经常被看做“胶⽔”语⾔,使得不同语⾔间可以衔接上。Python能够简化⼯作 ,使得程序员能够关⼼如何重写代码⽽不是详细看⼀遍底层实现。18.Python和多线程,是不是个好主意?列举你觉得可以让Python代码并⾏运⾏的⽅法?
Python实际上不允许多线程。它有⼀个threading包但是如果你想加快代码运⾏速度,或者想并⾏运⾏,这不是⼀个好主意。Python有⼀个机制叫全局解释器锁(GIL)。GIL保证每次只有⼀个线程在解释器中跑。⼀个线程获得GIL,之后再交给下⼀个线程。所以,看起来是多个线程在同时跑,但是实际上每个时刻只有CPU核在跑⼀个线程,没有真正利⽤多个CPU核跑多个线程。就是说,多个线程在抢着跑⼀个CPU核。
但是还是有使⽤threading包的情况的。⽐如你真的想跑⼀个可以线程间抢占的程序,看起来是并⾏的。或者有很长时间的IO等待线程,这个包就会有⽤。但是threading包不会使⽤多核去跑代码。
真正的多核多线程可以通过多进程,⼀些外部库如Spark和Hadoop,或者⽤Python代码去调⽤C⽅法等等来实现19.你怎么对你的代码进⾏跟踪,协同写代码?使⽤版本控制:git
20.下⾯这段代码的输出是什么def f(x,l=[]):
for i in range(x): l.append(i*i)
print(l)
f(2)
f(3,[3,2,1])f(3)12345678[0, 1]
[3, 2, 1, 0, 1, 4][0, 1, 0, 1, 4]
因为Python内存还是存了第⼀次残留的l值,所以它以0和1开头。21.猴⼦补丁是什么?它是不是⼀个好主意?
猴⼦补丁是在⼀个函数或者对象已经存在的基础上,改变它的⾏为。⽐如:
import datetime
datetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)12
⼤多数时候这不是⼀个好主意 – 如果早就设计好,不是更好?⼀个可以使⽤猴⼦补丁的地⽅是做测试,著名的包mock,就是⼀个很好的例⼦。22.*args, **kwargs是什么东西? 我们为什么会⽤它?
我们⽤ args 当我们不知道要有多少个参数传给函数,或者我们想把⼀个列表或者tuple存起来以后传给函数。我们⽤**kwargs当我们不知道有多少个关键字参数要传给函数,或者我们想把字典存起来以后传给函数。args 和 kwargs的名字是以前遗留下来的,你⽤bob 和**billy也没关系但是这样不太好,嘿嘿。
23.@classmethod, @staticmethod, @property都是什么意思?
修饰器的概念要懂。拿到⼀个函数,返回⼀个函数,或者拿到⼀个类,返回另⼀个类。@my_decoratordef my_func(stuff): do_things123
以上代码相当于:
def my_func(stuff): do_things
my_func = my_decorator(my_func)123
你可以在这⾥找到修饰器的⼀般⽤法。
@classmethod, @staticmethod 和 @property修饰器是使⽤在类中的。24.简介地描述下Python的垃圾回收机制
这⾥可以说许多东西,有⼏个重点你可以提到:
Python在内存中维护对象的引⽤次数。如果⼀个对象的引⽤次数变为0,垃圾回收机制会回收这个对象作为他⽤。
有时候会有“引⽤循环”的事情发⽣。垃圾回收器定期检查回收内存。⼀个例⼦是,如果你有两个对象 o1 和 o2,并且o1.x == o2 and o2.x == o1. 如果 o1和 o2 都没有被其他对象使⽤,那么它们都不应该存在。但是它们的应⽤次数都是1,垃圾回收不会起作⽤。
⼀些启发算法可以⽤来加速垃圾回收。⽐如,最近创建的对象更可能是⽆⽤的。⽤创建时间来度量对象的⽣命时长,⽣命越长,越可能是更有⽤的对象。CPython的说明⽂档中有相关解释。25.python中有哪些基础类型
有5个标准数据库类型:Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典)26.python⾥⾯的深拷贝,浅拷贝
在Python中对象的赋值其实就是对象的引⽤。当创建⼀个对象,把它赋值给另⼀个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引⽤⽽已。
浅拷贝:拷贝了最外围的对象本⾝,内部的元素都只是拷贝了⼀个引⽤⽽已。也就是,把对象复制⼀遍,但是该对象中引⽤的其他对象我不复制
深拷贝:外围和内部元素都进⾏了拷贝对象本⾝,⽽不是引⽤。也就是,把对象复制⼀遍,并且该对象中引⽤的其他对象我也复制。1,深浅拷贝都是对源对象的复制,占⽤不同的内存空间。
2,不可变类型的对象,对于深浅拷贝毫⽆影响,最终的地址值和值都是相等的。3,可变类型:
=浅拷贝: 值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相等27.实现⼀个字典数据结果的深拷贝copy浅拷贝
deepcopy深拷贝
from copy import deepcopy深拷贝和浅拷贝的例⼦:data = {'user':'admin','num':[1,2,3]}data2 = data.copy()
data3 = deepcopy(data)123
查看结果
data['user']='root'
data['num'].remove(1)print(data)print(data2)print(data3)5
输出结果为:
{'user': 'root', 'num': [2, 3]} {'user': 'admin', 'num': [2, 3]} {'user': 'admin', 'num': [1, 2, 3]}123
总结:
如果源拷贝对象只有⼀级⽬录的话,源做任何改动,不影响深浅拷贝对象
如果源拷贝对象不⽌⼀级⽬录的话,源对⼀级⽬录的⼦⽬录做任何改动,都会影响浅拷贝,但不影响深拷贝28.循环 迭代 遍历 递归
循环 指的是在满⾜条件的情况下,重复执⾏同⼀段代码。⽐如,while语句。
[ 循环则技能对应集合,列表,数组等,也能对执⾏代码进⾏操作。 迭代(iterate),指的是按照某种顺序逐个访问列表中的每⼀项。⽐如,for语句。
[迭代只能对应集合,列表,数组等。不能对执⾏代码进⾏迭代。] 遍历(traversal),指的是按照⼀定的规则访问树形结构中的每个节点,⽽且每个节点都只访问⼀次。[遍历同迭代⼀样,也不能对执⾏代码进⾏遍历。]
递归(recursion),指的是⼀个函数不断调⽤⾃⾝的⾏为。⽐如,以编程⽅式输出著名的斐波纳契数列。[线性递归和尾递归。]29.异常处理机制
捕捉异常可以使⽤try/except 语句。
try/except 语句⽤来检测try语句块中的错误,从⽽让except 语句捕获异常信息并处理。如果你不想在异常发⽣时结束你的程序,只需要try 捕获⾥捕获它。使⽤以下语法:
try …except …else 的语法try:
<语句> #运⾏别的代码except <名字>:
<语句> #如果在try部份引发了’name’异常except <名字>,<数据>:
<语句> #如果引发了’name’异常,获得附加的数据else:
<语句> #如果没有异常发⽣
try的⼯作原理是,当开始⼀个try语句后,python就在当前程序的上下⽂中作标记,这样当异常出现时就可以回到这⾥,try⼦句先执⾏,接下来会发⽣什么依赖于执⾏时是否出现异常。
如果当try后的语句执⾏时发⽣异常,python就跳回到try并执⾏第⼀个匹配该异常的except⼦句,异常处理完毕,控制流就通过整个try语句(除⾮在处理异常时⼜引发新的异常)。
如果在try后的语句⾥发⽣了异常,却没有匹配的except⼦句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
如果在try⼦句执⾏时没有发⽣异常,python将执⾏else语句后的语句(如果有else的话),然后控制流通过整个try语句
30.class类中(self)指的是什么self 指的是类本⾝。
31.range 函数的使⽤,其中有那两个参数
函数语法:
range(start, stop[,step])参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
1、selenium中如何判断元素是否存在?- isElementPresent
2、selenium中hidden或者是display = none的元素是否可以定位到?- 不能
3、selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素⼀定是可以点击的?- 添加元素智能等待时间 driver.implicitly_wait(30)
- try ⽅式进⾏ id,name,clas,x path, css selector 不同⽅式进⾏定位,如果第⼀种失败可以⾃动尝试第⼆种
-Selenium保证元素成功率是通过元素的定位,当然它的定位⽅法很多,⼀定能有合适的。但是在⾃动化⼯程的实施过程中,⾼质量的⾃动化测试不是只有测试⼈员保证的。需要开发⼈员规范开发习惯,如给页⾯元素加上唯⼀的name,id等,这样就能⼤⼤地提⾼元素定位的准确性。当然如果开发⼈员开发不规范,我们在定位元素的时候尽量使⽤相对地址定位,这样能减少元素定位受页⾯变化的影响。只要我们元素定位准确,就能保证我的每⼀个操作符合我的预期
4、如何提⾼selenium脚本的执⾏速度?
- Selenium脚本的执⾏速度受多⽅⾯因素的影响,如⽹速,操作步骤的繁琐程度,页⾯加载的速度,以及我们在脚本中设置的等待时间,运⾏脚本的线程数等。所以不能单⽅⾯追求运⾏速度的,要确保稳定性,能稳定地实现回归测试才是关键。我们可以从以下⼏个⽅⾯来提⾼速度:
⼀,减少操作步骤,如经过三四步才能打开我们要测试的页⾯的话,我们就可以直接通过⽹址来打开,减少不必要的操作。
⼆,中断页⾯加载,如果页⾯加载的内容过多,我们可以查看⼀下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页⾯加载。三,在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提⾼速度。
四,配置testNG实现多线程。在编写测试⽤例的时候,⼀定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运⾏,提⾼执⾏速度。
5、⽤例在运⾏过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升⽤例的稳定性?- time.sleep( )
- driver.implicitly_wait(30)- 多⽤ try 捕捉,处理异常
-此时我们要分析出不稳定的原因,然后有针对性的去解决问题。主要有以下⼏个⽅⾯ :
⼀,⽹速问题:有的时候⽹页加载的⽐较慢,在程序执⾏的时候要操作的元素没有显⽰出来。这种情况⽐较常见,运⾏⼀次⽹速好的时候通过了,再运⾏⼀次,页⾯没有打开,就不通过了。为了提⾼稳定性,我们只能牺牲运⾏时间了,在经常检测失败的元素前加上等待时间,等要操作的元素出现之后再执⾏下⾯的操作。
⼆,Selelnium的原因:Selenium1.0和2.0还是有区别的,有些⼉函数在2.0下运⾏确实有时⽽有效,时⾯⽆效。如果mouseover()函数,就是这种情况,我们需要避免使⽤这类的函数。
三,多线程的时候,测试⽤例间相互影响。虽然多线程的时候运⾏速度⽐较快,但是如果⽤例之间的耦合性没有设计好,也会影响的,如果⽤例A先于⽤例B执⾏的时候,就会影响到⽤例B;反之则没有问题。这种情况,如果你的⾃动化测试⼯程打算多线程的时候,提前就要把测试⽤例测试的耦合度⽐较松,尽量没有任何关系,因为多线程的执⾏顺序是不受控制的。
6、你的⾃动化⽤例的执⾏策略是什么?
- ⾃动化测试⽤例的执⾏策略是要看⾃动化测试的⽬的,通常有如下⼏种策略:
⼀,⾃动化测试⽤例是⽤来监控的,在此⽬的下,我们就把⾃动化测试⽤例设置成定时执⾏的,如果每五分钟或是⼀个⼩时执⾏⼀次,在jenkins上创建⼀个定时任务即可。
⼆,必须回归的⽤例。有些⼉测试⽤例,如BVT测试⽤例,我们在公司产品任何变动上线之前都需要回归执⾏。那我们就把测试⽤例设置成触发式执⾏,在jenkins上将我们的⾃动化测试任务绑定到开发的build任务上。当开发⼈员在仿真环境上部代码的时候,我们的⾃动化测试⽤例就会被触发执⾏。
三,不需要经常执⾏的测试⽤例。像全量测试⽤例,我们没有必要⼀直回归执⾏,必竟还是有时间消耗的,有些⾮主要业务线也不需要时时回归。这类测试⽤例我们就采⽤⼈⼯执⾏,在jenkins创建⼀个任务,需要执⾏的时候⼈⼯去构建即可。
7、什么是持续集成?
- 持续集成源于极限编程(XP),是⼀种软件实践,软件开发过程中集成步骤是⼀个漫长并且⽆法预测的过程。集成过程中可能会爆发⼤量的问题,因此集成过程需要尽可能⼩⽽多,实际上持续集成讲的是不断的去做软件的集成⼯作。持续集成,最简单的形式是包括⼀个监控版本控制(SVN等等)变化的⼯具。当变化被发觉时,这个⼯具可以⾃动的编译并测试你的应⽤。
8、⾃动化测试的时候是不是需要连接数据库做数据校验?- UI⾃动化不需要
- 接⼝测试会需要
9、id,name,class,xpath, css selector这些属性,你最偏爱哪⼀种,为什么?- css 、xpath ⼏乎所有的元素都可以定位到
10、如何去定位页⾯上动态加载的元素?
- 触发动态加载元素的事件,直⾄动态元素出现,进⾏定位
11、如何去定位属性动态变化的元素?
- xpath或者css通过同级、⽗级、⼦级进⾏定位
12、点击链接以后,selenium是否会⾃动等待该页⾯加载完毕?- 会的
13、webdriver client的原理是什么?
- [Webdriver实现原理](http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html)
通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不⾼深莫测⽆法揣度。在这⾥以webdriver ruby binding的firefox-webdriver实现为例,简单介绍⼀下webdriver的⼯作原理。
当测试脚本启动firefox的时候,selenium-webdriver 会⾸先在新线程中启动firefox浏览器。如果测试脚本指定了firefox的profile,那么就以该profile启动,否则的话就新启1个profile,并启动firefox;
firefox⼀般是以-no-remote的⽅法启动,启动后selenium-webdriver会将firefox绑定到特定的端⼝,绑定完成后该firefox实例便作为webdriver的remote server存在;
客户端(也就是测试脚本)创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response;
客户端接受response,并分析其返回值以决定是转到第3步还是结束脚本;
这就是webdriver的⼯作流程,看起来很复杂实际上当了解了webdriver的实现原理后,理解上述问题应该⽐较简单。webdriver是按照server – client的经典设计模式设计的。
server端就是remote server,可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是remote server,它的职责就是等待client发送请求并做出相应;
client端简单说来就是我们的测试代码,我们测试代码中的⼀些⾏为,⽐如打开浏览器,转跳到特定的url等操作是以http请求的⽅式发送给被 测试浏览器,也就是remote server;remote server接受请求,并执⾏相应操作,并在response中返回执⾏状态、返回值等信息;
14、webdriver的协议是什么?-The WebDriver Wire Protocol
15、启动浏览器的时候⽤到的是哪个webdriver协议?-http
16、什么是page object设计模式?
-http://www.cnblogs.com/tsbc/p/4080301.html
相似功能地⽅,代码基本都是⼀样的,界⾯元素换个查找⽅式,把原来的使⽤ xpath⽅式,改为使⽤ id 查找,需要对每个⽤例脚本都要改,虽然⼏个⽤例看不出什么⼯作量,但是重复findElement的代码,已经让我们感到了代码的笨重。如果某些定位发⽣了改变,我们就得贯穿整个测试代码进⾏调整元素定位,这样就会导致我们的脚本在后期,难以维护。因此通过Page Object Model 我们可以创建更加健壮代码,并减少或者消除重复的测试代码,从⽽也能够提⾼代码的可读性,减少编写脚本的⼯作量。Page Object Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。
17、什么是page factory设计模式?
- http://relevantcodes.com/pageobjects-and-pagefactory-design-patterns-in-selenium/
18、怎样去选择⼀个下拉框中的value=xx的option?-⼆次定位
19、如何在定位元素后⾼亮元素(以调试为⽬的)?-重置元素属性,给定位的元素加背景、边框
20、什么是断⾔?
-断⾔的英⽂是assertion,断⾔检查的英⽂是assertion checking。
-断⾔是指定⼀个程序必须已经存在的状态的⼀个逻辑表达式,或者⼀组程序变量在程序执⾏期间的某个点上必须满⾜的条件。
21、如果你进⾏⾃动化测试⽅案的选型,你会选择哪种语⾔,java,js,python还是ruby?-使⽤⾃⼰熟悉的语⾔
22、page object设置模式中,是否需要在page⾥定位的⽅法中加上断⾔?-不需要
23、page object设计模式中,如何实现页⾯的跳转?-get、click (可能有坑)
24、⾃动化测试⽤例从哪⾥来?-⼿⼯⽤例中抽取
-可以参考⾃动化⽤例的执⾏策略
25、你觉得⾃动化测试最⼤的缺陷是什么?-不稳定-可靠性-不易维护-成本与收益 ,
26、什么是分层测试?
-[分层⾃动化](http://www.cnblogs.com/fnng/p/3653793.html?utm_source=tuicool&utm_medium=referral)还是⾃⼰理解吧
27、webdriver可以⽤来做接⼝测试吗?-有难度,不推荐
28、get和post 的区别?(感觉可能答案不对)
-因为使⽤GET请求不会产⽣什么动作。不会产⽣动作意味着GET的HTTP请求不会在服务器上产⽣任何结果。但是安全⽅法并不是什么动作都不产⽣,这⾥的安全⽅法仅仅指不会修改信息。POST可能会修改服务器上的资源的请求。⽐如CSDN的博客,⽤户提交⼀篇⽂章或者⼀个读者提交评论是通过POST请求来实现的,因为再提交⽂章或者评论提交后资源(即某个页⾯)不同了,或者说资源被修改了。两种请求⽅式的区别:
1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数⽤&连接。URL的编码格式采⽤的是ASCII编码,⽽不是uniclde,即是说所有的⾮ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上⾯的item=bandsaw就是实际的传输数据。因此,GET请求的数据会暴露在地址栏中,⽽POST请求则不会。2、传输数据的⼤⼩
在HTTP规范中,没有对URL的长度和传输的数据⼤⼩进⾏。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有。因此,在使⽤GET请求时,传输数据会受到URL长度的。
对于POST,由于不是URL传值,理论上是不会受的,但是实际上各个服务器会规定对POST提交数据⼤⼩进⾏,Apache、IIS都有各⾃的配置。3、安全性
POST的安全性⽐GET的⾼
29、公司内⼀直在使⽤的测试系统(B/S架构)突然不能访问了,需要你进⾏排查并恢复,说出你的检查⽅法答:⼀、⽹站输⼊域名直接⽆法访问,⽹站之前还正常,突然就⽆法访问
1. 测试FTP是否正常可以登录,不能登录的直接问空间商那是空间商的问题直接联系他们。
2. 空间赠送的三级域名是否能够访问⽹站打开⽹站(空间都赠送三级域名),如果也不能访问应该是空间问题。
3. 在电脑的开始菜单运⾏中输⼊cmd,在弹出的⿊框中输⼊:ping 你的域名;然后回车,如果看不到IP或IP地址与你的主机地址不符,则说明域名解析有误,是域名的问题得重新解析域名。⼆、访问报404错误(⽆法找到该页)。说明是⽹站内容都正常是程序出现问题,看看程序是否完整。三、访问⽹站出现MySQL Server Error 这个是数据库链接错误,查看数据库连接⽂件和数据库是不是错误。四、访问⽹站出现500错误。
1. 请登录FTP查看是否多了异常⽂件或丢失⽂件,说明⽹站被侵⼊了,马上联系⽹站制作进⾏进⾏排查故障。
2. 如果空间且FTP程序⽬录没有缺失⽂件或刚刚安装就出现500错误,请确认空间已开启scandir()函数,查看是不是禁⽌了这个函数。
因篇幅问题不能全部显示,请点此查看更多更全内容