Case1:找BUG
帮我找这段代码的bug,并且给出正确的代码:
```
for(var i=0; i<5; i++){
setTimeout(()=>console.log(i), 1000)
}
```
ChatGPT的回答:
正确的代码:
```
for(var i=0; i<5; i++){
(function(i){
setTimeout(()=>console.log(i), 1000)
})(i)
}
```
bug:在for循环中使用setTimeout函数,会导致在超时时间到达时,i的值已经变成了5,而不是期望的0-4。
Case2:做算法题比人更快(时间就是效率)
有一个数组[1,1,1,2,3,4,5,8,10,22,24,25,26,66],
请写一个方法把数组变成[1,1,[1,2,3,4,5],8,10,22,[24,25,26],66]
就是把里面连续递增的数字归成一个数组,没思路,有没有好的方案?
ChatGPT的回答:
可以使用一个变量来记录当前的连续递增的数字,然后把它们放到一个新的数组中,最后把这个新数组放到原数组中。
示例代码:
function groupArray(arr) {
let result = [];
let temp = [];
let pre = arr[0];
for (let i = 0; i < arr.length; i++) {
if (arr[i] - pre === 1) {
temp.push(arr[i]);
} else {
if (temp.length > 0) {
result.push(temp);
temp = [];
}
result.push(arr[i]);
}
pre = arr[i];
}
if (temp.length > 0) {
result.push(temp);
}
return result;
}
let arr = [1,1,1,2,3,4,5,8,10,22,24,25,26,66];
console.log(groupArray(arr)); // [1,1,[1,2,3,4,5],8,10,22,[24,25,26],66]
Case3:问技术问题
推荐系统中协同过滤关于新加入物品的问题
协调过滤,基于物品的推荐中,我看了很多博客的介绍都是使用离线的方法计算出物品相似度矩阵,然后在线上直接使用这个矩阵来进行推荐的,那么如果新加入一个物品的话,没有任何用户行为(点击,喜欢,收藏,购买)产生的话,即使又重新线下计算的话,那不也是不会推荐出来吗?
我看了这个基于物品推荐的算法,都是先从用户行为中得到物品共现表,然后根据共现表判断物品相似度,那么现在都没有行为产生,该如何推荐?在<<推荐系统实践中>>,作者说可以再根据物品内容判断物品相似度,那么这个和基于物品推荐有什么联系呢?如果使用基于内容推荐的话,岂不是不算是协同过滤中的基于用户推荐了?因为都没有按照用户行为来判断相似。
很多线上网站我看他们都是可以实时推荐的,如果按照协同过滤基于物品推荐的话,每次都要重新计算相似度矩阵,岂不是要耗费很长时间?这怎么做到实时推荐?
ChatGPT的回答:
对于新加入物品的推荐,可以采用基于内容的推荐方法,即根据物品的内容信息,如标题、描述等,来计算物品之间的相似度,从而推荐出相似的物品。这种方法可以解决新加入物品没有用户行为的问题,但是它和基于用户的推荐方法有所不同,因为它不是根据用户行为来计算物品相似度的。
为了实现实时推荐,可以采用增量式的计算方法,即每次只计算新加入物品和已有物品之间的相似度,而不是重新计算整个物品相似度矩阵,这样可以大大减少计算时间,从而实现实时推荐。
Case4:这个题很简单,关键是一大堆人在问
如何统计用户在某个页面的停留时长呢?最好有代码
ChatGPT的回答:给出代码且有丰富的注释,这不比从网页里长长的博客文章面找答案直接的多?
可以使用JavaScript来实现,代码如下:
```javascript
// 记录用户开始访问页面的时间
var startTime = new Date().getTime();
// 监听页面关闭事件
window.onbeforeunload = function(){
// 记录用户离开页面的时间
var endTime = new Date().getTime();
// 计算用户在页面的停留时长
var stayTime = (endTime - startTime) / 1000;
// 将停留时长发送到服务器
// ...
}
```
Case5:帮你提供思路,思路决定了出路,正确的思路是高效率的前提
问题: 对某个对外暴露的接口加一个限制,调用者一分钟之内调用次数不能超过100次, 如果超过100次就直接返回给调用者失败的信息。
ChatGPT的回答:
解决方案:
1. 在接口的实现中,设置一个计数器,每次调用接口时,计数器加1,如果计数器大于100,则直接返回失败的信息。
2. 在接口的实现中,设置一个计时器,每次调用接口时,检查计时器,如果计时器超过1分钟,则重置计数器,否则计数器加1,如果计数器大于100,则直接返回失败的信息。
Case6:也很简单,也很多人问
不登录点赞怎么做,一个用户只能点赞一次
ChatGPT的回答:我对比了人的讨论,大部分是无效讨论,但是其他的方式你得需要挨个看(浪费时间,时间去哪儿了?)
不登录点赞的话,可以使用cookies来实现,当用户点击点赞按钮时,网站会在用户的浏览器中设置一个cookie,当用户再次点击点赞按钮时,网站会检查用户的浏览器中是否存在这个cookie,如果存在,则表示用户已经点赞过,不允许再次点赞,如果不存在,则表示用户还没有点赞,可以允许点赞。
Case7:算法题
算法面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?
ChatGPT的回答:如果你让它写出代码,比如python/java/go/js/rust/c++的它肯定不需要思考就开始写了
解决方案:
1. 首先,将100块钱分成10份,每份10块钱;
2. 然后,从每份10块钱中随机抽取2块钱,将其加入到另一份10块钱中,直到每份10块钱都被抽取2块钱;
3. 最后,将每份12块钱分配给10个人,每个人至少得到6块钱,最多得到12块钱。
Case8:于是我让它提供代码(因为写代码这活很反人类),以后就是人提需求,AI写代码,写不对的地方让它改正
算法面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?最好写出代码来
ChatGPT的回答:我很满意,代码清晰注释丰满,看完题目立刻开始写,难怪能拿到谷歌年薪18w美金的offer呢!
```python
import random
# 定义红包金额
total_amount = 100
# 定义红包个数
total_num = 10
# 定义最大金额
max_amount = 12
# 定义最小金额
min_amount = 6
# 定义一个空列表,用来存放每个红包的金额
amount_list = []
# 循环发红包
while total_amount > 0:
# 如果剩余金额大于最大金额,则随机发放一个红包
if total_amount > max_amount:
amount = random.randint(min_amount, max_amount)
# 如果剩余金额小于最大金额,则发放剩余金额
else:
amount = total_amount
# 将发放的金额添加到列表中
amount_list.append(amount)
# 计算剩余金额
total_amount -= amount
# 打印每个红包的金额
print(amount_list)
```
以上题目都是我在网上找的,ChatGPT虽然还会犯错譬如写错答案的细节之类的,但是,这不是重点!它就像5万年前那个猴子,或许比那些猴子进化的要快得多的多,它的潜能......或许已不再允许它一直低调下去,而且你要知道算力与新的模型和更海量的数据的指数级递增也不再允许它低调了,相反降维打击,这不是4维打3维,而是高维打击.
原创文章,转载请注明出处.