Go面试看这里了~(二十三)

161 篇文章 12 订阅

原文地址:Go面试看这里了~(二十三)

1、有异常类型么?

Go没有异常类型,只有错误类型(Error),函数要想返回错误,通常用返回值表示异常状态,像C错误码,可逐层返回,直到被处理。

Go虽无异常概念,但却有更为恐怖的panic,由于有recover,在一定程度上, panic 可以类比做异常,Go错误和异常(panic)是可以互相转换的,方式如下:

  1. 错误转异常:如程序逻辑上尝试请求某URL,最多尝试三次,尝试三次的过程中请求失败是错误,尝试完第三次还不成功的话,失败就被提升为异常。

  2. 异常转错误:如panic触发的异常被recover恢复后,将返回值中error类型的变量进行赋值,以便上层函数继续走错误处理流程。

2、指针的作用?

指针变量指向值的内存地址,指针类型用于传递地址,而不是传递值,Go函数所有参数都是传递一个复制的值,如果值的体积过大,则会严重降低效率,而传递地址,则会提高效率,另外传递指针也能让Go函数实现对变量值的修改,如一个复杂类型的值被传递了若干次后,和自己比较,虽用于保存的容器和名称变了,但用于保存值的地址不变,此时只要使用指针进行对比,就知道还是原来的东西。

用处如下:

  1. 指针指向变量的地址。

  2. 指针变量的创建和传递。

  3. 大量数据传递时,可以传递指针地址。

3、点赞系统设计?

需提供的API接口如下:

  1. 点赞API接口(规则:没有点赞则点赞,已点赞则取消)。

  2. 文章点赞总数获取。

  3. 根据文章获取点赞列表。

  4. 判断用户是否对文章点赞。

  5. 用户获得的点赞总数。

存储服务搭配:MySQL+Redis+RabbitMQ。

数据获取和存储思路:

MySQL负责数据存储,Redis负责存储热点数据,RabbitMQ负责存储即将写入MySQL的数据,后台走计划任务消费RabbitMQ往数据库写入数据。

4、非接口的任意类型 T() 都能够调用 *T 的方法吗?反过来呢?

仅当T类型的值是可寻址(addressable) 时,T值可调为*T类型声明的方法,编译器在调用指针所属的主方法前,会自动取T值的地址,因为不是任何T值都是可寻址的,所以并非任何T值都能够调用为*T类型声明的方法。

反过来,*T类型的值可调为类型T声明的方法,因为引用指针总是合法的,事实上,可认为对于每一个为T类型声明的方法,编译器都会为类型*T自动隐式声明一个同名和同签名的方法。

不可寻址的值如下:

  1. 字符串中的字节。

  2. map 对象中的元素(slice 对象的元素是可寻址的,因为slice的底层是数组)。

  3. 常量。

  4. 包级别的函数等。

5、如CPU只有一核会不会阻塞?

Go1.14之前的版本会阻塞,Go1.14及之后的版本实现了基于信号的抢占式调度,所以不会阻塞,可牢记sysmon系统调用函数。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值