华子员工爆料:不是35岁啊,我们部门招od的说30岁以上的简历就不看了。除非很优秀的
他们部门在招OD(运营开发)的时候,简历上写到30岁以上的基本就直接pass,除非真的特别牛,否则连看都不看。这消息一出,不少同行表示震惊,但也有人开始“点头”。真的是这样吗?
我觉得啊,事情可能没那么简单,背后可能有一些我们看不到的隐情。
首先,现在很多公司都面临着“年轻化”的压力,尤其是一些技术岗位,普遍偏爱年轻人。这并不代表年纪大的程序员不行,而是因为市场上年轻的技术人才更容易适应快速变化的环境,薪资要求也相对较低。
不过,30岁真的就成了“年龄门槛”吗?我倒觉得,不同的岗位和公司,情况会有差异。
如果你真有牛逼的技术实力和经验,就算30岁以上,也完全可以用实力打破这个“年龄墙”。再说了,很多年纪大一点的程序员,其实积累了更丰富的项目经验,解决问题的思路更加成熟,往往能带来比年轻人更高的生产力。
总之,年龄这事儿,不是唯一的标准。技术和经验才是你真正的竞争力!【备注:文末可领最新资料】。
算法题:有效的井字游戏
首先,先看看题目要求。题目给了一个3x3的棋盘,你需要判断当前的棋盘状态是否可能是一个有效的井字游戏的局面。也就是说,你需要检查以下几点:
游戏应该从空棋盘开始,玩家轮流进行“X”和“O”放置。 如果“X”获胜,那么在游戏结束后就不能再进行“X”的操作,反之亦然。 也就是说,如果“X”和“O”同时获胜,那么这是一个不可能发生的局面。
这道题的难点其实在于状态的有效性判定。你得确认游戏在任何时候都遵循了规则,而且不管谁胜利,另一个玩家的操作也不能继续。
接下来,我会用Java来给大家写一个解法,代码走一遍,然后讲讲我怎么思考的。
public class Solution {
public boolean validTicTacToe(String[] board) {
// 检查棋盘上每个玩家的棋子数是否合法
int xCount = 0, oCount = 0;
for (String row : board) {
for (char c : row.toCharArray()) {
if (c == 'X') xCount++;
else if (c == 'O') oCount++;
}
} // X的数量不能比O多1以上
if (xCount != oCount && xCount != oCount + 1) return false;
// 判断是否有“X”或“O”胜利
boolean xWins = checkWinner(board, 'X');
boolean oWins = checkWinner(board, 'O');
// 规则1:如果“X”赢了,必须是X比O多1个
if (xWins && xCount != oCount + 1) return false;
// 规则2:如果“O”赢了,X的数量必须等于O
if (oWins && xCount != oCount) return false;
// 规则3:如果“X”和“O”都赢了,显然不可能
if (xWins && oWins) return false;
return true;
}
// 检查某个玩家是否胜利
private boolean checkWinner(String[] board, char player) {
// 检查行
for (int i = 0; i < 3; i++) {
if (board[i].charAt(0) == player && board[i].charAt(1) == player && board[i].charAt(2) == player)
return true;
}
// 检查列
for (int i = 0; i < 3; i++) {
if (board[0].charAt(i) == player && board[1].charAt(i) == player && board[2].charAt(i) == player)
return true;
}
// 检查对角线
if (board[0].charAt(0) == player && board[1].charAt(1) == player && board[2].charAt(2) == player)
return true;
if (board[0].charAt(2) == player && board[1].charAt(1) == player && board[2].charAt(0) == player)
return true;
return false;
}
}
这段代码实现了以下几个步骤:
计数:首先我们计算棋盘上“X”和“O”的数量。如果“X”的数量比“O”多了超过1,或者“O”的数量比“X”多,这个棋盘一定是无效的。因为在一个有效的井字游戏中,“X”和“O”应该交替出现,最多只有1个棋子会比另一个多。
判断获胜条件:接着,分别检查是否有玩家已经获胜。判断一个玩家是否获胜的条件就是:横、竖、斜线上都要有相同的棋子。如果“X”或“O”有任何一方胜利,我们就根据规则进一步判断局面是否合法。比如,只有“X”获胜时,才能保证“X”的数量比“O”多1;而“O”获胜时,二者的数量应该相等。
多个赢家的情况:最后,我们还要检查是否有“X”和“O”同时获胜的情况。如果有,那显然是不可能的局面,因为游戏已经结束了,不能继续进行。
从代码上看,其实逻辑是很清晰的。唯一需要注意的地方是判断“X”和“O”是否同时胜利的情况,这是一个特别容易忽略的陷阱。
如果你已经刷了很多算法题,可能会觉得这道题其实并不复杂,但在实际的面试中,这类题目其实可以反映出一个程序员在细节处理上的能力。如果你把“X”和“O”同时获胜的情况忘掉,那就会导致错误的答案。所以,编写代码时不仅要考虑常规的情况,还要细心地排查一些边缘的特殊情况。
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。