网易python面试经验_网易游戏的面试题与参考答案记录

1 介绍课题

2 介绍进程跟线程,进程之间的通信

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。

1)进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;

2)而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉

3)多进程的程序要比多线程的程序健壮;

4)但在进程切换时,耗费资源较大,效率要差一些。

5)对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

进程之间的通信方式:

1)管道:进程与具有相同祖先进程的两个进程之间通信

2)命名管道:任意两个进程之间的通信,

3)消息队列:

4)内存映射:

5)套接字:

6)

3 http (get head post)udp tcp

4 数据库的连接方式,分别是怎么连接的?

5 课题遇到的问题,怎么解决的?

6 常用的python包有哪些?

1)GUI 图形界面: Tkinter,turtle

2)科学计算 :numpy;SciPy;pandas;randmon;sklearn

3)爬虫相关:scrapy;pyspider;selenium;requests;pysql

4)图像处理:pillow;matplotlib;skimage;CV2

5)其他:os模块就是对操作系统进行操作;time;加密hashlib;logging模块控制台输出日志;

6)接口测试相关:sys,urllib,json,base64,

7)字典:collections,operator

7 给定一串数组,判断数组中是否存在两个数之和等于给定的数

这个题其实很简单,面试的时候脑子里就想着,应该有什么比较好的方法,就把最基础的思路都没有说出来,唉傻到爆炸

思路:

遍历每两个数字,检查之和是否等于给定的Key,如果相等的话,返回True;否则返回False

注意:

不能写成

def issumin(array,key):

for i in range(len(array)-1):

for j in range(i+1,len(array)):

if array[i]+array[j] == key:

return True

else:

return False

因为这样的话,程序只会把第一个值和第二值相加,判断相等就True,不相等就False;不进行后面的判断

所以我们应该改成:当它两不相等的时候,退出当前循环,进入下一轮循环,当循环结束还有没相等,我们就在循环结束之后加一个return False;如果相等,直接返回True

def issumin(array,key):

for i in range(len(array)-1):

for j in range(i+1,len(array)):

if array[i]+array[j] != key:

continue

else:

return True

return False

array = [-1,3,2,7,0,-4,6]

key = 8

print(issumin(array,key))

改进版

def find_numbers_with_sum(array,sum):

array.sort()

#res =[]

add = 0

start = 0

end = len(array)-1

while(start

add = array[start]+array[end]

if add>sum:

end -=1

elif add

start +=1

else:

#res.extend([array[start],array[end]])

#return res

return array[start],array[end]

return []

print(find_numbers_with_sum([-1,3,2,7,0,-4,6],8))

算法复杂度是:O(n)

class Solution(object):

def twoSum(self, nums, target):

dic = {}

for i, n in enumerate(nums):

if n in dic:

return [dic[n], i]

dic[target-n] = i

8 输入一个整数列表,将连续的整数作为一组,只记录首尾,如[1,2,3,4,5,6]是一组,记录其首尾为[1,6],返回所有首尾的列表,没有返回空列表

思路:

首先进行排序,然后判断后一个减前一个等于1 ,继续往后走;否则,说明,连续的序列已经结束,将当前元素添加到列表中

这样的话,需要对最后一个进行特判,如果最后一个不连续,我们将它直接加到res中;如果连续先加到s中,再将s加到res中

注意:

1)这里需要设置一个start的flag,如果连续的子序列开始,需要将start置为非空;如果连续的子序列结束,需要将start置为空

2)只有子序列开始,和子序列结束时,才append;连续的中间元素没有必要append

def subset(array):

res = []

start = None

array.sort()

for i in range(len(array)-1):

if start == None:

s = []

s.append(array[i])

start = 1

elif array[i]-array[i+1] != -1:

s.append(array[i])

start = None

res.append(s)

if start == None:

res.append(array[len(array)-1])

else:

s.append(array[len(array)-1])

res.append(s)

return res

if __name__ == '__main__':

a = [3,2,7,8,1,4,10,11,12,15]

print(subset(a))

运行结果:

runfile('C:/Users/Desktop/python/constant.py', wdir='C:/Users/Desktop/python')

[[1, 4], [7, 8], [10, 12], 15]

9 逻辑题:在公路上观察一小时,有车经过的概率为96%,观察半小时,有车经过的概率为多少

10 给你一只铅笔,尽可能多的想出跟它相关的东西

11 平常玩什么游戏?

12 字符串转化成整数?

题目面试的时候都没怎么明白,只能说还需要成长

思路:

1)先判断字符串是不是以正负号打头的,如果是的话,分情况讨论;先获取字符串的符号,计算完成之后,按照正负号直接乘上去就行

2)如果字符串不是以正负号打头的,按每一位进行判断就是

注意:

1) 这里的ord('0')一定是要加引号的,而不是ord(0)

2) 需要将字符串进行反转,从最小的位置开始,每一位乘10,然后相加

def str2int(string):

if string[0] == '+' or string[0] =='-':

string1 = string[1:]

res = 0

mul = 1

for i in reversed(string1):

if ord('9') >= ord(i) >= ord('0'):

res = res + mul*(ord(i)-ord('0'))

mul *= 10

else:

return False

if string[0] == '+':

return res

else:

return -1*res

else:

res = 0

mul = 1

for i in reversed(string):

if ord('9') >= ord(i) >= ord('0'):

res = res + mul*(ord(i)-ord('0'))

mul *= 10

else:

return False

return res

print(str2int('-12309'))

运行结果:

runfile('C:/Users/Desktop/python/str2int.py', wdir='C:/Users/Desktop/python')

-12309

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值