软件开发常见面试题
软件开发常见面试题一、通俗讲解一下IP地址和DNS二、现在很流行的JWT到底是什么?三、记住七个字搞定索引失效问题四、关于数据库优化的慢查询日志五、三次握手是怎样交互的?六、TCP和UDP的区别?七、跨域问题是怎样产生的?八、session到底是啥?九、http与https?十、get和post的区别?十一、IP地址是什么?十二、什么是VPN?十三、类和对象之间的关系?十四、DNS是什么?十五、c
软件开发常见面试题
一、通俗讲解一下IP地址和DNS
互联网上的设备,都有一个唯一的地址,因为是唯一的,所以在互联网上进行通信的时候,才可以保证信息不会送错地方,这个地址就是IP地址,所谓的IP地址就像是我们家的家庭住址一样,每家的地址都是唯一的,不能相同,如果相同了,快递员在送快递的时候,就不知道该送到哪里去了,有一种比较特殊的IP地址是内网IP地址,因为互联网上的设备越来越多,IP地址不够用,于是每个局域网就共用一个对外的IP地址,内部的设备就用内网的IP地址,内网和外网之间采用路由器进行连接和转发信息,内网地址就好像是你们公司里的工位,每一个员工有一个工位号码,你们公司对外就只有一个门牌号,快递员送件的时候,要先送到公司的前台,前台再把快递送到每个人的工位上,这个时候前台就相当于是路由器,内网IP有三个保留的IP地址段,分别是10,192,172开头的,这三个要记住。
最后讲一下DNS,由于IP地址是一串数字,不容易记住,所以就弄一个容易记忆的名字来代替,这个名字就叫做域名,DNS就是把域名转换成IP地址的这样一个系统,域名就像是你家的门牌号的别名,门牌号不容易记忆,所以大家平时就用别名。比如说你家在中山路9527号,但是对外说地址的时候,你可能就会说,我家在解放大厦,在这里解放大厦就相当于域名,中山路9527号,就相当于是IP地址。
二、现在很流行的JWT到底是什么?
JWT全称是json web token,主要是在网络应用中,传递一些小批量的安全数据时使用,这个token的特点就是紧凑并且安全,JWT的结构主要是分为三个部分,第一部分就是header头部,第二部分就是payload负载,第三部分就是signature签名,其结构看起来是这样的:x.y.z这种结构。主要应用场景有两个,第一个就是身份认证,在身份认证的功能实现上,传统的方法是在服务器端存储一个session,给客户端返回一个cookie,把sessionID存储在coookie里,使用JWT就是当用户登录系统之后,后台会返回一个JWT给到用户浏览器端,用户只需要本地保存这个token即可。如果是web应用,通常使用cookie或者是local storage来存储。如果是app,就使用app自己的存储机制来存储,用户请求后台资源的时候,每次都要带上这个token,后台会对这个token进行验证。
第二个应用场景就是信息交换,由于它的信息是经过签名的,可以确保发送的信息是真实的,所以用这种方法来进行小批量数据的交换,但是这种应用场景比较少。
三、记住七个字搞定索引失效问题
七字口诀:模型数空运最快
解释:运送一个模型要用空运,不用陆运和海运,数空运最快。
模:代表模糊查询的意思,我们在使用like关键字的时候,如果是%开头,那么索引就会失效。
型:代表数据类型,如果数据类型错误了,索引也会失效。
数:代表函数的意思,对索引的字段使用内部函数,索引也会失效,这种情况应该建立基于函数的索引。
空:代表英文的 null 的意思,索引不存储空值,如果不限制索引列是 Not Null,数据库会认为索引列有可能存在空值,所以也不会按照索引进行计算。(新版本的MySQL可以允许null)
运:代表运算的意思,对索引列进行加、减、乘、除等运算,会导致索引失效。
最:代表最左原则的意思,在复合索引中,索引列的顺序非常重要,如果不是按照索引列最左列开始进行查找,则无法使用索引。
快:代表全表扫描更快的意思,如果数据库预计使用全表扫描比使用索引更快的话,就不会使用索引。
四、关于数据库优化的慢查询日志
慢查询日志:顾名思义就是速度慢的,那些查询的SQL语句,可以记录到一个日志文件里,至于有多慢的语句才会被记录,可以通过系统配置来进行规定,默认是超过10秒的才会记录,你也可以自己修改。
五、三次握手是怎样交互的?
第一次握手就是建立连接的时候,客户端会发送一个syn包到服务器,并进入到syn send状态,等待服务器的确认。
第二次握手就是服务器收到了这个syn包之后,必须确认客户端的syn这个序号,同时自己也会发送一个syn包,叫syn+ack包,此时,服务器就进入到了syn recv的状态。
第三次握手就是客户端收到了服务器的syn+ack包之后,向服务器发送一个确认包,此包发送完毕之后,客户端和服务器就进入一个连接成功的状态。此时就完成了三次握手。客户端与服务器就可以传输数据了。
六、TCP和UDP的区别?
UDP是用户数据报协议,是一种无连接的传输层协议,提供面向事物的简单、不可靠信息传送服务。
TCP中文名叫传输控制协议,是在不可靠的互联网上提供可靠的端对端字节流这样一个传输协议。
UDP与TCP协议的区别:第一个区别就是信息传送的可靠性方面不同,TCP协议包含了专门的传输保证机制,数据传输更加可靠。UDP协议不提供数据传送的保证机制,因此通常人们也把UDP协议称为不可靠传输协议。第二个区别就是传输的速度不同,TCP协议的速度比较慢,UDP协议的速度比较快。
七、跨域问题是怎样产生的?
到底什么是跨域请求?
跨域请求就是当前发起请求的域与该请求指向的资源所在的域不一样就是跨域请求。
跨域就包括协议、域名、端口,只要有一项不同就是跨域。简单来说就是浏览器的地址栏里面的协议、域名、端口和你网页中的js请求的接口的协议、域名、端口任意一项不同就是跨域。当然如果页面使用了iframe,这个判断方法就不适用。
八、session到底是啥?
session在网络应用中被称为会话控制,session对象是存储在服务器端的,主要用来存储用户会话所需的属性数据和配置数据,sessionID需要存储在浏览器端(客户端)(通常存储在cookie里),浏览器发送接口请求的时候,需要带着这个sessionID,这样服务器端就可以根据这个sessionID找出当前请求的用户是谁了。session一般都会配置一个过期时间,默认是30分钟,session过期之后,用户就需要重新登录了。
九、http与https?
http是应用最广泛的一种网络协议,也叫超文本传输协议。https简单来说就是http的安全版,在http下加入了ssl层,https协议主要是用来确认网站的真实性和保证数据传输的安全。
它们之间的区别主要是:①https协议需要用到CA证书。②http的信息是明文传输的,https是加密传输的。③它们使用的端口号不一样:http是80端口,https是443端口。④http是速度比https的速度要快。
https是怎样加密的?
默认端口号分别是?
十、get和post的区别?
get请求和post请求的区别?
get请求主要用于从服务器端获取数据,post请求主要是将数据发送到服务器端。
主要区别:①get请求可以刷新,刷新也没有关系,post请求如果刷新的话就会重新提交。②get请求可以在书签里去收藏,post请求不能收藏。③get请求可以被缓存,post不能。④get请求的数据是有长度限制的,因为它是放在url里面的,URL通常限制在2048个字符。post请求就没有长度限制。⑤与post相比,get的安全性比较差,因为它在URL里面能看到。
常见错误:
①认为post请求数据是加密的,这是错误的
②认为urlencode是对数据进行加密的,这个其实只是进行了编码,并没有加密。
③认为post请求的数据是在header里面,其实不是在header里面,在body里面。
④认为get请求只能够获取数据,不能提交数据,其实它通常用来获取数据,但是也可以提交数据。
十一、IP地址是什么?
在互联网上的计算机和其他网络设备,都会分配一个唯一的地址,这个地址就叫做IP地址。IP地址就像是我们家的家庭住址一样,如果你要写信给一个人,你就要知道它的收信地址,这样邮递员才能把信送达。计算机之间相互通信的话也是一样的道理,它必须知道唯一的地址,才能把信息准确的送达。
IPV4地址是有一个32位的二进制数构成。通常被分割成4个8位的二进制数,也就是4个字节,每个字节都是0到255之间的整数。
常见问题:
①不知道外网和内网与IP地址的区别?
②不知道IPv4和IPv6的区别?
十二、什么是VPN?
VPN中文名字叫虚拟专用网络,它是在公用的网络上建立的一种虚拟的专用网络,能够进行加密通讯,在企业中应用非常广泛。
vpn网关是通过对数据包的加密和目标地址转换,实现远程访问。vpn可以通过服务器、硬件、软件等多种方式实现。
常见错误:
①认为vpn就是代理服务器,这个是错误的
②不理解连接了vpn之后,可以把自己看作是对方局域网的一个设备。
十三、类和对象之间的关系?
类是对象的模板,对象是类的具体实例。
类是抽象的,对象是具体的。
类里面包含属性和方法,比如汽车是一个类,你开的那一辆车就是一个对象。如果猫是一个类,你养的那只猫就是一个对象。
常见错误:
①类包含对象,比如宝马汽车是一个类,车轮、方向盘是对象。这是错误的
②类和对象是相同的,东西是相等的。这是错误的
③把子类和对象的概念混淆。比如说汽车是一个类,宝马汽车是一个对象。这是错误的。
④对象包含类,这是错误的。
⑤把现实世界和代码世界的模板混淆了,比如说飞机图纸是个类,飞机是对象。做月饼的模具是类,月饼是对象。这都是错误的。
十四、DNS是什么?
DNS是域名系统,是互联网上为了解决网上机器命名的一种系统,大家都知道,互联网上的机器都是有IP地址的,我们要访问哪一台机器,其实都是通过IP地址进行访问的,但是IP地址特别难记忆,所以就发明了域名。那域名和IP地址之间的对应关系就是由DNS服务器进行管理的。我们访问一个域名的时候,DNS服务器就会把这个域名转换成对应的IP地址,这样我们就能便捷地去访问了。
常见错误:
①觉得DNS就是域名
②觉得DNS就是电脑里的一个配置
③不理解域名和IP地址之间的关系
十五、cookie能当缓存使用吗?
cookie其实也叫http cookie,它是客户端用来存储会话ID,也叫sessionID的一种机制。比如我们打开一个网页的时候,浏览器和服务器就建立了一次会话,不管用户有没有登录,都是有建立会话的,在这次会话当中,浏览器向服务器请求数据都会在请求头里。自动带上这个会话ID,也就是这个sessionID,浏览器关闭之后,这个cookie还存在硬盘上,下次打开的时候还可以继续使用。cookie主要用来解决无状态这个问题的,而且cookie里面的内容会随着http请求的请求头自动发送到服务器上。
那什么情况下才需要把数据存到cookie里面呢,什么情况下不应该存到cookie里。使用cookie有哪些注意事项呢?
①需要在http请求头里自动发送给服务器的数据,可以放到cookie里。
②不需要发送给服务器的数据不应该放到cookie里。
③cookie存储在用户的硬盘上,没有那么安全,所以需要保密的数据,不应该放到cookie里。把用户名和密码存到cookie里这是不对的。
④cookie有容量限制,要注意不能放太多东西。
⑤尽量不要让前端JavaScript去写cookie,尽量在后端写。
十六、通俗讲解一下什么是DNS?
DNS全称是domain name system,中文名叫域名系统。因为IP地址是一串难以记忆的数字,所以就发明了域名,方便大家上网使用,比如你要访问百度网站,不需要输入百度服务器的IP地址,只需要输入它的域名即可。简单来说,DNS就是用来把域名转换成IP地址的这样一个系统。
十七、通俗讲解一下IP地址和Mac地址的概念
Mac地址也叫物理地址,也叫硬件地址。理论上Mac地址是唯一的,但是因为Mac地址可以通过程序修改,所以也有可能会重复。IP地址是互联网上的设备都规定了一个唯一的地址,这个地址叫IP地址,由于有了这个唯一的地址,才能保证用户高效地找到自己想要进行通信的那台设备。
IP地址和Mac地址在计算机里都以二进制的方式表示的,IP地址是32位的。那Mac地址是48位的,举例来说,Mac地址就像身份证号一样,具有唯一性,IP地址就像是你的电话号码一样,可以有多个,在不同场景用不同的电话号码。比如你工作的时候有一个工作号码,工作之外呢也有一个私人的号码,是用于亲戚朋友联系使用的。由于IP地址是有限的,所以内网,局域网通常都会共用一个对外的IP地址。
举例:你办公桌上有一个内线电话分机,外面打电话的时候,先要拨通你的总机再转给你。你用分机打外面的号码,也是先要通过总机进行中转,你们公司那个总机就相当于是外网IP,你的分机就相当于内网IP地址,内网IP有三个保留的IP地址段,分别是10、172、192开头的,这三个数要记住。
十八、通俗讲解一下cookie和session机制
cookie是一小段存储在浏览器端的文本数据大小不超过4kb,发送网络请求的时候,cookie会在请求头里,一起发送给服务器端。
session对象是存储在服务器端的,主要是用来存储用户会话的数据。sessionID需要存储在浏览器端,通常存储在cookie里,浏览器发送接口请求的时候需要带着这个sessionID,这样的话,服务器端就可以根据这个sessionID找出当前请求的用户是谁了。
session一般都会配置一个过期时间,默认30分钟,session过期之后,用户就需要进行重新登录了。
举例:我们每个人都有一个身份证,去政府部门办事的时候,都需要出示身份证,工作人员会对你的身份证进行核验,确认真伪之后,才会给你办理具体的业务,这个过程和session验证身份的机制很像,你就相当于是浏览器的cookie,身份证就像是sessionID,你要去办事的那个部门就相当于后台接口,它们对你的身份证进行核验,就相当于是在比对你的sessionID,那么用户没有登录的时候,有没有sessionID呢,也是有的,就相当于你出生的时候还没有办理身份证,医院会给你开一个出生证明,这个出生证明也相当于sessionID,去部门办事的时候也要带着这个出生证明,身份证是有有效期的,过期之前必须要进行更换,同理cookie和session也是有有效期的,当然,这个有效期是根据我们的业务需求来规定的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)