字节跳动实习_企业Python技术学习与收获

"在家办公,人生第一次,体验还不错唉"

Posted by neo on February 16, 2020

字节跳动实习_企业Python技术学习与收获

前言

最近工作中,总会因为一些接口的问题导致多个技术工程师之间的交流问题,所以把以前没有考虑过的概念进行再次学习。

0.规范化命名与代码注释

没有进入企业之前,其实对这些真的也有了解,也觉得很重要,但是纸上得来终觉浅,每次在写代码的时候,也没有特别注意,但是进入企业第一天编写的case脚本,就被leader说了,所以这些真的也是很基础判断你是否有经验的细节啊

下面这段代码看起来就很好看。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    @staticmethod
    @print_run_time
    def get_template_point(logging, template_list, pic_data):
        """
        获得对应图片与模板对比的结果
        @:param logging : 日志
        @:param template_path: 模板存储的根目录
        @:param pic_path: 需要对比的图片地址
        @:return
        """
        target_point = {}
        engine = ['Template']
        engine_name = engine[0] + 'Engine'
        flag = True
        dict_point, template_names = TemplateCompare.find_template_loc_multiprocessing(template_list, pic_data)
        for i in template_names:
            try:
                if dict_point[i][engine_name]['target_sim'] < 0.90:
                    logging.info('Template find error')
                    flag = False
                    break
                target_point[i] = dict_point[i][engine_name]['target_point']
            except ValueError:
                target_point[i] = [-1, -1]
                logging.info('Template find error')
                flag = False
        return flag, target_point
  • 函数使用小写_小写 def run_test(self):

  • 临时变量小写_小写 need_to_login

  • class类名单词大写驼峰 UserGoldStoreTestBase

  • 字符串之间空一格 CommonStep.login(self, app, device=device)

###1. 装饰器迭代器等高级编程

  1. 利用装饰器查询代码执行时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def print_run_time(func):
    def wrapper(*args, **kw):
        local_time = time.time()
        ret = func(*args, **kw)
        print('current Function [%s] run time is %.2f' % (func.__name__ , time.time() - local_time))
        return ret
    return wrapper

    @print_run_time
    @staticmethod
    def json_delete_from_name(json_dict, name):
        feature = json_dict['pic_feature']
        lists = feature[1:-1].split(',')
        new = list()
        for values in lists:
            d = eval(values)
            if BaseMethod.get_tos_id(d['feature_pic']) in name:
                new.append(d)
        json_dict['pic_feature'] = str(new)
        return json_dict
  1. 使用串行改并行的简单操作进行一些程序的优化

    https://blog.csdn.net/zhuzuwei/article/details/80907079

2. 规范化的log日志

这部分也是规范化开发的重要部分

https://www.geek-share.com/detail/2755784180.html

https://www.liaoxuefeng.com/wiki/1016959663602400/1017598873256736

3. Json 和 Dict

  • 两者还是有很大差别的

  • Python 的字典是一种数据结构,JSON 是一种数据格式。

    json 就是一个根据某种约定格式编写的纯字符串,不具备任何数据结构的特征。而 python 的字典的字符串表现形式的规则看上去和 json 类似,但是字典本身是一个完整的数据结构,实现了一切自身该有的算法。

  • 一个是用于内存,一个是用于传输,可以相互转化

    dict 存在于内存中,可以被序列化成 json 格式的数据(string),之后这些数据就可以传输或者存储了。JSON 是一种数据传输格式。

参考链接 :https://www.jianshu.com/p/87dbf4024cde

4. HTTP 和 RPC协议

  • RPC(即Remote Procedure Call,远程过程调用)

  • HTTP(HyperText Transfer Protocol,超文本传输协议

    他们最本质的区别,就是RPC主要工作在TCP协议之上,而HTTP服务主要是工作在HTTP协议之上,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹。

参考链接:https://blog.csdn.net/MOU_IT/article/details/79873612

5. 接口定义语言 IDL

  • 在使用bytedeuler的微服务框架时,开始需要定义接口Thrift,其实就是定义对应接口定义语言,方便跨语言进行开发

Thrift是Facebook的一个开源项目,主要是一个跨语言的服务开发框架。它有一个代码生成器来对它所定义的IDL定义文件自动生成服务代码框架。用户只要在其之前进行二次开发就行,对于底层的RPC通讯等都是透明的。不过这个对于用户来说的话需要学习特定领域语言这个特性,还是有一定成本的。

参考链接:https://blog.csdn.net/zhaoyang17/article/details/6359436

6. 函数变量传递

不要使用太多的参数,尽量打包好,而且要变量一致化。

写注释,写注释,写注释