面试记录-松鼠Ai米学
时间:20221214
base:上海
形式:电话面试
岗位:Golang后端
介绍项目,遇到什么困难,用到什么技术。前后端是不是都是你做的
Gin和Echo看到你都用过,有什么区别
Go用了多久,Go你这块熟吗(答,不太熟)
Go的协程,GMP了解吗(后面这个GMP当时没听清),什么是协程(答,比线程更小的一个单位。这种问题好难回答,一方面是理解不深入,另一方面太抽象了。平时接触不到)
我说Go对后端并发支持的好,面试官问了解为什么支持的好吗(那我当然不知道)
课业重不重,实习时间
Python熟吗(答Python比Go熟点,然后后面就翻车了)
说一下Python中列表和元组的区别(懵了,没怎么用过元组),面试官说这是很基础的问题
大小区别:
a.__sizeof__() # 8024
b.__sizeof__() # 9088
tuples具有immutable的属性,意味着tuples内的元素一旦建立就无法更改、删除、排序,然而我们还是可以向list和tuples添加数据的。
由于list是可改的,所以他是不能作为字典数据类型的键的,而tuple却是可以的
tuple是不可更改的数据类型,这也意味着你不能去删除tuple中的元素或者是对tuple进行排序,然而,你既可以往list里去增加一个新的元素,也可以往tuple里去增加一个新的元素,从表面上看,似乎和tuple不能被更改的定义不相符,事实上,python只是替你重新创建了一个新的tuple而已,可以通过id方法来查看,id方法返回对象在内存中的地址,tuple a和list b在添加完元素之后,tuple a的id已经发生了改变,也即意味着这时的tuple a事实上已经并非原先创建时的那个tuple a了,而针对list b来说,list b在添加新元素前后的id是一样的。总之就是,b还是那个b,a已经不是那个a了:( )
除了上述区别和用法以外,tuples和list还有一个区别是tuples通常是存储异质元素(heterogeneous)的数据结构,而list通常存储同质元素(homogeneous)的数据结构。 详细解释就是:
Tuples 通常存储的是一连串的不同种类的事务,但是我们将他们当做一个耦合的整体来处理(比如我们可以把键盘、鼠标、显示器、主机存储在一个tuples里,这些元素都是不同种类的元素,但是放在一起处理时可当作一个计算机硬件系统元素来看待,而一旦定义了这个系统,就不能随意更改已有的元素)
List 通常存储的是一连串的相同种类的事务,所以我们可以把list中的每个元素都当做一个独立的个体来处理(也就是mutable的思想,例如list中存储了一些随机整数,他们拥有相同的属性(都是整数),但各自独立(没有任何相关性),我们可以单独的更改list中任何元素而不影响整体的数据结构)
字典
闭包(答函数里面定义函数)
如果在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。
闭包作用
- 装饰器!!!装饰器是做什么的??其中一个应用就是,我们工作中写了一个登录功能,我们想统计这个功能执行花了多长时间,我们可以用装饰器装饰这个登录模块,装饰器帮我们完成登录函数执行之前和之后取时间。
- 面向对象!!!经历了上面的分析,我们发现外函数的临时变量送给了内函数。大家回想一下类对象的情况,对象有好多类似的属性和方法,所以我们创建类,用类创建出来的对象都具有相同的属性方法。闭包也是实现面向对象的方法之一。在python当中虽然我们不这样用,在其他编程语言入比如JavaScript中,经常用闭包来实现面向对象编程。
- 实现单利模式!! 其实这也是装饰器的应用。单利模式毕竟比较高大,,需要有一定项目经验才能理解单利模式到底是干啥用的,我们就不探讨了。
is和==区别(没看过,说可能是值传递和参数传递)
官方文档中说 is 表示的是对象标示符(object identity),而 == 表示的是相等(equality)
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同
只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False
is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。我们在检查 a is b 的时候,其实相当于检查 id(a) == id(b)。而检查 a == b 的时候,实际是调用了对象 a 的 __eq()__ 方法,a == b 相当于 a.__eq__(b)。一般情况下,如果 a is b 返回True的话,即 a 和 b 指向同一块内存地址的话,a == b 也返回True,即 a 和 b 的值也相等。
MySQL怎么优化一条语句
MySQL int bigint 占几个字节(不会)
tinyint 1 Byte
smallint 2 Byte
mediumint 3 Byte
int 4 Byte
bigint 8 Byte
float 4 Byte
double 8 Byte
decimal是MySQL中存在的精准数据类型,语法格式“DECIMAL(M,D)”。其中,M是数字的最大数(精度),其范围为“1~65”,默认值是10;D是小数点右侧数字的数目(标度),其范围是“0~30”,但不得超过M。
Linux了解哪些命令
其他方面有什么要求,工资之类
怎么看待加班
总结:关于语言的问题都不会,看八股也没看这些,平时也是实用主义,能跑的就没细究。结合上次的面试经历,问Go里int64的范围,也是一脸懵。还有常见的算法问题。就是两方面,语言相关的常见面试问题和算法相关的常见面试问题,这两方面一问就虚。之前背八股只背了计算机网络、操作系统、数据库。