赞
踩
目录
十三,一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
十四,测试前端页面,按钮不好使,不获取源码如何解决(提示接口测试)
参考牛客网和对应公司面经
数字规律:https://blog.csdn.net/sinat_38972110/article/details/82145600
编程特训:https://www.nowcoder.com/activity/oj(推荐《剑指offer》)
牛客竞赛:https://blog.csdn.net/weixin_44264744/article/details/106525662
20春招总结:https://blog.csdn.net/weixin_44264744/article/details/106525662
牛客各大面经:https://www.nowcoder.com/activity/topics
测试岗各企业面经:https://www.nowcoder.com/discuss/84011
知乎没有软测经验办法: https://www.zhihu.com/question/26779409/answer/580740361
测试流程:需求评审,需求确定,制定测试计划,设计用例设计(概要+详细),测试环境,执行测试,BUG追踪,测试报告
测试方法:黑盒---,白盒---(语句,判定,条件,判定/条件,条件组合,路径),灰盒
测试类型:功能,非功能(兼容,性能,可靠,安全,压力--阈值--性能测试的一部分,负载--时长.....)
测试阶段:(需求,概要,详细设计)
单元测试是对软件中的基本组成单位进行的测试(桩/驱动)
集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确
系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求
验收测试:向软件的购买者展示该软件系统满足其用户的需求。测试数据通常是系统测试的测试数据的子集(a/b/正式
通过运行程序测试软件称为动态测试.通过评审文档、阅读代码等方式测试软件称为静态测试,
测试人员所需:基础理论知识,编程语言知识,工具使用经D验,计算机基础知识,测试框架知识JUnit
业务分析能力,缺陷洞察能力,团队协作能力,专业技术能力,逻辑思考,沟通表达,宏观把控
测试人员的核心竞争力:早发现问题早解决问题降低成本消耗,发现别人发现不了的问题,独一无二,沟通思考,快速学习
黑盒测试:等价类划分,边界值分析,错误推测,因果图法,正交法,场景法(功能测试) //简单+代码覆盖率低
白盒测试:逻辑覆盖法,程序插桩技术,基本路径法,符号测试,错误驱动测试(结构测试)
α测试:alpha,指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试
β测试:beta,软件的多个用户在一个或多个用户的实际使用环境下进行的测试,开发者不在测试现场,外部/非专业人员
测试在开发中的任务:寻找BUG,避免软件开发过程中的缺陷,衡量软件品质,关注用户需求
软件质量的六个特征:功能特征,可靠,易用,效率,可维护,可移植
测试用例的组成:用例编号,用例标题,功能模块名称,前置条件,输入数据,操作步骤,预期结果,优先级,执行结果
编写人,执行人,其他补充项
.软件的生命周期:问题定义 可行性研究 需求分析 概要设计 详细设计 编码和单元测试 综合测试 软件维护
周期:New,Assigned已指派,Open,Fixed-修复,Pending Reset--待测试, Reset,Closed
Reopen,Pending Reject-拒绝中,Rejected-被拒绝的,Postponed-延期的 (11)
类型: 代码错误,界面优化,设计缺陷,安装部署, 性能问题,标准规范,,,,,
等级:致命,严重,一般,建议(立即解决,高优先级,正常排队,低优先级)
如果测试过程中你发现一个bug,但开发人员认为不是一个bug怎么处理
首先:明确开发说不是bug的理由,将问题提交到缺陷管理库里面进行备案,要获取判断的依据和标准
如果是需求变更/不确定, 那就找产品经理确认是否是需求变更
如果开发说测试环境问题, 说明清楚测试环境问题是什么,按照他说的验证一遍, 如果确实如他所说, 关闭bug
如果开发说用户不存在这种使用场景,依据是什么?若出现会有什么不良结果?把这个bug 知会到测试经理,让其判定
小概率BUG,截图或保留证据
前后端判定:
通过请求与响应来判断
先抓包看请求报文,对比接口文档,看请求报文有没问题,有问题就是前端发的数据不对
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题
缺陷管理工具:禅道
自己遭遇的印象深刻的BUG:
缺陷管理:严重等级判定,上线的影响,出现在那一端,是偶线还是A线,期望结果,错误表现,操作步骤,
bug记录的组成:内容,发现时间,测试条件(系统配置信息,环境,软件版本)
预期结果与实际结果,发现步骤,严重等级,发现位置等
方法:从开发那儿获取接口文档(功能接口、请求方式、请求URL、请求参数、参数类型,返回参数)若无,用fiddler抓包
分类:程序内部/系统对外,webservice接口--走soap协议通过http传输 http api接口--走http协议 举例1 如何测--详细
定义:通过测试不同情况下的入参和相应的出参信息来判断接口是否符合相应的功能/安全性要求,是测试系统组件间接口的测试
必要性:发现很多在页面操作上发现不了的BUG,检查系统的安全性,稳定性,异常处理能力,处理并发情况
发现的BUG:边界值溢出导致输入和
- 特殊值处理不当导致程序异常退出或者崩溃
-
- 类型边界溢出,导致数据独处和写入不一致
-
- 取值边界外未返回正确的错误信息
-
- 权限未处理,可以访问其他用户的信息
-
- 逻辑校验不完善,可以利用漏洞获取非正当利益
-
- 状态处理不当,导致逻辑出现错误
-
- 数组类型item个数为0或者item重复时程序异常退出
问题:在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理---设置全局变量处理依赖的数据
依赖于第三方数据的接口如何进行测试?---通过mock工具来模拟第三方的数据返回,最大限度降低接口依赖
当一个接口出现异常时候,你是如何分析异常的?---1-通过fiddler抓包,查看请求和返回报文,2查看后端日志
如何模拟弱网测试----通过fiddler,平时说的模拟丢包即是
依赖登录状态的接口如何测试?-----在构建POST请求时添加必要的session或者cookie
是否满足前提条件:
有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例
是否携带默认值参数:
正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例
业务规则、功能需求:
这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例
参数是否必填:
逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例
参数之间是否存在关联:
有些参数彼此之间存在相互制约的关系
参数数据类型限制:
逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例
参数数据类型自身的数据范围值限制:
正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例
工具: 111 eclipse中的outline窗口显示测试方法,Android JUnit Test测试
定义:可以对任何类、接口、结构等实体中的字段、属性、构造函数、方法等进行
分类:整体测试(类名右键)和单独测试(项目名上右键) 可行不
问题:测试没有参数的函数,它可能还有别的输入,例如全局变量,成员变量,或调用子函数获得的输入(照常测试)
charles弱网模拟
chrome的webview调试工具弱网模拟
iOS手机自带Network Link Conditioner 弱网模拟
web项目:是b/s架构,基于浏览器的,只用更新服务器端,主要关心响应时间
app项目:是c/s的,必须要有客户端,需要服务器和浏览器端同时更新,关心流量/电量/CPU/GPU等,需考虑安装卸载更新
还要看屏幕分辨率,屏幕尺寸,还要看设备系统。考虑安装时的中断、弱网、安装后删除安装文件等异常场景
有专项测试:如网络、适配性 兼容不同(品牌/版本/分辨率/
内存:空闲状态、中等规格、满规格状态下的应用消耗 app测试面试题
流量:首次启动,高负荷运行,连续运行n小时
电量:待机时耗电,长时间连续使用耗电
启动速度:首次启动,非首次启动,应用界面切换(安装卸载时间,页面加载时间)
CPU,页面切换速度,与服务器交互的网络速度
工具:轻量接口自动化测试---jmeter 网络抓包工具---Wireshark
如果广东用户头条app刷不出东西了:网络连接是否稳定/更新头条版本尝试/清除app缓存
请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题
是否手机出现故障,是否手机缓存过多造成内存不够用
是否手机网络连接不稳定(弱网/无网),若是,有无网络差提示
是否手机内存溢出(关注人数达上限否)
是否是版本问题或者是安装包问题(更新系统,重新安装安装包)
在debug模式下,查看app的线程列表,看线程是否卡主
1.在Eclipse Devices窗口,选中app对应的包名,然后点击debug图标(绿色的小虫子),然后切换到Debug视图。
2.切换视图之后,可以看到debug下,app的线程列表。
3.对于main线程(第一个线程),选中,并将其挂起Suspend。
4.然后我们就可以看到,Suspend之后,main线程卡住的位置。
测试工具: /性能监控器工具,流量-wiresh/弱网测试:
手机自带测试系统,单元测试:Junit等
通过真机调试,修改appdata中的数据,做最大值和异常值的测试
接口/性能测试--后端服务器:jmeter(主要关注响应时间,吞吐量,并发数,事务通过率等)
app性能测试--性能监控器(实时查看),长时间查看:打开性能监控面板,导出trace工具,借助开发者工具中的trace查看
微信小程序自动兼容ios和android手机,屏幕适配(分辨率/机型/版本)小程序自带调试系统,
运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
指令权限不同:IOS中用于UI指令权限最高,安卓中数据处理指令权限最高
防火墙,网络信号,DNS解析,输入错误,服务器拒绝访问
访问拥塞,病毒,请求和响应被黑客截取,浏览器不兼容
在线用户数:用户同时在一定时间段的在线数量
并发用户数:某一时刻同时向服务器发送请求的用户数
因为这是个前端界面,可以按F12打开开发者工具
在network里按钮点击时请求有没有发出去,看状态码,有没有生成新文件之类的,确定是不是连接的问题。
postman模拟发包过去测试也行
功能测试:按下开机键,屏幕能否亮起
性能测试:按下开机键,屏幕能否在规定时间内亮起
压力测试:连续多次按下开机键,观察屏幕是否能一直亮起,到多久时间失灵
健壮性测试:给定一个中了病毒的手机或者是淘汰许久的老机子,安歇开机键观察屏幕能否亮起
可靠性测试:连续按下开机键有限次数,比如1万次,记录屏幕未亮起的次数
可用性测试:开机键按下费不费力,开机键的形状设计是否贴合手指,开机键的位置设计是否方便
十七,支付流程测试
用户名或密码有一方为空,验证是否登陆失败并且提示信息正确
用户名或密码两方全为空,验证是否登陆失败并且提示信息正确
输入正确的用户名和密码,点击提交按钮,验证是否能正确登录
输入未注册的用户名和任意秘密,验证登录会失败,并且提示相应的错误信息
输入已注册的用户名和错误的密码,验证登录会失败,并且提示相应的错误信息
存在验证码且具有时效性,需要分别验证时效内和时效外验证码的有效性
存在验证码,考虑文字是否扭曲过度导大,考虑颜色(色盲使 用者),刷新按钮是否好用
如果存在验证码功能,在用户名和秘密都正确的前提下,输入正确的验证码,验证登陆是否成功
如果存在验证码功能,在用户名和秘密都正确的前提下,输入错误的验证码,验证登陆是否失败,并出现正确的提示信息
输入栏是否设置快速删除按钮
用户名和密码是否大小写敏感
用户名和密码前后有空格的处理
登陆成功,是否有记住密码功能
登陆失败后,不能记录密码的功能
登录成功,能否跳转到正确的页面
新用户第一次登陆成功,是否有修改密码提示
用户登录过程中log中是否有个人信息明文打印
前端页面是否根据设计要求限制用户名和密码长度
密码是否非明文显示显示,使用星号圆点等符号代替
登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确
用户名和密码,中有特殊字符(比如空格),和其他非英文的情况
是否支持第三方登陆
刷新页面时是否会刷新验证码
页面默认焦点是否定位在用户名的输入框中
输入密码的时候,大写键盘开启的时候要有提示信息
用户登录成功但是会话超时后,继续操作是否会重定向到用户登录界面
有无记住用户名的功能,能否复制粘贴,是否支持TAB、ENTER等快捷键
不同级别的用户,比如管理员用户和普通用户,登录系统后的权限是否正确
第一次登录时,数据的同步情况,如个人头像,好友列表等
为空和输入空字符串时的校验是否一致
使用中文键盘输入字母时和使用英文键盘输入字母时传给后端的字符长度是否一致
界面的设计风格是否统一 ,文字简洁易懂,没有错别字
布局是否合理,testbox和按钮是否整齐,长度,高度是否复合要求
单用户登录的响应时间是否小于3秒
单用户登陆时后台请求数量是否过多
高并发场景下用户登录的响应时间是否小于5秒
高并发场景下服务端的监控指标是否符合预期
高集合点并发场景下是否存在资源死锁和不合理的资源等待
长时间大量用户连续登录和登出,服务器端是否存在内存泄漏
弱网,不同网速时登陆的时间,网络切换和网络延迟时登陆界面是否正常
密码在后台储存时是否加密
是否可以用抓包工具抓到的请求包直接登录
用户名和密码是否通过加密的方式,发送给Web服务
是否可以使用登录的API发送登录请求,并绕开验证码校验
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
密码是否具有有效期,密码有效期到期后,是否提示需要修改密码
截取到的token等信息,是否可以在其他终端上直接使用,绕开登录。token过期时间校验
用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript 验证
用户名和密码的输入框中分别输入典型的“SQL注入攻击”字符串,验证系统的返回页面
用户名和密码的输入框中分别输入典型的“XSS跨站脚本攻击”字符串,验证系统行为是否被篡改
----用户名和密码的的输入框xss跨站脚本攻击字符串验证系统的行为是否被篡改
防止暴力破解,检测是否有错误登陆的次数限制。
是否支持多用户在同一机器上登录
同一用户能否在多台机器上登录
不同机型登陆,异地登陆是否有提醒
连续多次登陆失败后系统是否会阻止用户后续的尝试
密码输入框内输入的密码是否都可以在页面源码模式下被查看
输入密码时是否有安全键盘模式?点击密码输入框是否能调起安全键盘?
不登录的情况下,在浏览器中直接输入登录后的URL地址,验证是否会重新定向到用户登录界面
本终端用户已登录,在其他终端尝试登录本用户账号登录失败时、本终端是否有账号异常操作的安全提示
密码输入错误是否有最大次数限制?分别测试最大值-1、最大值、最大值+1时的输错密码情况
超过最大次数限制后,是否采取强制手段限制登录或对账号暂时冻结处理
超过最大次数限制后,分别输入正确的密码和错误的密码再次登录
是否可以全用键盘操作,是否有快捷键。
输入用户名,密码后按回车,是否可以登陆。
输入框能否可以以Tab键切换。
不同浏览器下能否显示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)。
同种浏览器不同版本下能否显示正常且功能正常。
不同的平台是否能正常工作,比如Windows, Mac。
移动设备上是否正常工作,比如Iphone, Andriod。
不同的分辨率下显示是否正常。
本地化测试
不同语言环境下,页面的显示是否正确
网络测试
已登录的用户,杀死APP进程后,再次打开APP是否依然为已登录状态
正在登录过程中,遇到网络切换,如(4G切换到WiFi环境时)能否正常登录
无网络模式下登录,是否给出“网络未连接”或“网络异常”的提示及提示是否正确
第一次登录请求超时后(服务器出问题,随后恢复正常),再次请求登录能否登录成功
用等价类和边界值,判断支付的金额
如果没有登陆能否支付,支付成功后是否可以正常跳转
支付方式是否支持扫码支付,第三方平台支付(支付包,云网等),语音支付,指纹支付
支付时是否需要身份验证,支付后有无手机短信提示,是否可以找他人代付
用边界值法有无支付额度限制,余额不足时有无提示,支付时是否是动态加密支付
待支付状态:订单是否可以正常支付;是否可以取消;有相同订单是否可以支付两次
是否可以扫码支付,输入错误的密码会怎样显示,有无错误次数限制
若支持扫码支付,二维码是否支持支付包和微信扫码,若两人同时扫描怎么处理
有无最小支付金额限制,无意义的支付金额0,重复支付如何处理
如果支付包含优惠金额,该怎么处理优惠额度
性能测试
弱网,无网时是否可以支付
退款到账时间,耗电量的多少
带负载情况下的响应时间和吞吐率,在某个时间段内同时访问系统的用户数量
压力测试
多人同时付款
界面测试
支付界面有无错别字,排版是否合理,颜色搭配是否合理
兼容性测试
是否可以跨平台,不同电脑机型下显示有无区别
安全性测试
若支付不成功是否原路退款,若支付成功,有无支付信息提示
用fiddler抓包尝试修改价格,对订单金额有无效验
直接输入需要权限的页面地址可用访问
接口测试
第三方平台支付
服务端接口测试:SQL注入,XSS跨站脚本攻击,CSRF跨站请求伪造,越权访问
一瓶矿泉水瓶进行测试---高处跌落测试,烫,果汁等装入
如何对淘宝搜索框进行测试---分页,多条测试,违法内容管控禁止输入
水壶进行测试---耐热,易用,不易损坏,可移植(不同环境正常使用)
杯子的检测-----盖子,使用的最大次数,界面,方便否,易携带否,防震动否
准备两份,一个一面,二面时用,一个hr面时用。
HR面主要技能素养,生活经历,突出团队性,积极性,稳定性。
一二面主要技能,实习经历,会的技能,突出特点等等。
通常:非常感谢您给的机会,如果我有下轮面试,大概是什么时候,该做那方面的准备,进入(主要的挑战有)
一般:xx,坦白的说我对自己的面试表现不是很满意/您觉得我这边有什么需要改进和提升的地方吗?我想提升下自己
很差:xx,让我认识到自己的不足,坦白的说我离这个岗位的要求还有些距离,如果我再次来公司面试,您能否给点建议
语言:紧张?--语速就放慢 不会?-----谦虚 不好意思,这个问题我没涉及过,您看能不能给我解释一下
不了解时说:之前对这个软件接触并不多,不过我很好奇这里的技术大牛是如何使用的,我也非常有兴趣向大家学习。
优点:我先来说吧,主要有三个方面,第一是坚持,从大一开始,每周坚持进行两次锻炼,至今为止瘦了足足3/40斤,自从
决定参加蓝桥杯以来,每周的测试我从未缺席,除此之外每周都抽出4小时进行自我训练。第二,是好奇,无论大事小事,我总想
去试试,小时候我是我们街第一个玩滑板的人,高中时我是我们班第一个在校报上投稿并成功的人。第三,细心,从小到大,我
很少在数学考试中因粗心而失分,每次出门时总会再三检查有无缺漏。
缺点:我的缺点也很明显,首先,决策时不果决,总希望尽可能的选择最好的一方,获取最大利益,殊不知犹豫中会错失良
机,所以当面临决策时,我会第一时间去搜集相关资料,告诉自己不要犹豫。其次,我对他人的情感变换反应有些慢,不能很好
的察觉,所以,我会尽量的包容他人的脾气,去倾听去鼓励。最后,我有些怯场,每当面临大场面,总会十分紧张,为此每次我
都会提前准备,从常见问答,表情等方面尽可能的去完善,同时在平时,参与演讲比赛等活动去锻炼自己。
目前阶段,我会努力做好毕业设计,学习相关知识技能,并编写技术博客,同时积极锻炼身体,为未来打下坚实的基础
当入职后,我会尽可能的融入公司,通过请教周边同事,尽快的了解公司,了解职位。努力做好本职工作的同时,快速提升自己
的能力,融入团队,和大家一起共同努力。将自我价值与实现公司目标相结合,同时有针对当前工作,学习对应所需的内容,如
参与前端测试时,我会在前端代码,测试工具等方面加强,同时我会根据自己的成长,适当改动调整
开发的工作是实现功能,而测试的工作是确定功能是否正常运行,在测试和开发的选择上我思考了很久,之所以选择测试而不是
开发,主要原因有如下几点:首先,我是一个细心的人,容易发现问题,数学考试--细节上出错的很少,每次出门时都会再三检
查有无缺漏。其次,开阔思维,打开一片新的天地----比如登陆界面开始可能只知道,后来
最后,我认为测试虽然不起眼但有着举足轻重的作用,责任感,成就感-发现别人未发现的BUG,吵的凶的开发人员背后对着别人
夸你是最好的时候
享受少数派和幕后英雄的乐趣 不能把2000年识别为闰年没有2月29号,99是一个特殊标识,将电脑中的很多文件删除
把用来抱怨的时间,去寻找问题的解决方法,度娘永远是你的第一老师
责任,对谈好的截止日期认真负责
遇到问题,咨询领导和同事永远是备选项
你以为学到了全部,不过只是九牛一毛
加班可以学习到更多的东西,锻炼自己的能力,快速成长,如果工作需要我将义不容辞
大学校信息中心,我们就经常要加班,
我目前单身,没有家庭负担,可以全身心的投入工作。(改)
但同时我会提高工作效率,了解加班的原因,尽可能避免不必要的加班。
资:我对工资没有硬性要求/更注重的是工作机会和职业发展/我对贵公司非常感兴趣,所以只要条件公平我不会计较太多。
资:我更希望你能根据我的背景、工作经验和工作的积极性,来决定应付给我的薪水。
预期薪资:有礼貌的先问下HR公司的薪资架构、福利是怎样的,然后再问下对应聘岗位的薪资预算范围。
贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?
贵公司的晋升机制是什么样的?之后几轮面试什么形式
使用的主要语言有?测试开发部门是干什么的? 机遇和挑战
作为公司的管理层,您认为优秀的员工应该具备哪些特质呢?
“如果有幸能被贵公司录用的话,请问有没有什么 需要我在入职前,提前学习和准备的。”
业余爱好:和别人约着一起跑步,(体现团队意识)
跳槽看法:适当的跳槽可以促进人才的交流,应该支持,频繁的跳槽应该拒绝
朋友看法: 是一个值得信赖的人,因为我一旦答应别人什么事,就一定会做到,如果做不到,就不会轻易许诺
发生的大事:非洲发生蝗灾向亚洲进军,南极迎来最热1月,澳大利亚发生火灾大量植被被破坏,美国爆发新型流感病毒
如果没有被录取:敢于面对不气馁,善于反思吸取经验教训,克服失败阴影,再接再厉
难以和同事相处:首先从自身找原因,其次和同事沟通,同时顾全大局,努力做好本职工作
工作失误给公司造成损失:1想方设法去弥补2责任问题3总结吸取教训
如果录用了你,你会怎么开始工作:听从指示,了解情况,制定计划,开展工作
希望和那种上级合作:我是一个容易相处的人,无论哪种都可以,我相信公司选择的上级一定是xxx
如果可以的话,作为一个新人,我应该第一时间去适应环境,而不是让环境适应自己
首先,我花费了很多时间考虑考虑各种职业的可能性,最后我认为这项工作最适合我,原因是xxx,
这是一家有爱心的公司,捐款xxx设立了专项基金 维护员工合法权益,经常展开职工关怀活动 企业核心价值观:xxx
万金油:我了解到贵公司非常注重公司的发展和建设,各方面的管理也非常完善,xxx人际关系比较简单,团队氛围好,公司
前景很好,福利待遇好,我向往这样的公司已久了+公司特色
东方财富:
企业核心价值观:用户第一、正直敬业、合作创新
捐款500万驰援武汉并设立了专项基金
国内领先的互联网金融服务平台综合运营商
作业帮:
让一些教育资源不那么优秀的省份学生能够接触到一线教学资源
模式:搜题,直播课,1对1 用户量、活跃人数、搜索指数远超第二名
涵盖了习题搜索、名师直播、实时答疑、同步练习和学习沟通等教学测练评的各个环节
题目的一题多解,还有知识点讲解,相似题练习
shopee:
2015年成立于新加坡,东亚平台最大的跨境电商,覆盖新加坡、马来西亚、菲律宾、台湾、印度尼西亚、泰国及越南七大
市场,在越南和印尼领先lazada,拥有完善与充满潜力的学习与发展机会,时效快,主营为生活类产品,多元包容、信任透明的
文化氛围
不要说还行/不/不会/立刻入职等词 (价值观、稳定性、性价比)企业的氛围、文化、价值观等
自信不自大+穿着+企业文化+职业规划+应变能力+目光接触+保持微笑+真诚+结束:感谢你给的机会和指导
面试结束时,表达谢意,表明通过沟通,对这个职位更加了解,相信自己能够胜任 好的,辛苦您了
面试结束了,3轮面试下来觉得xx挺棒的,不管最终结果如何,都谢谢你的通知相伴啥的,如果有后续还请继续通知啥的
签offer前一定要了解,如果不是特别有把握,终面结束请别问这些,终面后通知结果时会谈
工资=基本工资+效绩+补贴(餐补,交通补)+加班费 五险一金,试用期,外勤+带薪年假
定义:渐进式JavaScript框架
适应:web端开发,移动端开发,跨平台应用开发
优点:遵循MVVM模式,体积小,运输效率高,实现了双向绑定,简化DOM操作
借鉴:angular的模板和数据绑定,react的组件化和虚拟DOM技术
特性 | Cookie | sessionStorage | localstorage |
---|---|---|---|
存储数据大小 | 不能超过4k | 5M,或者更大 | |
生命周期 | 关闭窗口失效 生存周期内一直有效 | 页面会话期间 | 持久存储数据 除非主动删除数据 |
数据/服务器 交互方式 | 数据会自动的传递到服务器 也可逆向,有带宽浪费 | 仅在本地保存 不发给服务器,无浪费 | 仅在本地保存 不发给服务器,无浪费 |
作用域 | 同源同窗口共享 | 同页面同窗口 | 同源同窗口共享 |
共同点 | 都保存在浏览器端 |
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
(5)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie
定义:最佳的实践,软件开发过程中面临问题所采用/被反复使用/多数人知晓/经过分类编目的、代码设计经验的总结
单例模式:一个类仅有一个实例 (会手写代码,Java工程师)
策略模式:一个类中经常改变的部分写成一个接口,然后在类中包含这个对象的实例
装饰模式:允许向一个现有的对象添加新的功能,同时又不改变其结构
观察者模式:对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都改变
简单工厂模式:定义一个用于创建对象的接口或抽象类,让子类决定实例化哪一个类
查找文件: find filename.txt
启动文件:net start filename.txt
判断文件类型: file [-v/-z] 文件名
查看进程是否运行: ps –ef|grep tomcat
(强制)终止线程: kill 【-9】 19979
显示文件和目录,包括隐藏/所有: ls -al
显示当前工作目录:pwd
创建目录: mkdir -p newfolder (确保存在)
删除空目录: rmdir deleteEmptyFolder
修改用户密码:passwd
定义:改变一个或多个文件的存取模式
语法:chomd [who] [opt] [mode] 文件名/目录名 chomd g+rw a.txt
[who]:u/g/o/a 用户/组/其它/所有
[opt]:r/w/x/s 读/写/执行/设置ID号
[mode]:+/-/= 增加/删除/重设 实例
其它:chomd [mode] 文件名 即664--110 110 100 自己读写不执行 同组读写不执行 其它组只读 drwxr-xr-- 754
编辑文件:vi 文件名
新建空文件:touch 文件名
移动文件:mv a文件 b目录
重命名文件:mv a文件 b文件
删除文件及子文件: rm -rf deleteFile
只读查看文本内容:cat -n /home/profile | more
全屏查看文本内容:more /etc/profile
分屏查看文本内容:less a.txt
查看文件头/尾10行 :head/tail -n 10 example.txt
复制文件-同目录a复制给b:cp a文件 b文件
复制文件包括其子文件到指定目录 : cp -r sourceFolder targetFolder
返回根目录:cd
f返回上级目录:cd ../
列出目录:ls -d (directory)
列出所有文件: ls -a (all)
清屏:clear
立即关机:shutdown -h now
1 分钟后关机:shutdown -h 1
立即重启:shutdown -r now
重启/关机/同步/注销:reboot/halt/sync/logout
获取文本对应文本的行号:
grep -n "xxx" a.txt | cut -d ":" -f 1
sed -n -e '/xxx/=' a.txt
获取进程ID:ps -A |grep "cmdname"| awk '{print $1}' pidof "cmdname" pgrep "cmdname"
查看IP地址:ifconfig -a
查看路由表:netstat -rn
远程登陆:telnet hostname
查看磁盘io:top
netstat-----显示网络状态 ping----检测主机 ifconnfig----显示或设置网络设备 telnet-----远程登陆
ps命令查找与进程相关的PID号:
ps a 显示现行终端机下的所有程序,包括其他用户的程序。
ps -A 显示所有程序。
ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
ps -e 此参数的效果和指定"A"参数相同。
ps e 列出程序时,显示每个程序所使用的环境变量。
ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
ps -H 显示树状结构,表示程序间的相互关系。
ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
ps s 采用程序信号的格式显示程序状况。
ps S 列出程序时,包括已中断的子程序资料。
ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
ps u 以用户为主的格式来显示程序状况。
ps x 显示所有程序,不以终端机来区分。 (常用:ps aux)
ps aux | grep pr 查找,通过管道使用grep命令过滤查找特定进程
kill -9 aa 杀死进程aa (windows的任务管理器)
根据进程号查看端口号:netstat -nap | grep port
手机查看进程:adb shell后在ps
软链接:可以跨分区跨文件系统,链接次数增加,支持目录,写相对路径,不是同一个文件,可以对不存在的文件创建
硬链接:.....是同一个文件 ln (-s)源文件 链接名 (加()s是软连接)
查看当前所有数据库: show database ;
打开指定数据库: use 库名 ;
查看当前库的所有表: show tables from 库名 ;
创建表: create table 表名( 列名 列类型;,,)
查看表结构: desc 表名;
查看服务器的版本: select version( ) ; //未登录时mysql --version/V
删除表: drop table 表名
注释: #注释文字 --注释文字 /*多行文字*/
事务:用户定义的一个数据库操作序列
持久性:事务一旦提交,对数据库的改变是永久的
原子性:事务中包括的所有操作要么都做,要么都不做
隔离性:事务的执行不受其它事务干扰
一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态(300水从a杯到b杯,取钱故障,你少300,别人未加)
主键 | 外键 | 索引 | 视图 | |
---|---|---|---|---|
定义: | 唯一标识一条记录 不能重复,不为空,可修改 | 表的外键是另一表的主键 外键可以有重复的, 可以是空值 | 该字段没有重复值 但可以有一个空值 | 虚拟的表,不包含数据 只包含动态检索数据的查询 |
作用: | 用来保证数据完整性 | 用来和其他表建立联系用的 | 提高查询效率,降低更新效率 | 简化操作,隐藏细节,保护数据 |
个数: | 主键只能有一个 | 一个表可以有多个外键 | 一个表可以有多个惟一索引 | 一般不更新 |
分类:普通索引,唯一索引,主键索引,组合索引,全文索引
唯一索引:在创建唯一索引时要不能给具有相同的索引值。
主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。
聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。
作用:相当于书的目录,以空间换时间,可以加快检索速度,表与表之间的连接,分组或子查询时可减少速度
场景:分组或子查询,统计max(),关联字段如外键,频繁whiere查询可以有索引
表的主键、外键必须有索引;
数据量超过300的表应该有索引;
经常与其他表进行连接的表,在连接字段上应该建立索引;
经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
索引应该建在选择性高的字段上
注意:不滥用,不会有包含NULL的列,查询通常只用一个索引,like"%s%"不用索引
缺点:空间占用,维护麻烦,跟新数据库不方便
哈希索引:更适合于等值查询,若键值对唯一,查找速度很快,一次即可,不唯一,则向后搜索
哈希索引:不支持范围查询和排序,不支持多列联合索引的最左匹配规则,大量重复键值对的情况下效率低
目的:处理并发问题
分类:排他锁、共享锁、更新锁(数据库系统角度)乐观锁,悲观锁(程序员角度)
共享锁:S锁,也叫读锁,用于所有的只读数据操作,非独占,多个事务可封锁同一个共享页,读完即放;
排它锁:X锁,也叫写锁,表示对数据进行写操作,独占,仅允许一个事务封锁此页;
更新锁:可读不能加其它锁,初始化阶段用来锁定可能要被修改的资源--》升级x锁,避免使用共享锁造成的死锁现象
乐观锁:每次去拿数据的时候都认为别人不会修改,不上锁,更新时判断,适合多读类型,开销大,浪费资源
版本号机制(表明修改的次数)或CAS算法实现-并发少时提高效率,cpu开销大,不保证代码原子性
悲观锁:每次使用资源都认为会被修改,操作取数据前先上锁,适合多写类型
(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)
内连接:select 查询列表 from 表1 别名 【连接类型 left/right inner】 join 表2 别名 on 连接条件
补充:【where 筛选条件】 【group by 分组条件】 【having 筛选条件】 【order by 排序列表】
最后:limit 【offset,】size; 要显示条目的起始索引(从0开始) 要显示的条目个数
列记录改变
插入:insert into 表名 set 列名=值,列名=值,..... /values( )
修改:update 表名 set 列=新值,列=新值,......where 筛选条件
删除:delete from 表名 where 筛选条件;----支持回滚 truncate table 表名;//全删
表改变
创建:create table 表名( 列名 列的类型【(长度)约束】 列名......);
修改:alter table 表名 add|drop|modify|change column 列名 【列类型,约束】
删除:drop table/database 表名 if exists 表名; show tables;
其它:not in / is null/ like % _ /avg/count/sum/max/min / limit 1 2
练习:
表中10条一样数据删除9个 : delete * from table_name limit
9
查询单科成绩前十:select * from student order by subject desc limit 10;
创建唯一索引:create unique index 索引名 on 表名(列名1,列名2,。。。)
脏读 不可重复读 幻读 事务的隔离级别 //解决并发问题
y y y read uncommitted:读未提交
y y x read committed:读已提交,不可重复读 Oracle 24
y x x repeated read:可重复读 mysql 1234
x x x serializable:串行化
char:定长字符串
vchar:可变长度字符串
union:对连个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
union all:对两个结果集进行并集操作,包括重复行,不进行排序。
sum():求和用累加 , 下用于求行个数
Count(*):包括了所有的列,在统计结果的时候不会忽略列值为null
Count(列名)只包括列名那一项,会忽略列值为空的计数
调整数据结构的设计,对于经常访问的数据库表建立索引
调整服务器内存分配
调整硬盘I/O,使硬盘之间I/O负载均衡
语法顺序:select[distinct] from join on where group by having union order by llimit
执行顺序:from on join where group by having select distinct union order by
- 1. select * from employees where hire_date =(select max(hire_date) from employees) //最后有无;无所谓
-
- 2. select distinct * from employees order by hire_date desc limit 2,1; //从m+1条开始,取n个数据 序号从1开始
-
- 3. select s.* ,d.dept_no from salaries as s join dept_manager as d on s.emp_no=d.emp_no
- where s.to_date = '9999-01-01' and d.to_date='9999-01-01'; //as可省join另一个表on条件 或
- and s.to_date = '9999-01-01' and d.to_date='9999-01-01'; //注两个表都要日期为9999
-
- 4. select last_name,first_name,dept_no from employees,dept_emp where dept_emp.emp_no = employees.emp_no;
- select last_name,first_name,dept_no from employees left join dept_emp on
- employees.emp_no = dept_emp.emp_no where dept_emp.dept_no<>''; //''前-不等于 或者无where用内连接
-
- 5. select sex ,count(*) as 人数 from student group by sex //count(*)计数 也可具体 count(sex)
- select count(*) from student where sex='男' , emp_no % 2 = 1 //为奇数
- select count(*) from student where sex='女'
-
- 6. select a.* from( select emp_no,count(*) as t from salaries group by emp_no) as a where t>15 //用()
- select emp_no,count(*) as t from salaries group by emp_no having t>15 //若用where筛选,则无效 *==emp_no
-
- 7. 获取所有非manager的员工emp_no
- select emp_no from employees where emp_no not in (select emp_no from dept_manager) //not in 列不在列
- select e.emp_no from employees e left join dept_manager d on e.emp_no = d.emp_no where
- d.emp_no is null; //左外连接两个表,主表在左,选从表为null的,即非manager的 is null
- select employees.emp_no from salaries except select dept_manager.emp_no from dept_manager; //except union SQL支持集合运算
-
- 8. select d.dept_no,d.emp_no,max(s.salary) from dept_emp d left join salaries s on d.emp_no = s.emp_no
- and d.to_date = s.to_date where d.to_date = '9999-01-01' group by d.dept_no //max(s.salary)的应用
-
- 9. 按照title进行分组,每组个数大于等于2,给出title以及对应的数目t,注意对于重复的emp_no进行忽略
- select title, count(distinct emp_no) as t from titles group by title having t >= 2; //注意count内部
- //没有sum()可以count(id) as sum 此外起别名,则调用时最好都d.emp_id
-
- 10. 对员工按薪水排名,薪水同按emp_no升序排列,并开始一列rank,表排名
- select a.emp_no ,a.salary, count(distinct b.salary) from salaries as a,salaries as b where a.to_date =
- '9999-01-01' and b.to_date ='9999-01-01' and a.salary<= b.salary group by a.emp_no order by a.salary desc,a.emp_no asc;
总结,a.别少,单词别写错,别写成英文, 判断a.salary<=b.salary,order by后的内容用,且注意顺序,count(b.salary)是b不是a
相关知识 等值连接与自然连接 外连接 等值连接==内连接(常用)用外连接一般生成表有null asc升序/顺序
exist==in in效率高,返回列 EXISTS相关子查询,返回true/false 通过子查询的判定对父要求的改变,子内可用父 f.sno=z.sno
排序算法---能手撕
数组:随机访问性强,查找速度快,插入和删除效率低,可能浪费内存,必须有足够的连续内存空间,大小固定,不能动态拓展
链表:插入删除速度快,内存利用率高,不会浪费内存,大小没有固定,拓展很灵活。,不能随机查找,查找效率低
数组应用场景:数据比较少,经常做的运算是按序号访问数据元素
链表应用场景:对线性表的长度或者规模难以估计;频繁做插入删除操作;构建动态性比较强的线性表。
数组:略 大小固定,当数据个数不确定时,浪费内存空间
链表:略
队列:提供先进先出的方法,存取其它项慢
栈:提供先进后出的方法,存取其它项慢
树:查找,插入,删除都快(如果数保持平衡),删除算法复杂
图:对现实世界建模,算法复杂且内存占用大
串:一种特殊的线性表,有空串,空格串
树中每个结点最多含有m个孩子(m>=2);
除根结点和叶子结点外,其它每个结点至少有[ceil(m / 2)]个孩子;
若根结点不是叶子结点,则至少有2个孩子
所有叶子结点都出现在同一层,叶子节点只有关键字,指向孩子的指针为空
B+树是在B树的基础上改造,它的数据都在叶子节点,同时,叶子节点之间还加了指针形成链表,知道首尾可查出所有数据
B+树快的原因:层数少,只在叶子节点存数据的特点就能极大的保证磁盘IO次数少,进而说,效率高
链地址法,开放寻址法,线性探测再散列
数组A[0..5, 0..6]的每个元素占5个字节,按行优先次序存储,则元素A[5, 5]相对A[0,0]的偏移量是( 200=7*5*4+5*4 )
进程:彼此间独立,每一进程都拥有多个线程,至少一个,资源分配的最小单位,资源分配和调度的独立单位,有独立空间
线程:运行在进程空间内,同一进程所产生的线程共享同一内存空间,.线程是程序执行的最小单位,切换上下文CPU快
备注:只有一个CPU,一次10毫秒,只运行一个进程,时间片轮转进程调度算法,并发,多个CPU,总线程数>CPU 并发
多线程:一个进程中同时有多个执行路径正在执行
高并发:指通过设计保证系统能够同时并行处理很多请求
程序:永存的,静态的,和进程不一一对应,没有状态,至少有一个进程
进程:暂时的,是程序的一次执行过程,动态的,具有并发性,有状态(具有生命周期,执行需要CPU,不是指令集合)
创建态:操作系统为新进程分配资源,创建PCB
终止态:,,,,数组越界,整数/0,I/O故障,非法指令(结束,遇到不可修复的错误)
就绪态:获得除CPU以外的所有资源(其它)
运行态:得到CPU在CPU上执行(CPU,其它)
阻塞态:因等待一些事件的完成暂时不能运行(全无)
创建态-------->就绪态<------时间片到,CPU被抢占/进程调度------->运行态------>终止态
<---I/O完成---阻塞态<------I/O请求-------
进程同步的方法:临界区,互斥量,信号量,事件
进程通信 :信号通信/信号量通信PV/消息队列通信/共享内存通信/套接字通信/管道通信-单向有情缘
线程通信的方法:通过synchronized关键字,while轮询方式,锁机制,管道通信方式
同步:同一时刻,只允许一个线程对临界资源进行操作
互斥:在互斥的基础上,实现进程之间的有序访问,A写,B不能读,B写完,A才能读
管道通信:只允许有血缘关系的进程之间进行通信,单向,面向字节流,保证数据一致性,半双工
先来先服务算法(7) 等待时间最长 有利于长作业 用于批处理系统
时间片轮转调度(分时系统) 紧迫任务响应慢
短作业优先调度算法 导致长作业陷入饥饿,不能保证紧迫性作业被及时处理
最短剩余时间优先算法
高响应比优先调度算法 响应比 =(等待时间+要求服务时间)/ 要求服务时间 对短作用有利,增加系统开销
优先级调度算法
多级反馈队列调度算法
定义:各进程互相等待对方手里的资源,导致各进程阻塞,无法向前
条件:
互斥条件:对必须互斥使用的资源的争抢才会导致死锁
不剥夺条件:进程保持的资源只能主动释放不能强行剥夺
请求和保持条件:保持着某些资源不放的同时,请求别的资源
循环等待条件:存在进程的循环等待链,死锁有循环等待,反之不对
解决:
将临界资源改造为可共享资源(如SPOOLing技术) 可行性不高
申请的资源得不到满足时,立即释放所拥有的资源 实现复杂,可能导致饥饿
运行前分配好所需的资源,之后一直保持 资源浪费,可能导致饥饿
给资源编号,必须按编号从小到大的顺序申请资源 不方便,资源浪费,编程麻烦
首次适应算法:从头满足要求即可
最佳适应算法:满足要求且大小最小的空闲区
最差适应算法:满足要求的最大空闲区,使碎片尽量小
循环首次适应算法:从上一次选择的下一块寻找
中断:中断是指来自CPU执行指令以外的事件发生后,处理机暂停正在运行的程序,转去执行处理该事件的程序的过程。
异常:异常是指源自CPU执行指令内部的事件发生后,处理机暂停正在运行的程序,转去执行该事件的过程。
区别:狭义的中断和异常的区别在于是否与正在执行的指令有关,中断可以被屏蔽,异常不能被屏蔽,出现应立即处理。
TCP: 面向连接的可靠性传输( 无差错,不丢失,不重复,且按序到达)--办法:确认和超时重传机制,下二
面向字节流,1对1全双工,首部20字节,传输效率低,有流量控制(滑动窗口),拥塞控制(慢开始,快重传)
UDP:无连接不可靠传输(尽最大能力交付,不保证可靠交付)
面向报文,支持1对1,1对多,多对多,首部8字节,传输效率高,没有拥塞控制,拥塞控制
定义:防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理
方法:滑动窗口---高效可靠的发送大量的数据
过程:接收端发现缓冲区快满了,就将滑动窗口调为小值或0,发送方发送窗口探测,之后决定是否再次发送
定义:防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞
丢包:定时器超时,收到三个重复的ACK
方法:慢开始,快重传
差异:丢包位置不同(流量控制-接收端,拥塞控制-路由器上),作用对象不同
http:简单快速灵活,无状态(对事务处理没有记忆能力,不知道客户端是什么状态),无连接,支持客户端服务器端模式
超文本传输协议,运行在TCP之上,内容是未加密的,明文的,客户端/服务器端都无法验证对方的身份 ,80
https:HTTP的安全版,运行在建立在TCP之上的加密传输协议SSL之上,需要CA申请证书,费用高,端口号:443
200状态码:响应成功
301状态码:永久重定向
302状态码:临时重定向,请求的文档被临时移动到别处
400状态码:客户端语法错误
401状态码:用户验证
403状态码:拒绝/禁止执行
404状态码:请求资源/页面不存在
500状态码:服务器内部错误
501状态码:未实现
502状态码:网关错误
版本:
HTTP/1.0:使用短连接,浏览器和服务器每进行一次HTTP操作建立一次连接,任务结束中断连接
HTTP/1.1:使用长连接,网页打开完成后客户端和服务器之间用于传输HTTP数据的 TCP连接不关闭,以后继续使用
HTTP/2.0:采用二进制格式,采用多路复用格式,头部压缩
特点:支持客户/服务器模式,允许传输任意类型的数据对象,每次连接只处理一个请求,对于事务处理没有记忆能力,快速
组成:(请求方法,URL,请求版本)请求行,请求头部,请求体
刷新页面不需要重新建立SSL连接:TCP连接没有断开
一个TCP连接可以对应多个HTTP请求
GET:从指定的资源请求数据
POST:向指定的资源提交要被处理的数据
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
缓存 | 能被缓存 | 不能缓存 |
编码方式 | 只能进行url编码 | 支持多种编码方式 |
是否保留在浏览历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 发送数据,GET 方法向 URL 添加数据,但URL的长度是受限制的。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 安全性较差,因为参数直接暴露在url中 | 因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
传参方式 | get参数通过url传递 | post放在request body中。 |
DNS解析:将域名地址解析为ip地址
依次检查:浏览器DNS缓存,系统DNS缓存,路由器DNS缓存,运营商DNS缓存
递归查询:.->.com->google.com->www.google.com.-->出错 本地/根/顶级/二级/..域名服务器
TCP连接:TCP三次握手
发送请求:客户端向服务器端发送HTTP请求报文 应用--》传输层TCP传输报文--》网络层查询MAC地址---》数据链路层
接受响应:服务器端经过数据链路层→网络层→传输层→应用层,解析请求报文,发送HTTP响应报文
渲染页面:
浏览器解析HTML源码,然后创建一个DOM树
浏览器解析CSS代码,然后创建一个CSSOM树
遇到script标记,调用javascript解析器,处理script代码(绑定事件,修改dom树/cssom树)
根据DOM树和CSSOM来构建一个渲染树
根据渲染树来计算每个节点的几何信息(布局),将各个节点颜色绘制到屏幕(渲染) 上5不顺序,次数不固定
//断开连接,TCP四次挥手
ACK确认位 SYN同步位 Seq序号
为什么不是两次:
在服务端对客户端的请求进行回应(第二次握手)后,就会理所当然的认为连接已建立,而如果客户端并没有收到服务端的回应呢?此时,客户端仍认为连接未建立,服务端会对已建立的连接保存必要的资源,如果大量的这种情况,服务端会崩溃。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
A: 10.0.0.0~10.255.255.255 即10.0.0.0/8
B:172.16.0.0~172.31.255.255即172.16.0.0/12
C:192.168.0.0~192.168.255.255 即192.168.0.0/16
同源策略:浏览器安全策略,协议名http://,域名www.xxx.com,端口号11 必须完全一致
跨越:不同域名之间相互访问,违背同源策略就会产生跨域
解决:
JSONP
window.name
降域 document.domain
设置窗口片段标识符,监听读取location.hash
跨域资源共享(CORS)
WebSocket协议跨域
服务端有很多服务,关于 http、ftp 等等,怎么知道你发的是 http 请求,我要响应的是 http 请求(端口)
视频聊天所用协议:1,RTP/RTCP/RTSP/SIP/SDP
2,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)
四层:链路层,网络层,传输层,应用层
在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层
网络层:
ip协议:网络层协议,提供ip路由功能
ICMP:网际控制报文协议,TCP/IP协议的子协议,用于在IP主机、路由器之间传递控制消息
ARP:地址解析协议,将ip地址转换为mac地址 请求--广播 应答--单播
RARP:逆地址解析协议,将Mac地址转换为ip地址
DHCP :动态主机配置协议
BGP :边界网关协议 ,域间路由协议
RIP :距离-向量协议,域内路由协议
OSPF:链路状态协议,域内路由协议
传输层:
TCP:传输控制协议
UDP :用户数据报协议
应用层:
DNS:域名解析协议
FTP:文件传输协议,端口号20/21
HTTP:超文本传输协议
SMTP:电子邮件协议
私有IP:10. 172.16 192.16
广播域/冲突域:路由器-都可,集线器/中继器-都不能,交换机/网桥-只能隔离冲突域
信道复用技术 :TDM/CDM/FDM/WDM 时/码/频/波分复用
IP地址:200.23.16.0/23
网络号:IP地址&子网掩码
子网掩码:23个1 即11111111.11111111.11111110.00000000 255.255.254.0
IP提供不可靠的数据报传送服务
数据传输过程中,差错主要是由通信过程中的噪声引起的
TCP的服务器程序必须先于其客户程序运行
向服务器请求服务只需传送请求方法和路径。请求方法:GET、HEAD、POST。
IPV4 单播/广播/组播 IPV6 任播
在局域网模型中,数据链路层分为 逻辑链路控制子层LLC和媒体访问控制子层MAC
IPv6的128位地址通常写成8组,每组由四个十六进制数组成
一,5只猫 五分钟捉5只老鼠 请问100分钟捉100只老鼠需要多少只猫?
答案:5只
二,圆桌,两个人,轮流放硬币,不能重叠,半径为1,某一方不能放下去,则为输。问先手赢 后手赢
答案:先手赢,圆桌对称,先手先放,后手都可以找对称位置,除了圆心
三,3升的杯子一个,5升的杯子一个,杯子不规则形状 问怎么得到4升的水 水无限多
答案:略
四,晚上有四个人过桥,一次只能过两个人,但是只有一只手电筒,四个人过桥时间分别是1,2,5,8,求最短过桥时间
答案:甲乙,甲回,丙丁,乙回,甲乙,15分钟
五,有十张扑克牌,每次可以只出一张,也可以只出两张,要出完有多少种出法
答案:89 F(9)=N F(8)=P F(10)=F(8)+F(9) F(1)=1 F(2)=2
六,井盖为什么是圆的
答案:用料少,受压均匀,成本低
七,两个盲人各买了一白一黑两双袜子,不小心弄混了,问他们自己怎么分成刚好每人一白一黑
答案:袜子是连在一起的
八, 烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定15分钟?
答案:烧两根,一根点两头,一根点一头,烧完,剩下的把另一投点了,烧完,看重合点
九,海盗分金,五人,过半同意,否则喂鱼,问1方案?
答案:45,5反对,4喂鱼,所3(100,0,0),故2(98,0,1,1),故1(97,0,1,2,0)
十,岔路口,通往1,2,两人,一人必说谎,一人永真话,怎么去1
答案:问一人,另一人会回答那条路去1,回答答案必假
十一,果冻,有黄色、绿色、红色三种,闭眼抓同种颜色两个,抓取多少个,可确定有两个同色果冻?
答案:根据抽屉原理,4个
十二,下水道为什么是圆的
答案:方便人员进出,井盖不容易掉落,不易如棱角磨损节约材料,保护车辆 和行人的安全
十三,一共100个球,两人轮流拿,每人每次最多拿5个,最后一个拿的人赢;如果我先拿,怎么拿一定会赢?
答案:每次拿的球总数控制为6;第一次拿4个;
十四,有120g面粉,现有一个天平和一个2g的砝码以及一个7g的砝码,最少称几次可以将面粉分为70g与50g
答案:4次,第一次120g=111g+9g 第二次111g=93g+18g 第三次93g=57g+36g 第四次50g=57g-7g 70g=7g+36g+18g+9g
十五,扔鸡蛋不碎问题(腾讯校招面试题)?
答案:14次
十六,智力题:一千瓶中有一瓶毒药 十只小白鼠找出这瓶毒药
答案:2^10=1024,小白鼠编号1-10,瓶子编号1-1000,把瓶子的编号转变为二进制数,第几位1,就给第几个小白鼠喝
定义:字符型、宽字符型、整型、浮点型、双浮点型、布尔型等+自定义的数据类型
面向对象,高效,简洁,快速,可移植,区分大小写
注释:// ,/* */
换行:cout<<"aaa\n"<<" aa "<<endl; //两种都可
常量:#define PI 3.14 #const double PI=3.14
数组:int a[5][2]={{1},{2,3}} memset(a,0,sizeof(a)); 数组个数=sizeof(a)/sizeof(int); strlen(a);
指针:变量,值为另一个变量的地址 int *ptr,a[122]; ptr=&a;*p===a[0] 上连续内存空间
int *p=new int[12]; p[1]=1234; / int *ptr; ptr=(int *)1234; /delete ptr; /delete [ ]p;
函数:int/bool/void... fun(int a,int b){ return .... } //main()后定义main()前需声明
整除\:全整即整,有小即小
取余%:前后必须全为整,求后2位a%100
字节:int/short/long/long long/char/bool/ 4/2/4/8
字符串:以'\0'结尾,+拼接,char a[4]="djs" 字符数组储存 a.size()/length() //求字符串长
结构体:typedef struct ABC{string str; int chengji; char ch;}b,c[101]; ABC a={"dkfj",0.23,'a'};
三大特性:封装,继承,多态
固定窗口:cin.get( ); system("pause");
转义字符:\n换行 \a响铃 \t水平制表符 \b退格 \\反斜杠 \?问号 \' 单引号 \"双引号
万能头文件:#include<bits/stdc++.h> using namespce std;
强制类型转换:double b,c; a=(int)b+(int)c;
数组元素初始化0:memset(next, 0, sizeof(next)); 可以声明的同时定义
运算符优先级:算术运算符>关系运算符>&&>||>赋值运算符
“;”不是英文的
返回值,true,false首字母小写
注意细节:> 还是 >=
if(!a){ } //如果a不存在,则如何如何
类型:3.12334f 浮点型 8.34e/E-3(8.34*0.001,小数点左移3位)
大小:bool<char<signed char<unsigned char<short<unsigned short<int<unsigned int<long<unsigned long;
strcpy(s1, s2);复制字符串 s2 到字符串 s1
strcat(s1, s2);连接字符串 s2 到字符串 s1 的末尾
strlen(s1);返回字符串 s1 的长度
strcmp(s1, s2);如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0
strchr(s1, ch);返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
strstr(s1, s2);返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置
getline(a,b);//读取一行数据
getchar(s);//从标准输入读取一个字符(包括空格和换行"\n")
memcpy(b,a,sizeof(a))//数组a全部复制到数组b
memset( ticket, 0, sizeof(ticket) ); //对ticket数组清零,初始化赋值0
vector,deque,list,map,queue,stack:stack<T> t
定义:拥有Virtual 关键字的函数(类的成员函数前+virtual),作用-实现动态绑定
重载:在同一作用域,函数名相同参数不同;返回值可以不同。
重写(覆盖):
不同作用域(基类和派生类);函数名相同;参数列表相同;返回值相同(协变除外)。
基类中成员函数必须有virtual关键字;访问修饰符可以不同。
重定义(隐藏):不同作用域;函数名相同,在基类和父类中只要不构成重写就是重定义
多态:引用父类的对象,调用子类重写的函数
定义:实现多态所必须,父类类型的指针指向子类的实例,执行的时候会执行之类中定义的函数。
动态内存分配:程序执行的过程中动态地分配或者回收存储空间的分配内存的方法
浅拷贝:增加了一个指针,指向原来已经存在的内存(多个对象指向一个空间,释放后,导致其它所指空间被释放)
深拷贝:增加了一个指针,并新开辟了一块空间让指针指向这块新开辟的空间
C++:new申请 delete释放 面向对象 C中struct进行扩展,作用同class-private,默认访问修饰符public
C:malloc申请 free释放 面向过程 没有C++中的类 不支持函数重载 没有引用 默认内链接(上外)
指针可以有多级,但是引用只有一级
引用初始化以后不能被改变,指针可以改变所指的对象。
sizeof引用得到的是指向变量的大小,而指针得到的是本身的大小
如果返回动态分配的对象或内存,必须使用指针,否则可能引起内存泄漏
引用不可以为空必须被初始化,不存在指向空值的引用,指针可不初始化,可为空
static声明的静态变量,只初始化一次(程序开始时,默认初始化为0),调用过程中值不变
static声明的,作用域范围有限制,模块内声明则只能在模块内访问,函数内同
僵尸进程:一个子进程在其父进程没有调用wait()
或waitpid()
的情况下退出,这个子进程就是僵尸进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程
栈溢出:不断的调用方法压栈,最终超出了栈允许的栈深度,就会发生栈溢出,比如递归操作没有终止,死循环。
栈内存溢出:内存这个大箱子在也装不下栈这个小箱子了。
在类的构造函数和析构函数中没有调用匹配的delete和new,构造函数--类名同,不返回值 如fu(){}
没有将基类的析构函数定义为虚函数
缺少重载赋值运算符
缺少拷贝构造函数
没有正确地清除嵌套的对象指针
避免:string而不是char*,良好的编码习惯,避免使用原始指针,记得用delete释放内存
求最大公约数 虚函数和纯虚函数区别 new和malloc的区别 C++中的多态是怎么实现的 理解多态
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。