Tencent

作者: 11爱生活 | 来源:发表于2020-09-26 15:49 被阅读0次

一、Python基本知识

    √ 数据类型:int\float\bool\list\tuple\dict\set
        list:[]表示,有序,元素可修改,索引访问,可切片
        tuple:()表示,有序,元素不可修改不可删除但可以被重写(但可通过切片和拼接形式完成修改和删除),索引访问,可切片
               list和tuple区别:
                    1.定义一个单元素列表a = [1],单元素元祖b = (1,)
                        而b = (1)中的括号会被认为是运算符,b则是int类型
                    2.tuple性能速度会更好,比方定义同样元素的list和tuple,tuple花的时间更少
                    3.tuple的使用场景:返回一个标准变量,比方(地球经度a,地球纬度b)虽然成员ab不能变,但是可以通过改变ab的值来改变元祖的数据

        dictionary:{}表示,无序,元素可修改可删除,key访问,不可切片
                删除元素 del dict['a']
                清空字典:dict.clear()
                删除字典:del dict(释放内存地址)
        set:{}表示,无序且去重
            初始化set:s = set(),或者s = {1,2}
            添加元素 s.add(a)/s.update(a)
            移除元素 s.remove(a)
            随机删除一个元素 s.pop()
            清空:s.clear()
    √ 迭代器
        1.str,list,tuple都可以使用迭代器
        2.iter()创建迭代对象和next()遍历迭代对象
        3.只能前进不能后退
        4.可以使用常规for循环操作迭代对象:
            for i in it:
                print(i)
        5.也可以使用next()来进行元素遍历:
            while True:
                try:
                    print(next(i))
                except stopIteration:
                    break
    √ 生成器:
    https://www.cnblogs.com/liangmingshen/p/9706181.html
    https://www.runoob.com/python3/python3-iterator-generator.html
        1.创建一个生成器:g = (x * x for x in range(10))
        2.如果一个函数中包含了yield关键字,那么这个函数就是一个generator
            下次迭代时,代码从yield的下一条语句开始执行

    √ 装饰器:
    https://www.runoob.com/w3cnote/python-func-decorators.html
        1.装饰器是一个函数
        2.在不影响其他函数的基础上,修改其他函数的功能
        3.业务场景:
            日志处理
            性能测试:记录方法的运行次数,运行时间
            权限校验
    √ __name__ == '__main__':
        1.https://www.runoob.com/note/39287
        2.https://www.runoob.com/note/39287
        3.一个文件可以独立运行也可以在其他文件里被当作模块调用,如果独立运行时,__name__ == '__main__',否则则为文件名

二、Redis,db

    √ Redis的三种异常及解决方案
        穿透:查询一个一定不会存在的数据,这个操作就会穿透缓存直达db,如果批量类似请求就会对数据库带来威胁
            🔺 解决方案:
                1.bloom filter:将所有查询条件生成一个bitmap,db查询前先经过这个bitmap过滤
                2.空值缓存:第一次查询到不存在的数据后,将key和空值一起放入缓存,设置一个较短的失效时间,减轻db压力

        雪崩:大量缓存信息同时失效,造成大量事务直接到db层
            🔺 解决方案:
                1.错开缓存失效时间
                2.缓存永不失效,但这样缓存数据会占用很大空间
                3.设置互斥锁重建缓存,但这样会降低系统的QPS(每秒查询率)
        击穿:高并发的缓存数据失效:例如热点话题
            🔺 解决方案:
                1.设置双缓存

三、HTTP

    √ http有哪些内容
        request:
            状态信息:请求方式/协议版本/路径
            请求头:
                Accept信息
                User-Agent
                Host
                Cache-Control
                Connection
                Date
                Cookie信息
            请求主体
                form-data:提交文件
                form-urlencoded
                raw
                binary
        response:
            状态信息:协议版本/状态码
            响应头:
                Content信息
                Allow支持的请求方式
                Cache-Control
                Connection
                Expires过期时间
                Date
                Location重定向访问地址
                Access-Control-Allow-等信息,跨域时添加头部允许
                Modify信息:协商缓存使用字段
            响应主体:
    ????? HTTP2优点:
        1.多路复用:HTTP1是半双工的,2是全双工的
        2.首部压缩:减少首部大小
        3.服务推送:服务器可以将请求方所需要的数据一次性发送,还能设置缓存
        4.二进制分帧:?????????????
    √ 深入了解强缓存和协商缓存:
        1.response中Cache-Control:no-cache
        2.使用Modify和Etag字段信息

四、Coding(LeetCode很重要)

  √ 1.(这个题目很重要)一个带有数字和字符的字符串,没碰到一个数字就将其前面的字符重复N次
      例如:a2b3 -> aabbb:2tencent_strToAlpha.py
  √ 2.判断一个字符串是IP地址(还需要手写一个ipv6):2tencent_isIp.py
  √ 3.实现1的阶乘到50阶乘之和:2tencent_kpSum.py
  √ 4.一个字符串中,统计出现次数最多的字母,若有两个则一起返回:maxCountAndWord.py
  √ 5.abcbcd字串中去掉bc(考虑abbcc,去掉bc后还有一个bc):rmSubStr.py
  √ 6.1-n中找素数(或者质数):prime.py

  7.查找QQ号,二分查找,哈希查找,二叉查找
  8.各种排序算法的原理,时间复杂度怎么来的(非递归算法)
  √ 9.python文件的处理,以及json的转换:postFromFile.py
  √ 10.request+json+os:postFromFile.py
  √ 字符串压缩/重复23次:2tencent_strToAlpha.py
  √ 用装饰器写一个日志功能:deco_logging.py

  12.LeetCode 简单-中等,注意贪心算法的题目
  13.动态规划,最大公共字串

五、Linux命令:

√ 文件操作:
    ls:查看当前目录中的文件
    pwd:查看绝对路径
    cd:切换文件
    rm:删除
    mk:新建:
    cp:复制
    mv:移动
??? 进程查看:
    ps:程序状态
        ps -ef | grep 进程名/进程号:查看这个进程的pid信息
        ps -l/ps -aux 都可以看到CPU占用情况
    top:动态查看进程变化
        -d n:每n秒更新一次进程信息
    netstat:
        netstat -a 列出所有端口号
        netstat -anp 8080   可以查看被哪个进程占用
        netstat -tlnp TCP网络数据,网络监听的服务,端口号,pid

    lsof:显示被进程打开的文件/列出打开此文件的进程
        lsof    不加参数表示,列出所有被打开的文件
        lsof  /filepath/file    查看使用这个文件的进程名
        lsof  |grep 进程名 列出进程所打开的文件
        lsof  -i:port 列出哪些文件在使用这个端口号
        lsof -p 123,456,789 列出进程号对应的文件信息
    echo:
        echo $path

六、逻辑智力题:

√ 1.一个国家有病马,每天一定要枪杀,第一天几声枪响,第二天几声枪响,问一共几匹马:3匹病马

七、其他:

√ 进程和线程,线程的状态切换:
    1.进程是资源分配的基本单位,线程是程序调度的基本单位,所以进程之间的切换开销比较大
    2.线程可以说是轻量级进程
    3.当一个进程中线程数量为1时,可以理解为这个进程是单线程的
    4.如果进程中线程数量>=2,那么这个进程的执行是由CPU在每个时间片调度不同的线程来完成的
???? cookie,session区别:
    cookie存放于客户端,session存放于服务器
    session的运行依赖session_id,而session_id是由服务器生成,但存放于cookie中的
    cookie有大小个数限制,session没有
    session相比于cookie更加安全
√ mysql和oracle区别
    一个免费,一个收费
    oracle更加安全,会校验更多用户信息
    语法也有不同
    数据类型不同,oracle支持更多数据类型
√ 页面出现网络繁忙的原因:
   抓包定位前后端问题
   查看后台日志,看是否收到前端请求
   是否关联的其他服务
   程序的负载
√ 深拷贝和浅拷贝是什么意思:
    https://www.cnblogs.com/xiaxiaoxu/p/9742452.html
    1.赋值(对象引用):两个对象,地址和数据会完全相互影响
    2.浅拷贝(拷贝父对象,不会拷贝对象的内部的子对象。):新对象重新开辟了空间,但是里面元素的地址和原对象相同
    3.深拷贝(完全拷贝了父对象及其子对象):新对象和原对象是完全不同的地址,元素地址也不一样,完全不会相互影响
    import copy
    a=[1,2,3,4,5,['a','b']]
    b = a # 赋值
    c = copy.copy(a)    # 浅拷贝
    d = copy.deepcopy(a)    # 深拷贝

    a.append(6)
    c[5].append('c')
    c.append(10)
    print(a, id(a), id(a[6]))
    print(b, id(b), id(b[6]))
    print(c, id(c), id(c[6]))
    print(d, id(d), id(d[0]))

??? python内存管理:
    https://www.cnblogs.com/sunBinary/p/10934140.html
    1.引用计数
    2.垃圾回收
    4.内存池机制(根据256KB分为大小内存进行不同处理)
??? python模块
    [sys,functools]:sys.getsizeof(object),sys.exit(),sys.getrefcount()
    [os]:文件处理
    [math,md5,re]:math.trunc(4.5)
    [json,requests]
    [unittest]
    [time,datetime,date]
    [random]:random.random(),random.randrange(m, n)
    [copy]
    [timeit]:测量代码段执行时间
√ 推导式和for循环区别:
    https://blog.csdn.net/weixin_44695969/article/details/96889580
    推导式性能更好,但是多个推导式嵌套可读性并不强
√ 基本的正则表达式:
    re模块
    compile():用于生成正则表达式方法,供search()和match()使用
    search():
    match():
√ 牛客-go,GO语言单元测试如何进行:
    1.测试函数的文件名:被测函数所在的文件名_test.go
    2.测试函数的命令:Test+被测函数名()
    3.测试函数必须接收一个testing.T的指针,且不能返回任何值
Nginx配置:
    1.查看nginx是否启动:ps -ef | grep nginx
    2.修改配置文件后,测试配置文件正确性:./nginx -t
    3.重启: ./nginx -s reload  或者 kill -HUP 进程号
    4.设置生效的配置文件:nginx -c 配置文件路径
    5.负载均衡配置:upstream

【 二面的一些问题:】
1.Q音搜索页面如何测试
2.数字专辑的支付H5页面如何测试
3.编程题:一个文件里面有 http:www.abc.com 200 234:getAvgTime.py
分别对应url,状态码,耗时(ms)信息,请读取文件并返回状态码为 200的平均耗时
4.两个盲人摸混在一起的8双袜子(4黑4白,每双袜子都是用标签绑在一起的),如何使每个盲人各4双袜子(2黑2白)
5.两个大小重量外观质感均相同的金球和铅球(空心球),如何区分
6.python做过哪些事情?说明一下appium框架的原理

相关文章

  • Tencent

    一、Python基本知识 二、Redis,db 三、HTTP 四、Coding(LeetCode很重要) 五、Li...

  • Docker最全教程之使用Tencent Hub来完成CI(九)

    使用Tencent Hub来完成CI 关于Tencent Hub Tencent Hub是腾讯出品的DevOps服...

  • Tencent at 20

    一、文章内容总结 本文主要介绍了中国互联网巨头之一腾讯公司在公司成立20周年之际面临的内忧外患。 外部压力来自政府...

  • Tencent Lubao

  • Tencent interview

    Tencent interview ① ---------那天下午莫名地接到了腾讯的面试邀请函,心里有点窃喜但是也...

  • Tencent CloudBase

    https://docs.cloudbase.nethttps://cloud.tencent.com/docum...

  • Tencent Shadow

    介绍 Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。 Shadow不仅开源分享了...

  • android分析工具

    Tencent / matrix[https://github.com/Tencent/matrix#matrix...

  • url scheme

    王者荣耀:tencent1104466820:// 刺激战场:tencent1106467070://

  • QQ Tecent 协议

    发起QQ会话: tencent://Message/?uin=QQ号 Sample:

网友评论

      本文标题:Tencent

      本文链接:https://www.haomeiwen.com/subject/osgcuktx.html