• 小知识汇总8.24-8.26


    目录

    1.ascii,unicode,utf-8,gbk的区别

    2.请用至少两种方式实现m与n值交换m=10,n=5

    3.什么是深浅拷贝

    4.什么是HTTP协议

    5.form表单中都有哪些标签及作用

    目录2 

    1. 简述解释性语言和编译性的区别

    2.列举你所知道的python2与python3之间的区别

    3. 什么是匿名函数。匿名函数一般结合什么一起使用,请列举几个常用的

    lambda 常见用法

    4. 什么是TCP三次握手四次挥手

    ​编辑

    5. 列举你所知道的css选择器

    1.列举字符串,列表,元组,字典每个常用的五个方法

    2.描述下列常见内置函数的作用可用代码说明map,zip,filter,sorted,reduce

    3.列举你所知道的面相对象中的__开头__结尾的方法及作用,越多越好

    5.JS有哪些数据类型


    1.ascii,unicode,utf-8,gbk的区别

    ascii码: 记录的是英文字符与数字的对应关系[a-z 97-122/A-Z 65-90] 一个字节1byte = 8bits
    GBK: 国标, 记录了英文,中文与数字的对应关系
    unicode: 万国码, 所有的字符都是2bytes起步存储的, 会浪费空间和io时间.
    utf8: 是万国码的转换版本, 其内存使用的是unicode, 硬盘使用的是utf8    

    2.请用至少两种方式实现m与n值交换m=10,n=5

    方式一: m,n = n,m  交叉赋值
    方式二: a=m, m=n, n=a  引入第三个变量        

    3.什么是深浅拷贝

    浅拷贝:拷贝的程度浅, 只拷贝元数据的首地址,然后通过元数据的首地址去获取内容. 
       浅拷贝耗时短,占用空间少, 但是拷贝程度低, 但是只是复制了原数据的地址, 所以副本的地址指向的其实还是原来数据的地址, 修改副本内容并不会影响到原来的数据.
        
    深拷贝:拷贝程度深,指的是重新分配一块内存, 将被拷贝的对象全部拷贝过来, 并且将原对象中的元素以递归的方式, 通过创建的子对象拷贝到新对象中, 因此新对象和原对象没有任何关联.  但是耗时长, 占用内存空间.

    4.什么是HTTP协议

    HTTP协议是超文本传输协议, 作用于应用层上的协议,其特点是灵活(客户端可发送任意类型数据),简单快速(只需要填写简单的请求路径和方法就可以通过浏览器发送请求).
    他有四大特性: 
        1. 基于请求响应
        2. 基于TCP/UTP协议之上
        3.无状态   >> 不保存用户信息
        4.无/短链接 >> 请求回应一次就断开.
    请求格式:
        1.请求首行(协议名及版本)
        2.请求头(K:V键值对)
        3.换行
        4.请求体(两种)
        get请求超服务器索要数据,(可以携带2k的敏感数据,但最好不要)
        post向服务器提交数据.
        
    响应格式:
        1.响应首行(HTTP协议版本, 响应状态码)
        2.响应头(K:V键值对)
        3.换行
        4.响应体(浏览器展示给用户看的数据)


    响应状态码:
        1xx:服务器已经接收到了你的数据信息,可以继续提交
        2xx: 服务器成功响应
        3xx: 重定向到另一个页面
                   301 永久重定向
                   302 临时重定向
        4xx: 找不到所需的数据(404)或不符合获得数据的条件(403)
        5xx: 服务器故障
                    502 网关错误
                    503 服务器不可用
            
        
        

    5.form表单中都有哪些标签及作用

    form表单用于向服务器传输数据从而实现用户与web服务器交互,它包含input 系列标签,也包含textarea, select, label等


    action属性用于控制数据的提交地址, 不写的话就是向当前页面所在的地址提交
    method属性 用于控制请求的方式.

    input系列: 
        text                      输入单行文本
        password            输入密码, name=password可以隐藏密码
        date                    日历
        email                   邮箱
        radio                   单选框 >> 多选一要写多次选项
        checkbox           多选一
        file                     单个文件
        multiple files      多个文件
        button                普通按钮
        submit               提交按钮
        reset                  重置

    目录2 

    1. 简述解释性语言和编译性的区别

    编译性语言不如解释性语言跨平台性好,也就是说不同平台的兼容性有区别,所以才有了两种语言.


    解释型语言: 如python. 每次逐行翻译,可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序. 当遇到bug时, 可相对快速的找到,且因为不需要整体翻译, 相对浪费io/cpu工作时间多, 相比于编译型语言,解释型语言几乎都能跨平台,“一次编写,到处运行”是真实存在的, 解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距


    编译型语言: 如java, c++等, 每次都是整体翻译,必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序.  当遇到bug时相对不太好找,且因为每次都需要整体翻译, 相对浪费io/cpu工作时间少.  编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。

    类型

    原理优点缺点
    编译型通过专门的编译器,将所有源代码一次性转换成特定平台执行的机器码编译一次后,脱离了编译器也可以运行,并且运行效率高。可移植性差,不够灵活。
    解释型由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。一边执行一边转换,效率很低


     

    2.列举你所知道的python2与python3之间的区别

    方法pyhon2python3
    range结果直接展示在屏幕上, 当数据量过大时,就很浪费屏幕空间,和内存空间. 结果为一个迭代器, 节省空间, 需要用什么再去取.
    xrange有, 结果时一个可迭代对象[类似于python3的range方法
    字符编码默认字符编码是ascii码, 需在开头指定字符编码为utf8, 写编码时开头要写u,来达到使用utf8的目的.  默认使用utf8编码
    输入input默认是整型, str要用引号包裹, raw-input得到的都是str.input得到的数据都是str类型
    输出 print不一定要求函数形式使用, 可以使用print 'hello'的方式输入(print 'hello')print是强制函数 (print('hello world'))
    整型区分int 和long [长整型]不区分[没有long]
    格式化没有f标志位有f格式化, f'my name is {name}'
    异常捕获except execption, e:except exception as e:
    新式类与经典类只有继承了object的类才是新式类, 其他的是经典类默认所有类都是继承的object,所以p3都是新式类.
     


    3. 什么是匿名函数。匿名函数一般结合什么一起使用,请列举几个常用的

    匿名函数可以在程序中任何需要的地方使用,但是这个函数只能使用一次,即一次性的。

    lambda x:x+1 
    lambda 是定义函数关键字, x是形参,  x+1是返回值

    lambda 函数拥有自己的命名空间
    不能访问自己参数列表之外或全局命名空间里的参数,只能完成非常简单的功能。

    lambda函数可以结合内置函数使用, 如map, sorted, filter,reduce,max等.减少代码.

    常见的lambda函数示例:

    1. lambda x, y: x+y # 函数输入是x和y,输出是它们的和x+y
    2. lambda:None # 函数没有输入参数,输出是None
    3. lambda *args: sum(args) # 输入是任意个数参数,输出是它们的和(隐性要求输入参数必须能进行算术运算)
    4. lambda **kwargs: 6 # 输入是任意键值对参数,输出是6

    lambda 常见用法

    (1)直接赋给一个变量,然后再调用

    1. c = lambda x,y,z:x*y*z
    2. print(c(1,2,3))
    3. #输出结果为6

    (2)在函数后面直接传递实参

    1. a = (lambda x :x**2)(7)
    2. print(a)
    3. #输出结果为49

    (3)将lambda函数作为参数传递给其他函数比如说结合map、filter、sorted、reduce等一些Python内置函数使用

    max()函数

    max() 方法返回给定参数的最大值,参数可以为序列。

    1. num = [(1, 2.9), (1.5, 3.2), (1.3, 4.0), (2.2, 2.8)]
    2. y = max(num, key=lambda x: x[0])
    3. print(y)
    4. #结果 (2.2, 2.8)
    5. num = [(1, 2.9), (1.5, 3.2), (1.3, 4.0), (2.2, 2.8)]
    6. y = max(num, key=lambda x: x[1])
    7. print(y)
    8. #结果 (1.3, 4.0)

    Lambda函数 + map函数

    map() 会根据提供的函数对指定序列做映射

    1. #提供了两个列表,对相同位置的列表数据进行相加
    2. a = map(lambda x,y:x+y,[1,2,3],[4,5,6])
    3. print(list(a))
    1. #计算列表中各元素的平方和
    2. pingfang = map(lambda x:x**2,range(5))
    3. print(list(pingfang))

    Lambda函数 + filter函数

    filter()用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
     

    1. #语法如下
    2. filter(function,iterable)
    3. #function--判断函数
    4. #iterable--可迭代对象
    1. a = filter(lambda x: x % 2 == 0,range(10))
    2. print(list(a))
    3. #采用lambda函数筛选出0-10之间的偶数,将它以列表的形式输出。
    1. #采用定义函数的方法,筛选出0-10之间的偶数
    2. def oushu(x):
    3. if x % 2 == 0:
    4. return x
    5. a = filter(oushu,range(10))
    6. print(list(a))

    Lambda函数 + sorted函数

    sorted() 函数对所有可迭代的对象进行排序操作。

    sort 与 sorted 区别:
    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
    list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
     

    1. #语法
    2. sorted(iterable,key = None,reverse = False)
    3. """
    4. 参数说明:
    5. iterable--可迭代对象
    6. cmp--比较的函数
    7. key--主要用来进行比较的元素,只有一个参数
    8. reverse--排序规则,reverse = True降序,reverse = False升序(默认)
    9. """
    1. #对列表进行排序,保留原列表
    2. a = [1,2,6,5,3,8,4]
    3. b = sorted(a)
    4. print(b)
    5. -----------------------------------------
    6. a = [1,7,8,3,4,1,2]
    7. b = sorted(a) # 使用sorted,保留原列表,不改变列表a的值
    8. print(a)
    9. #结果 [1, 7, 8, 3, 4, 1, 2]
    10. print(b)
    11. #结果[1, 1, 2, 3, 4, 7, 8]
    1. #利用key
    2. L = [('b',2),('a',1),('c',3),('d',4)]
    3. new_L = sorted(L,key = lambda x : x[1])
    4. print(new_L)
    5. -------------------------------------
    6. students = [('j', 'A', 15), ('j1', 'B', 12), ('j2', 'B', 10)]
    7. print(sorted(students, key=lambda s: s[2])) #按第三维s[2]进行排序
    8. #结果 [('j2', 'B', 10), ('j1', 'B', 12), ('j', 'A', 15)]
    1. L = [11, 5, 0, 6, 1, 2, 7, 3, 4, -3]
    2. L.sort()
    3. print(L)
    4. #结果 [-3, 0, 1, 2, 3, 4, 5, 6, 7, 11]
    5. a = 4
    6. print(sorted(L, key=lambda x: abs(x - a))) #按L列表所有元素对a作差的绝对值大小进行对L列表排序,默认升序
    7. #结果 [4, 3, 5, 2, 6, 1, 7, 0, -3, 11]
    8. print(sorted(L, key = lambda x: abs(x - a), reverse=True)) #此为降序
    9. #结果[-3, 11, 0, 1, 7, 2, 6, 3, 5, 4]

    Lambda函数 + reduce函数

    reduce函数会对参数列表中的元素进行累积

    1. from functools import *
    2. sum = 0
    3. for i in range(1,21):
    4. a = reduce(lambda x,y: x*y,range(1,i+1))
    5. sum = a +sum
    6. print(sum)
    7. from functools import reduce
    8. def add(x, y): # 两数相加
    9. return x + y
    10. a = reduce(add, [1, 2, 3, 4, 5]) # 计算列表和:1+2+3+4+5
    11. print(a)
    12. #结果 15
    13. b = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
    14. print(b)
    15. #结果 15

    4. 什么是TCP三次握手四次挥手


    三次握手建立双向通道: 
    1.客户端向服务端发送建立链接的请求
    2.客户端回复请求,同意建立连接,同时向客户端发送简历链接的请求
    3.客户端收到服务端的请求之后,同意建立, 则双方连接成功

    四次挥手;
    断开双向通道
    1.客户端向服务端发送断开连接的请求
    2.服务端回复请求,同意断开链接
    3.等待服务端给客户端传递的数据全部传送结束,并且同时向客户端发送断开链接
    4.客户端收到服务端请求之后同意断开,则双方断开连接

    5. 列举你所知道的css选择器


    1.基本选择器: 
      

     1.标签选择器, 直接编写标签名来查找标签                    div
        2.元素选择器,                                                                p
        3.id选择器, 通过编写id的值来精准查找标签                  #d1
        4.类选择器. 通过编写class的值来查找标签                   .c1
        5.通用选择器, *  查找所有标签                                          *

    2. 组合选择器


        后代选择器 >>> 两个选择器之间空格隔开, 前面的选择器渠道的标签内吧所有符合空格后面的选择器要求的标签  >>>div span
        儿子选择器>>> 两个选择器之间用>隔开, 前面的选择器获取到的标签内部第一层符合>后边的选择器要求的标签  >>> div > p
        毗邻选择器>>> 两个选择器之间用+隔开, 前面选择器获取的标签下面紧挨着的+后的标签.    >>>> div + p
        弟弟选择器>>> 查找前面标签同级别下的符合后面的所有标签  >>> #il ~p

    3.属性选择器


        默认属性 id, class
        自定义属性: x, y 
        1.属性名含有name的标签 >>> [name]
        2.属性名含有name并且值为username的标签>>> [name='username']
        3.查找input 标签并且属性含有name值为username的标签>> input[name='username']

    4.伪类选择器
      

     hover 鼠标悬浮时的样式

    5.伪元素选择器
      

     first-litter  首字母设置样式
        before >> p元素之前插入内容
        after >> p元素之后插入内容   其中befor /after 多用于清除浮动

    1.列举字符串,列表,元组,字典每个常用的五个方法

    字符串:

    索引取值 >>> [0]
        切片操作 >>>> [2:4]
        统计字符串个数>>>.len()
        移除字符串首尾指定字符>>> .strip()
        按照指定字符切割字符串>>>.split()
        格式化输出: .format方法>{}类似于占位符>>{变量名}>>>{0}{1}索引>>>>f'{变量名}'
        大小写转换: lower()/upper()/islower()/isupper()
        拼接字符串>>>+/join

    列表:

    索引取值 >>>[0]
        切片操作>>>[2:4]
        统计元素个数>>> .len()
        成员运算>>> xx in xx
        添加元素>>> .append()/insert()/extend()
        删除元素>>> del()/remove()/pop()
        统计元素出现次数>>> count()
        清空列表>>>.clear()

    元组:

    索引取值>>>[0]
        切片操作>>>[2:4]
        统计元素出现的次数>>>.count()
        成员运算>>>  xx in xx
        统计元素个数>>> len()

    字典:

    按k取值 ?>>>.name()
        get 取值方法>>> .get('name')
        修改值>>> d['name'] = 'xxx'
        统计字典中键值对 >>> len()
        删除键值对>>> .pop()
        获取键/值/键值对>>> .keys()/.values()/.items()
        字典更新>>>update() 键不存在就新增
        快速生成字典>>> .fromkeys()
        setdefault()>>> 见不存在就新增键值对,键存在就不做修改

    2.描述下列常见内置函数的作用可用代码说明map,zip,filter,sorted,reduce
     

    内置函数作用
    map使用指定方法取作用传入的每个可迭代对象的元素. 生成新的可迭代对象[同步缩放数据]
    zip

    用于将可迭代的对象作为参数, 将对象中对应的元素打包成一个元组, 然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致, 则返回列表长度与最短的对象相同

    filter过滤,根据条件来筛选数据, 
    sorted对可迭代对象进行排序操作 
    sort对列表进行排序操作
    reduce会对参数序列中的元素进行累积.

    更多参见;python 内置函数_Yietong309的博客-CSDN博客

    3.列举你所知道的面相对象中的__开头__结尾的方法及作用,越多越好

    双下方法作用
    __getattr__当对象获取一个不存在的属性名的时候自动触发, 该方法返回什么对象获取不存在的属性名就会得到什么, 形参item就是对象想要获取的不存在的属性名  [没找到触发]
    __getattribute__对象获取属性的时候自动触发, 无论这个属性存不存在, 当类中既有__getattr__ 又有__getattribute__的时候只会走后者  [无论找没找到都触发]
    __get__当访问一个属性的时候触发
    __set__为一个属性赋值时触发
    __setattr__    对象操作属性值得时候自动触发,>>> 对象.属性名= 属性值
    __del__对象在被删除(主动/被动)得时候自动触发
    __delattr__删除属性的时候会触发它的执行
    __call__对象加()调用,自动触发该方法
    __init__ 给对象设置都有数据的时候触发(实例化)
    __new__产生空对象, 类是先通过__new__取调用, 在通过__init__去执行
    __str__对象被执行打印操作的时候自动触发该方法返回一个字符串,返回什么字符串打印对象之后就展示什么字符串   [ print([对象]) 的时候触发 __str__ 的执行]
    __class__可以查看当前操作的对象所属的类
    __dict__用来查看一个对象或类的名称空间属性,也可以说属性字典
    __all__    用来在使用 from [模块名] import * 的时候, 针对这个 * 来限制能够使用的属性
    __iter__凡是有此方法的都是可迭代对象
    __next__可迭代对象取值
    __enter__ with上下文管理, 对象被with语法执行的时候会自动触发, 该方法返回什么,as关键字后边的变量名就能得到什么
    __exit__

    对象被with语法执行并运行完with子代码之后自动触发

    参见: 面向对象常用魔法方法(内置方法)合集, 超级无敌宇宙详细_给你骨质唱疏松的博客-CSDN博客_面向对象魔法方法

    5.JS有哪些数据类型


    数值number >>> 不区分整型,浮点型
    字符串string>>>只有'',"",``[``是格式化字符串]
    布尔值 boolean>>> true/false 
            null & undefined   >> null 空,

                                     undefined 一个变量未初始化的时候该变量的默认值 是undfined,

                                                            函数无明确返回值的时候也是undefined
    对象>>object  
    数组>>> 类似于列表
    symbol

  • 相关阅读:
    Redis安装及使用(一)
    BSP视频教程第28期:CANopen主从机组网实战,CAN词典工具使用方法以及吃透PDO玩法
    python程序,放入docker容器中, 生成镜像
    访问者模式
    计算机竞赛 机器视觉 opencv 深度学习 驾驶人脸疲劳检测系统 -python
    Flutter快学快用12 列表样式:实践 Flutter 中内容多样式展示方式
    Django笔记十八之save函数的继承操作和指定字段更新等实例方法
    SaaSBase:什么是汇思?
    DDR电源硬件设计要点
    【C++】Visual Studio调试C++代码的13个技巧
  • 原文地址:https://blog.csdn.net/weixin_67531112/article/details/126508119