某大厂员工吐槽:带了个新人,简单的需求不爱做,做了就说差不多就行了。复杂点的需求又觉得难,想都不想又把问题带回来了
刚看到个贴子,说某大厂员工吐槽自己带的新人:简单需求嫌无聊,做完还来一句“差不多就行”;稍微复杂一点又嫌难,想都不想就把问题丢回来。
我觉得这事吧…归根到底还是心态问题。有些新人刚进公司,就容易带着点“既要轻松、又要成长、最好还不出错”的想法,结果就是啥都不愿意真动手。
网友们的回复我看了看,有说新人玻璃心的,也有说老员工带人方式太粗暴的。我觉得两边都别走极端,工作就跟健身一样,不流汗永远练不出肌肉。
从我的角度看,简单的活儿不想做,是不愿意打基础;难的活儿不敢做,是害怕承担责任。说到底还是不想付出。
可职场最怕的,就是这种“既要又要”的状态,最后啥都学不会。
不过话说回来,带新人确实也要有耐心,该推一把就推一把。
面试题:有趣的电影
有趣的电影这个题啊,我是前两天晚上加班到十一点多,在公司楼下等外卖的时候刷到的,正好旁边电影院灯牌一闪一闪,想想还挺应景的。
先把题目当成“业务需求”聊一下
老板跟你说: 咱们系统里有一张 cinema 表,字段就这几个:id、movie、description、rating。 现在要给大厅 LED 屏上滚动播放“有趣的电影”:
电影描述不能是 boring电影的 id得是奇数越好看的电影排越前, rating高的往上放
用数据库的话,一条 SQL 就搞定了,这是标准的 LeetCode 620 数据库题,正常写法是 where description <> 'boring' and id % 2 = 1 order by rating desc 这种。
但你这会儿不是在写 SQL,是面试官在白板上跟你说:“用 Java 写下思路吧”。那就得换个姿势聊。
把 SQL 思路翻成“算法思路”
其实就是三件小事,逻辑特别生活化:
先过滤掉无聊的电影( description等于boring的全丢掉)再把偶数 id 的电影踢出去,只留奇数 id 最后按评分从大到小排个序
就好像你在电影 APP 里:勾选“排除无聊片”,再选“只看编号是奇数厅的排片”,然后按评分排序,列表就出来了。
如果把数据库那层抽掉,当成纯算法题,其实就是: 给你一个 List<Movie>,每个 Movie 有四个字段,让你返回一个“过滤 + 排序”之后的新列表。
Java 里手搓一遍,假装本地跑数据
我一般会先定义个最简单的实体类,别搞花里胡哨的 Lombok,面试现场手写越简单越不容易写炸。
classMovie{
int id;
String movie;
String description;
double rating;
publicMovie(int id, String movie, String description, double rating){
this.id = id;
this.movie = movie;
this.description = description;
this.rating = rating;
}
@Override
public String toString(){
return"Movie{" +
"id=" + id +
", movie='" + movie + '\'' +
", description='" + description + '\'' +
", rating=" + rating +
'}';
}
}
然后写个方法,把“有趣的电影”筛出来:
import java.util.*;
import java.util.stream.Collectors;
publicclassInterestingMoviesDemo{
publicstatic List<Movie> findInterestingMovies(List<Movie> allMovies){
if (allMovies == null) {
return Collections.emptyList();
}
return allMovies.stream()
// 1. 描述不是 boring
.filter(m -> m.description != null && !"boring".equalsIgnoreCase(m.description))
// 2. id 为奇数
.filter(m -> (m.id & 1) == 1) // 位运算判断奇偶
// 3. 按评分降序
.sorted((a, b) -> Double.compare(b.rating, a.rating))
.collect(Collectors.toList());
}
publicstaticvoidmain(String[] args){
List<Movie> list = Arrays.asList(
new Movie(1, "War", "great 3D", 8.9),
new Movie(2, "Science", "fiction", 8.5),
new Movie(3, "Irish", "boring", 6.2),
new Movie(4, "Ice", "fantasy", 8.6),
new Movie(5, "House", "Interesting", 9.1)
);
List<Movie> result = findInterestingMovies(list);
result.forEach(System.out::println);
}
}
这段代码你在本地跑一下,输出顺序就是先 id=5,再 id=1,和题目给的预期顺序是对得上的。
顺便说两句小细节:
!"boring".equalsIgnoreCase(m.description)这种写法可以顺便防个 NPE,说白了就是“字符串字面量在前,对象在后”(m.id & 1) == 1判断奇数,和m.id % 2 == 1一个意思,但面试官看到位运算通常会觉得你还行,至少位运算没忘
真在线上,一般还是 SQL 为主
实际项目里,不会先查一堆电影出来再用 Java 过滤,那样浪费数据库的排序能力和索引。正常都是直接写 SQL:
SELECTid, movie, description, rating
FROM cinema
WHERE description <> 'boring'
ANDMOD(id, 2) = 1
ORDERBY rating DESC;
Java 这边只当搬运工,把查询结果封装成 Movie 列表就完事了。上面那段 stream 代码更多是帮你把“数据库题”变成“算法 + 代码表达”,方便面试或者讲题。
有时候面试官其实就想看你能不能把“过滤 + 排序”这些操作用一种清楚的结构写出来,不管是 SQL 还是 Java,都绕不开这几个动作。
行,差不多就说到这,我去看看楼下那家电影院今天排片咋样,说不定正好有一场不 boring 的……
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html