网易游戏的面试题与参考答案记录

  发布时间:2019-09-23 14:21:13   作者:JLL95   我要评论
这篇文章主要介绍了网易游戏的面试题与参考答案,总结了网易游戏入职面试中的常见问题及对应参考答案,涉及线程、数据库、爬虫、以及各种算法的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<end):
        add = array[start]+array[end]
        if add>sum:
            end -=1
        elif add<sum:
            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

相关文章

最新评论