面试记录-松鼠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的范围,也是一脸懵。还有常见的算法问题。就是两方面,语言相关的常见面试问题和算法相关的常见面试问题,这两方面一问就虚。之前背八股只背了计算机网络、操作系统、数据库。

全部评论
说起协程就要连带进程、线程和协程一起说, 线程是最小的执行单位,进程是分配资源的单位。 协程是为了提高程序执行的效率。在线程挂起的时候做其他事。 三者都可以并发。 进程的好处:稳定性,不会影响其他进程。 线程的好处:节省资源。 协程的好处:效率高。 在Linux中的线程和进程相似。 go语言为什么并发方便。 其他语言我不太清楚,但在go语言里,每个函数都可以看作是一个协程,要想让这些协程实现并发,只需要再函数前面加一个go关键词就行,这就实现了并发。 其他语言在程序设计上支持并发。 go语言是在语言级别上支持并发。
4 回复 分享
发布于 2022-12-17 20:27 江西
请问你面完有后续吗?我面完已经两周多了,没有后续动静,给HR发了消息已读不回
点赞 回复 分享
发布于 2022-12-21 17:18 四川
请问大佬面试的时候可以用PYTHON写算法题吗
点赞 回复 分享
发布于 2023-01-28 11:38 湖南
您好,您觉得这家公司咋样呢
点赞 回复 分享
发布于 2023-02-23 15:14 陕西

相关推荐

6 18 评论
分享
牛客网
牛客企业服务