题目: 给定考生名称、数学成绩、语文成绩,要求总分高的排前面,总分一样数学成绩优先,数学成绩一样语文成绩优先,都一样情况下,按考生名称排序。注:不能使用排序库函数
过程:我一看,这不简单,不就是基本的排序算法吗,快速排序和冒泡排序。题挺简单,但我一时间没想起来怎么写。终于回想起了冒泡排序的算法,后面在排序条件上踩了一个坑,耽误了点时间,最后还是在要求时间内写出来了。
package main
import (
"fmt"
)
//假设学生有两门课程语文和数学,如:XiaoMing(80, 90),
//实现一个班级名次排名,要求总分高的排在前面,当总分相同时,
//数学成绩高的在前面,若两门课程均相同时,按姓名拼音排序,
type student struct {
Name string
Math int
Chinese int
}
func main() {
studentList := []*student{
{
Name: "A1",
Math: 90,
Chinese: 85,
},
{
Name: "A2",
Math: 94,
Chinese: 105,
},
{
Name: "A3",
Math: 95,
Chinese: 80,
},
{
Name: "A4",
Math: 95,
Chinese: 80,
},{
Name: "A5",
Math: 93,
Chinese: 106,
},
}
rank(studentList)
for i:= range studentList{
fmt.Println(studentList[i])
}
}
func rank(s []*student){
for i:= range s{
for j:=0;j<len(s);j++{
if compare(s[i],s[j]){
s[i], s[j]=s[j],s[i]
}
}
}
}
func compare(s1, s2 *student)bool{
if s1.Chinese+s1.Math > s2.Chinese+s2.Math{
return true
} else if s1.Chinese+s1.Math < s2.Chinese+s2.Math{
return false
}
if s1.Math > s2.Math {
return true
} else if s1.Math < s2.Math{
return false
}
if s1.Chinese > s2.Chinese{
return true
} else if s1.Chinese < s2.Chinese{
return false
}
return s1.Name < s2.Name
}
反思:对基础知识掌握的不够好,这种基础算法应该要分分钟写出来才正常
题目:一个长度为10的数组,每个元素的大小在0-9之间,但是只有一个数字是不重复的,请找出那个数字
过程:我有点懵,平常刷算法题一般是用个map直接记录就行了,这多简单。但是面试官肯定是不希望看到这么简单的,问我有没有其他方式,我想了好久确实没啥思路,心里想了好几种方案都解不出来,直接放弃了。
反思:面试完我搜了一下,大概率是这个题的变种:只出现一次的数字,要用到位运算和电路等知识,这块确实不容易想到,还需要多看看题的多种解法,不能只求通过。
问题: 10个线程,并发加数字,每个线程加100万,最后的结果是1000万吗
过程: 这有并发的情况,肯定不是一千万啊。然后问题来了,那有什么办法可以让它稳定一千万呢?
问得好啊,第一种方式是加锁啊,缺点就是性能损耗太大,每个线程100万次,每次都要判断锁,性能会很差。那有没有其他损耗没那么大的方法呢?我回答的是用atomic库的原子函数或者用Redis的Incr来加。回答完感觉都不是面试官想要的答案。
反思:其实我后来想了想,还有一种方式是使用通道,10个线程往通道里面发送数据,由通道的接收方去做增加操作,但是这样10个线程实际上可能等价于1个,完全体现不出多线程的优势,我也挺头秃的。。。
问题: 你要开发一个系统,先调用账户系统扣钱,后调用业务业务发奖励,怎么做,会遇到什么异常情况?
过程:这就是分布式事务嘛,可惜不太了解。异常情况我问答的是:1、扣钱失败了;2、扣钱成功,发奖励失败了;3、整体链路超时了。回答了问我还有没其他情况?我:???。这还有啥其他情况,画个流程图出来也就这几种异常啊,当时没太明白。
反思: 下来搜了下,西巴,可以参考这个:分布式事务,哦,原来还有回滚操作,回滚也会失败,西巴。
问题:估计是看我上面几个问题回答的不行,转而问起了平常工作中用的开发框架和项目经历
过程: 这个没啥好说的,框架大致了解过一些,遗憾的是当时没想起来画个架构图讲解啥的,只靠嘴在那里巴拉巴拉,感觉说不太清楚。
反思:有条件的情况就画个架构图辅助一下
感觉表现很差,大概率是没了,还是要多刷刷题多看下分布式的知识,之前复习的网络知识和golang高级知识一个都没问到啊。。。。