和人事谈的月薪4w,但offer上工资构成是基本工资1w+绩效工资3w,有坑吗?
这个问题一看就知道是“职场陷阱101”级别的经典案例了。
网友发帖说,自己谈工资谈到 4w,结果 HR 发来的 offer 结构是 1w 基本工资 + 3w 绩效,然后疑惑:“有坑吗?” 兄弟,你这不是在问坑不坑,而是在确认自己是不是已经掉进坑里了吧?
作为一个资深程序员,我告诉你,这个套路在职场上可不稀奇:
基本工资低 = 五险一金交得少,你生病、买房、公积金贷款全都受影响。 绩效占比太大 = 绩效考核一般都有“玄学”成分,HR 说了算,你可能拿不到全额。 万一裁员 = 赔偿金按基本工资算,裁你也不心疼😅。
所以,这个 offer 水分很大,建议一定要问清楚:绩效的考核标准、发放规则、实际拿到手的概率,最好看看公司里其他人是不是都能拿满。否则,你就相当于被“画饼”了。
反正记住一句话:“绩效大于 30% 的 offer,都得打个问号!”【备注:文末可领最新资料】。
算法题:可见点的最大数目
这道题的核心思想其实和“旋转窗口”或者“极角排序”这类思路比较接近。先来看看问题:
题目大意
给你一堆点(x, y),你站在一个固定的点 (px, py),然后有一个视野角 angle,问你最多能看到多少个点。
这其实就是个“计算可见点”的问题,和我们写游戏时做视野裁剪(Frustum Culling)有异曲同工之妙。你得知道哪些点是在你的“可视范围”内,哪些点是“看不见”的。
解题思路
计算所有点相对 (px, py) 的极角(Polar Angle)。 把这些角度排序,然后利用滑动窗口在 angle允许的范围内求最多的点数。关键优化点:由于角度是 360 度循环的,为了处理边界情况,我们可以把角度数组“复制一份”拼接起来。
代码实现
我们用 Java 来实现这个算法,思路很清晰:
先计算所有点的极角(atan2)。 排序并扩展角度(因为角度是圆的,需要处理 360 度边界情况)。 用滑动窗口在 angle范围内找最大点数。
import java.util.*;public class VisiblePoints {
public int maxVisiblePoints(List<List<Integer>> points, int angle, List<Integer> location) {
int samePositionCount = 0;
List<Double> angles = new ArrayList<>();
int px = location.get(0), py = location.get(1);
// 计算所有点的极角
for (List<Integer> p : points) {
int x = p.get(0), y = p.get(1);
if (x == px && y == py) {
samePositionCount++; // 如果点和自己重合,直接加计数
} else {
double theta = Math.toDegrees(Math.atan2(y - py, x - px)); // 计算角度
angles.add(theta);
}
}
// 排序角度
Collections.sort(angles);
// 处理角度“拼接”,为了避免 360 度边界问题
int n = angles.size();
for (int i = 0; i < n; i++) {
angles.add(angles.get(i) + 360);
}
// 滑动窗口查找最大可见点
int maxPoints = 0;
int j = 0;
for (int i = 0; i < n; i++) {
while (j < angles.size() && angles.get(j) - angles.get(i) <= angle) {
j++;
}
maxPoints = Math.max(maxPoints, j - i);
}
return maxPoints + samePositionCount;
}
public static void main(String[] args) {
VisiblePoints solver = new VisiblePoints();
List<List<Integer>> points = Arrays.asList(
Arrays.asList(2, 2),
Arrays.asList(3, 3),
Arrays.asList(4, 4),
Arrays.asList(1, 1),
Arrays.asList(0, 0)
);
List<Integer> location = Arrays.asList(1, 1);
int angle = 90;
System.out.println(solver.maxVisiblePoints(points, angle, location)); // 输出可见点最大数量
}
}
代码解析
atan2(y - py, x - px)计算点相对 (px, py) 的极角,并转换成角度(度数)。对角度排序,方便滑动窗口操作。 把 angles数组“展开”一份(加 360 度),以便处理边界情况(类似于双倍字符串技巧)。采用滑动窗口(两个指针 i 和 j)找到最大可见点数。
时间复杂度
计算角度 O(n)排序 O(n log n)滑动窗口 O(n)
最终整体复杂度是 O(n log n),足够应对大规模数据。
一些有趣的思考
这个问题其实很像“雷达扫描”或“FOV(Field of View)检测”,在 3D 游戏开发里也有类似的场景裁剪优化。 也可以用二分查找来优化滑动窗口,进一步降低复杂度,但对于大多数场景 O(n log n)已经够用了。
总之,这题既考察了数学计算,也涉及到算法优化,是个不错的练手题!😆
最后,我为大家打造了一份deepseek的入门到精通教程,完全免费:https://www.songshuhezi.com/deepseek
也可以看我写的这篇文章《DeepSeek满血复活,直接起飞!》来进行本地搭建。
-END-
以上,就是今天的分享了,看完文章记得右下角点赞,也欢迎在评论区写下你的留言。