某大厂员工爆料,试用期被辞退0赔偿,不同意,直接就单方解除,不怕劳动仲裁吗?
刚看到个贴子,说某大厂员工吐槽:自己试用期被辞退,0赔偿,还没签任何补充协议,人一不同意,公司直接单方解除。
网友吵成一片,有说“大厂就是牛,不缺你一个”的,也有一边倒劝他赶紧去劳动仲裁的。
我觉得这事吧,先撇开情绪不说,试用期≠免费试用。只要签了劳动合同,用人单位单方解除就得拿出充分理由,程序也要合规,不然就可能违法。员工这边,能做的不是网上骂几句,而是立刻把聊天记录、考核表、邮件都保留好,咨询当地仲裁委或专业人士,把流程走完。
仲裁金额也许不多,但这是在告诉公司:你不能想怎么来就怎么来。换个角度想,这也是在给后来人铺路。
面试题:产品名称格式修复
你在电商或者管理后台干过的应该懂,产品库这种东西,时间一长就变成“考古现场”了: “苹果 iPhone14pro 256g 紫色(官方标配)”, “Apple iPhone 14 Pro 紫 256G 旗舰店同款”, 还有运营同学从别的平台粘过来的乱七八糟名字。 搜索不好用、对账不好对,做个报表还能把同一款手机拆成七八行数据,头都大。
今天就聊个很实用的小算法:怎么用 Java 写一个“产品名称格式修复器”。
别一上来就写代码,先说人话版本的规则,要不越改越乱。 以手机为例,可以先约定一个比较通用的格式:
品牌 + 空格 + 型号 + 空格 + 规格(容量) + 空格 + 颜色 + 其他属性(可选)
比如,把下面这些:
Apple iphone14 PRO 256g 深紫(官方标配)苹果-iPhone14Pro 256GB 紫 5G手机【爆款】iPhone14 Pro 紫色 256G Apple
统一修成:
Apple iPhone 14 Pro 256GB 紫色
那我们要做的其实就是几件事:
把多余空格、乱七八糟的符号先清掉; 把同一个意思的词统一一下,比如 256g/256 G/256GB都当成256GB;把品牌、型号、容量、颜色这些信息从原字符串里“捞出来”; 按我们约定的顺序重新拼回去。
听起来有点像在“洗衣服”:先预洗、再分类、再烘干叠好。
顺带一嘴,这种“脏数据清洗”的活,在排查线上日志、同步数据库、分析埋点时也经常遇到,思路都差不多。
可以把整个修复过程当成一条小流水线:
预处理:空格、大小写、全半角统一; 规则匹配:用正则 & 关键字把各个属性“抠”出来; 组装:用统一格式把解析好的结构再拼成一个干净的名字。
用 Java 写的话,可以先定义一个小对象,专门装“解析结果”:
publicclassProductNameInfo{
private String brand;
private String model;
private String capacity;
private String color;
private String extra; // 其它描述,比如“5G手机”“官方标配”
// 省略 getter/setter/toString
}
然后写一个核心入口方法:
publicclassProductNameNormalizer{
public String normalize(String rawName){
if (rawName == null) {
return"";
}
// 1. 预处理:空格、全角字符、大小写
String s = preClean(rawName);
// 2. 去掉各种营销标签、括号里的促销文案
s = removePromotionWords(s);
// 3. 解析出品牌、型号、容量、颜色等信息
ProductNameInfo info = parseCoreAttributes(s);
// 4. 按约定格式重新拼接
return format(info);
}
}
下面把几个关键步骤拆开说。
关键步骤一:预处理 + 噪音清理
预处理其实就是那种“见了就写”的小工具函数,但对提升效果非常关键。
private String preClean(String name){
// 去掉前后空格
String s = name.trim();
// 把连续空格压成一个
s = s.replaceAll("\\s+", " ");
// 全角转半角(简单点只处理常见符号)
s = s.replace('(', '(')
.replace(')', ')')
.replace('【', '[')
.replace('】', ']')
.replace('-', '-');
// 统一单位写法:g/G/GB -> GB
s = s.replaceAll("(?i)(\\d+)\\s*g(b)?", "$1GB");
return s;
}
private String removePromotionWords(String s){
// 去掉中括号、书名号、花括号里的营销词,如【爆款】、[热卖]、(官方标配)
s = s.replaceAll("[\\[【《<].*?[\\]】》>]", "");
s = s.replaceAll("\\(.*?\\)", "");
// 去掉常见无意义词
String[] noiseWords = {"爆款", "热卖", "旗舰店同款", "正品保障"};
for (String w : noiseWords) {
s = s.replace(w, "");
}
// 再压一次空格
return s.replaceAll("\\s+", " ").trim();
}
上面这段算是“粗加工”,先把特别碍眼的东西都挪走。
关键步骤二:解析品牌、型号、容量、颜色
真正有点“算发味”的地方在这儿: 我们要从一整串文本里,把有用信息定位出来。
思路是:
品牌:用一个品牌词典去匹配( Apple、苹果等),命中后统一成一个标准写法;容量:正则抓类似 128GB/256GB;颜色:用一个简单的颜色词表; 型号:在去掉品牌/容量/颜色之后,剩下的主体大概率就是型号+系列。
示例代码(为了篇幅,词典写得比较简陋,你可以按业务扩展):
privatestaticfinal Map<String, String> BRAND_MAP = new HashMap<>();
privatestaticfinal Map<String, String> COLOR_MAP = new HashMap<>();
static {
BRAND_MAP.put("apple", "Apple");
BRAND_MAP.put("苹果", "Apple");
COLOR_MAP.put("紫色", "紫色");
COLOR_MAP.put("深紫", "紫色");
COLOR_MAP.put("金色", "金色");
COLOR_MAP.put("黑色", "黑色");
}
private ProductNameInfo parseCoreAttributes(String s){
ProductNameInfo info = new ProductNameInfo();
String work = s;
// 1. 品牌匹配
for (Map.Entry<String, String> e : BRAND_MAP.entrySet()) {
String key = e.getKey();
if (work.toLowerCase().contains(key.toLowerCase())) {
info.setBrand(e.getValue());
// 把品牌从字符串里去掉,免得后面重复
work = work.replaceAll("(?i)" + Pattern.quote(key), "");
break;
}
}
// 2. 容量匹配:128GB / 256GB / 512GB
Matcher capMatcher = Pattern.compile("(\\d{2,4})\\s*GB", Pattern.CASE_INSENSITIVE)
.matcher(work);
if (capMatcher.find()) {
info.setCapacity(capMatcher.group(1) + "GB");
work = work.replace(capMatcher.group(0), "");
}
// 3. 颜色匹配
for (Map.Entry<String, String> e : COLOR_MAP.entrySet()) {
if (work.contains(e.getKey())) {
info.setColor(e.getValue());
work = work.replace(e.getKey(), "");
break;
}
}
// 4. 剩下的当“型号 + 其它描述”
work = work.replaceAll("\\s+", " ").trim();
info.setModel(work); // 简化处理:全部当型号
return info;
}
这里我偷了个懒:model 就直接用剩下的整串。 实际项目里,你可以继续拆,比如把 iPhone14 Pro 拆成 系列 + 版本,那是下一层优化了。
关键步骤三:统一输出格式
最后一步就是把“洗干净、分好类”的信息重新拼接回一个规范名字:
private String format(ProductNameInfo info){
List<String> parts = new ArrayList<>();
if (notBlank(info.getBrand())) {
parts.add(info.getBrand());
}
if (notBlank(info.getModel())) {
// 型号里顺手整理一下多余空格、首字母
String model = info.getModel().trim().replaceAll("\\s+", " ");
parts.add(model);
}
if (notBlank(info.getCapacity())) {
parts.add(info.getCapacity());
}
if (notBlank(info.getColor())) {
parts.add(info.getColor());
}
if (notBlank(info.getExtra())) {
parts.add(info.getExtra());
}
return String.join(" ", parts);
}
privatebooleannotBlank(String s){
return s != null && s.trim().length() > 0;
}
这样一个“产品名称格式修复器”就跑得起来了。 你可以写个小 main 测试几条原始数据,看看输出效果:
publicstaticvoidmain(String[] args){
ProductNameNormalizer normalizer = new ProductNameNormalizer();
System.out.println(normalizer.normalize("苹果-iPhone14Pro 256g 紫 5G手机【爆款】"));
System.out.println(normalizer.normalize(" iPhone14 Pro 紫色 256G Apple (官方标配) "));
}
整体思路其实很朴素:先清洗,再拆分,最后统一格式。 规则写得越细,效果会越好,但也要注意一点:别把所有逻辑全堆在一个大正则里,不好维护。 慢慢长大这套规则的时候,记得按“品牌/规格/颜色/噪音”这样分层来写函数,你以后回头看代码会感谢现在的自己。
行,先写到这,等你哪天真把这东西接到导入 Excel、SKU 比对那条链路上,再跟我吐槽一波也不迟。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html