V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  night98  ›  全部回复第 23 页 / 共 68 页
回复总数  1341
1 ... 19  20  21  22  23  24  25  26  27  28 ... 68  
2022-03-20 17:17:35 +08:00
回复了 leomm 创建的主题 优惠信息 3 月 20 号腾讯云香港新加坡云服务器约 3 年 33 元-166 元 8 台
+1
2022-03-20 16:44:36 +08:00
回复了 huf 创建的主题 分享发现 看博客需要关注微信~
这种十之八九是洗稿的,拿里面代码片段随便一搜就能找到原文
2022-03-19 17:48:48 +08:00
回复了 cxsz 创建的主题 Java 被怼的莫名奇妙的,这么写会出空指针?
楼主写的没问题,这个 list 一看就知道是从数据库拿的,也判空 list 了,如果 list 里面还有元素能为空的话,先把数据提供方拉出去打一顿吧。
2022-03-19 02:34:35 +08:00
回复了 niceyuri 创建的主题 问与答 关于 CodeReview,和团队小伙伴产生了分歧。
补充一下回复,关于 code review ,比较好的做法是完成一个业务功能提交一次,单次 review 尽量保持在 300 行以内,以 Java 为例,使用 mybatis 或者 jpa 对数据表进行建模生成 model 后并添加对应枚举后,提交一次 review ,这次 review 速度一般比较快,基本上都是按团队规范和机器自动生成的,没啥太多 review 的地方,最多检查下是不是建模有问题,一般一两分钟搞定。接着就是常规的功能 review 了,通常建议拆分为业务功能多次提交,以最常见的订单系统为例,会拆分出例如订单分页接口,订单详情接口,订单提交接口,这三个接口分别提交三次 pr+review ,主要目的是保持 review 的单个逻辑连续性,如果单次提交在 1000 行以上,作为 review 评审者,其实相对难度较大,通常还需要 clone 到本地详细查看,成本太高,可能就直接点通过省事了,关于 review 其实从出发角度来看,其实是为了提升整体代码质量,避免代码崩坏,减少后续维护成本。比如团队如果有实际的代码规范的话,reviwe 主要就是关注代码规范,加上潜在 bug 发现,以及一些常规的代码质量改进,例如可以用新特性或者其他更好的方式去实现。关于你提的这个问题其实我觉得也挺有意思的,其实还是那个问题,你们老大呢,工程实践这玩意说实话就是有和没有在短期没什么太大差距,都是长期来看才有价值,否则也没有那么多的人会写垃圾代码了
2022-03-19 02:25:20 +08:00
回复了 niceyuri 创建的主题 问与答 关于 CodeReview,和团队小伙伴产生了分歧。
先问个问题,你们老大呢?
淘宝渠道全挂了,下不了单
简单问问,出几个应用场景的上机题,看看真实水平
槽点太多,哈哈

@Override
public Response login(String params) { // 入参改成 VO
try {
JSONObject jsonObject = JSON.parseObject(params); // 这块干掉
// 解密手机号码
AesNewUtil aes = new AesNewUtil();
String decMobile = aes.decrypt(jsonObject.getString("mobile")); // 改成静态方法
// 获取 openId
String openId = jsonObject.getString("openId");
if (StringUtils.isEmpty(openId)) { // 入参时校验
return Response.fail(RespCode.PARAM_NULL);
}
logger.info("openId : {}", openId);
// 查询代客用户表
ValetUser valetUser = selectUserByMobile(decMobile);
// 用户是否存在于白名单中
if (null == valetUser) { // 入参时校验,了解一下自定义注解验证
return Response.fail(RespCode.NO_GET_INFO);
} else {
String userId = valetUser.getUserId();
// 判断用户信息是否存在
ValetUserInfo valetUserInfo = valetUserInfoMapper.selectByPrimaryKey(userId);
if (null == valetUserInfo) {
// 保存用户信息
valetUserInfo = new ValetUserInfo();
valetUserInfo.setUserId(userId);
valetUserInfo.setOpenId(openId);
valetUserInfo.setCreateTime(DateUtils.getNowDate());
valetUserInfo.setUpdateTime(DateUtils.getNowDate());
valetUserInfoMapper.insertSelective(valetUserInfo);
}
// 获取 token
String token = TokenUtil.generateToken(userId, decMobile, "app");
cacheOpt.getOpt(Constants.CACHE_STR).opsForValue().set(Constants.USER_AUTH_PRIFIX + userId, token, 7, TimeUnit.DAYS);
// cacheOpt.getOpt(Constants.CACHE_STR).opsForValue().set(Constants.LOGIN_MOBILE_AUTH_PRIFIX + userId, decMobile, 7, TimeUnit.DAYS);
// logger.info((String) cacheOpt.getOpt(Constants.CACHE_STR).opsForValue().get(Constants.USER_AUTH_PRIFIX + valetUser.getUserId()));
Map<String, Object> result = new HashMap<>(); //返回改成 dto
// 用户类型:0 无效,1 网格,2 客户经理,3 泛渠道,4 其他
String userType = String.valueOf(valetUser.getUserType()); // 这里改成枚举+find 方法
if ("0".equals(userType)) {
userType = "无效";
} else if ("1".equals(userType)) {
userType = "网格";
} else if ("2".equals(userType)) {
userType = "客户经理";
} else if ("3".equals(userType)) {
userType = "泛渠道";
} else {
userType = "其他";
}
result.put("mobile", valetUser.getMobile()); // 这里用 beanutil 或者 mapstruct 优化,一行完事
result.put("userName", valetUser.getUserName());
result.put("cusName", valetUser.getCusName());
result.put("userType", userType);
result.put("operId", valetUser.getOperId());
result.put("orgId", valetUser.getOrgId());
result.put("merchantNum", valetUser.getMerchantNum());
result.put("token", token);
// 更新用户表登录时间
valetUserMapper.updateLoginTimeByUserId(DateUtils.getNowDate(), userId);
logger.info("登录成功 {}", decMobile);
return Response.success("登录成功", result);
}
} catch (ValetappException e) { //改成全局异常处理
logger.error("登录失败 : " + e.getMessage());
return Response.fail(RespCode.FAIL);
}
}



改完差不多这样
@Override
public Response login(@Valid UserVO user) {
logger.info("openId : {}", openId);
String decMobile = AesNewUtil.decrypt(user.getMobile());
String userId = valetUser.getUserId();
ValetUser valetUser = selectUserByMobile(decMobile);
// 判断用户信息是否存在
ValetUserInfo valetUserInfo = valetUserInfoMapper.selectByPrimaryKey(userId);
if (Objects.isNull(valetUserInfo)) {
// 保存用户信息
valetUserInfo = ValetUserInfoMapper.convert(user);
valetUserInfoMapper.insertSelective(valetUserInfo);
}
String token = TokenUtil.generateToken(userId, decMobile, "app");
cacheOpt.getOpt(Constants.CACHE_STR).opsForValue().set(Constants.USER_AUTH_PRIFIX + userId, token, 7, TimeUnit.DAYS);

String userType = UserType.find(valetUser.getUserType());
TokenInfo token = tokenmapper.convert(valetUser,userType);
valetUserMapper.updateLoginTimeByUserId(DateUtils.getNowDate(), userId);
logger.info("登录成功 {}", decMobile);
return Response.success("登录成功", token);
}
2022-03-14 16:39:49 +08:00
回复了 rick2c 创建的主题 职场话题 最近是不是找工作的少了?
@fml87 同感,在职的时候招聘来的都是些什么人,离职面试了连面试机会都没有,哈哈
刚好之前做过这一块。简单说一下,电子合同是电子签章技术的应用,电子签章技术是电子签名的一种应用,电子签名其本身依赖于可信的第三方 CA 机构(类似 https 证书)提供的证书,仅持有人持有此证书来保证 4 楼的第一,二条,由 CA 机构提供的证书对 PDF 或其他类型文件进行签名,保证第三,四条,至于是手写还是电子印章,实际上不影响第三和第四条,签章完成后点击签章区域会弹出 CA 和证书信息,以及签名信息。这样就确保了文件的抗抵赖性。现在主流的签章方案还会再加一个时间戳证书,用于证明此次签章的具体时间。
2022-03-11 01:37:36 +08:00
回复了 Kontinue 创建的主题 程序员 读 rocketmq 文档有感
rocketmq 包括对应的 java sdk ,阅读源码问题也挺多的,基本上没注释,还得根据上下文推测,其他稍微用心做的开源都没这毛病,比如 hutool
2022-03-08 18:20:47 +08:00
回复了 dandelion911 创建的主题 职场话题 今年金三银四工作好找吗
目前两面试,应该都挂了,感觉都不是诚心要人
2022-03-08 00:09:13 +08:00
回复了 RedBeanIce 创建的主题 问与答 [求解] io 到底是什么
一个输入,一个输出,
啥意思,输入就是从某个地方拿进内存,输出就是从内存拿到别的地方去,你大致就这么理解就行了,什么网络 io 文件 io 基本上都是这个套路,键盘和显示器差不多也是这么个套路
2022-03-08 00:07:02 +08:00
回复了 heyjude321 创建的主题 Java 项目运行后,线程越来越多
@registerrr 看的很迷惑,看起来应该是腾讯的对象存储,这种不都是声明成 spring 单例的么,居然还会 new 一个出来,new 就算了还不关闭。。。
2022-03-05 20:18:53 +08:00
回复了 LxnChan 创建的主题 程序员 求推荐 Git 代码托管平台
云效,稳如老狗
2022-03-03 00:58:31 +08:00
回复了 JRay 创建的主题 汽车 5W 左右的二手 SUV 有推荐吗?
瑞虎 3X 便宜耐造
2022-03-03 00:44:23 +08:00
回复了 kekeabab 创建的主题 程序员 初中学历的 00 后程序员,未来怎么办?
建议,先跑外卖赚钱,跑外卖门槛低,手里存个 5000 再说。
边跑外卖边晚上学点前端或者 java ,看你个人兴趣,看不懂就直接 b 站找教程,快的话半个月到两月就基本上能出活了
然后花半个月简单过一下面试题,找个小公司,0-50 人左右的那种,要个 7-10k 应该没啥问题,多投多面,总能遇到愿意接你的团队。
然后仔细琢磨下公司的架构,搞明白人家的设计意图,再对比下你自己写的东西,不断进步就好。
2022-03-01 22:54:28 +08:00
回复了 summerlv 创建的主题 问与答 Java1.8 换版本为 openjdk17 后 springboot 程序跑不起来,求助~~~
maven xml 编译目标修改为 jdk17 ,然后 idea - maven 设置里面也是一样,跑起来应该没啥问题,估计会有点 bug 啥的
1 ... 19  20  21  22  23  24  25  26  27  28 ... 68  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1064 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 48ms · UTC 19:18 · PVG 03:18 · LAX 11:18 · JFK 14:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.