【探花交友】保存用户信息、上传用户头像、用户信息管理
文章目录
1.3、保存用户信息
1.3.1、接口文档
YAPI接口地址:http://192.168.136.160:3000/project/19/interface/api/88
1.3.2、需求分析
数据库表
tb_user_info(用户基本资料表)
-
用户表和用户信息表是一对一的关系,两者采用主键关联的形式配置
-
主键关联:用户表主键和用户资料表主键要保持一致(如:用户表id=1,此用户的资料表id=1)
执行流程
-
手机端发送请求到消费者
-
消费者构造数据,调用提供者
-
消费者完成业务处理,操作数据库
1.3.3、代码实现
UserInfo实体类
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Data</span>
<span style="color:#555555">@NoArgsConstructor</span>
<span style="color:#555555">@AllArgsConstructor</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserInfo</span> <span style="color:#770088">implements</span> <span style="color:#000000">Serializable</span> {
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 由于userinfo表和user表之间是一对一关系</span>
<span style="color:#aa5500">* userInfo的id来源于user表的id</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@TableId</span>(<span style="color:#000000">type</span><span style="color:#981a1a">=</span> <span style="color:#000000">IdType</span>.<span style="color:#000000">INPUT</span>)
<span style="color:#770088">private</span> <span style="color:#008855">Long</span> <span style="color:#000000">id</span>; <span style="color:#aa5500">//用户id</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">nickname</span>; <span style="color:#aa5500">//昵称</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">avatar</span>; <span style="color:#aa5500">//用户头像</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">birthday</span>; <span style="color:#aa5500">//生日</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">gender</span>; <span style="color:#aa5500">//性别</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">age</span>; <span style="color:#aa5500">//年龄</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">city</span>; <span style="color:#aa5500">//城市</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">income</span>; <span style="color:#aa5500">//收入</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">education</span>; <span style="color:#aa5500">//学历</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">profession</span>; <span style="color:#aa5500">//行业</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">marriage</span>; <span style="color:#aa5500">//婚姻状态</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">tags</span>; <span style="color:#aa5500">//用户标签:多个用逗号分隔</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">coverPic</span>; <span style="color:#aa5500">// 封面图片</span>
<span style="color:#770088">private</span> <span style="color:#000000">Date</span> <span style="color:#000000">created</span>;
<span style="color:#770088">private</span> <span style="color:#000000">Date</span> <span style="color:#000000">updated</span>;
<span style="color:#aa5500">//用户状态,1为正常,2为冻结</span>
<span style="color:#555555">@TableField</span>(<span style="color:#000000">exist</span> <span style="color:#981a1a">=</span> <span style="color:#221199">false</span>)
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">userStatus</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"1"</span>;
}</span></span>
UserController
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@RestController</span>
<span style="color:#555555">@RequestMapping</span>(<span style="color:#aa1111">"/user"</span>)
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserController</span> {
<span style="color:#555555">@Autowired</span>
<span style="color:#770088">private</span> <span style="color:#000000">UserInfoService</span> <span style="color:#000000">userInfoService</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 保存用户信息</span>
<span style="color:#aa5500">* UserInfo</span>
<span style="color:#aa5500">* 请求头中携带token</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@PostMapping</span>(<span style="color:#aa1111">"/loginReginfo"</span>)
<span style="color:#770088">public</span> <span style="color:#000000">ResponseEntity</span> <span style="color:#000000">loginReginfo</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>,
<span style="color:#555555">@RequestHeader</span>(<span style="color:#aa1111">"Authorization"</span>) <span style="color:#008855">String</span> <span style="color:#000000">token</span>) {
<span style="color:#aa5500">//1、解析token</span>
<span style="color:#000000">Claims</span> <span style="color:#000000">claims</span> <span style="color:#981a1a">=</span> <span style="color:#000000">JwtUtils</span>.<span style="color:#000000">getClaims</span>(<span style="color:#000000">token</span>);
<span style="color:#008855">Integer</span> <span style="color:#000000">id</span> <span style="color:#981a1a">=</span> (<span style="color:#008855">Integer</span>) <span style="color:#000000">claims</span>.<span style="color:#000000">get</span>(<span style="color:#aa1111">"id"</span>);
<span style="color:#aa5500">//2、向userinfo中设置用户id</span>
<span style="color:#000000">userInfo</span>.<span style="color:#000000">setId</span>(<span style="color:#008855">Long</span>.<span style="color:#000000">valueOf</span>(<span style="color:#000000">id</span>));
<span style="color:#aa5500">//3、调用service</span>
<span style="color:#000000">userInfoService</span>.<span style="color:#000000">save</span>(<span style="color:#000000">userInfo</span>);
<span style="color:#770088">return</span> <span style="color:#000000">ResponseEntity</span>.<span style="color:#000000">ok</span>(<span style="color:#221199">null</span>);
}
}</span></span>
UserInfoService
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Service</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserInfoService</span> {
<span style="color:#555555">@DubboReference</span>
<span style="color:#770088">private</span> <span style="color:#000000">UserInfoApi</span> <span style="color:#000000">userInfoApi</span>;
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">save</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>) {
<span style="color:#000000">userInfoApi</span>.<span style="color:#000000">save</span>(<span style="color:#000000">userInfo</span>);
}
}</span></span>
UserInfoApi
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">interface</span> <span style="color:#0000ff">UserInfoApi</span> {
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">save</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>);
}</span></span>
UserInfoApiImpl
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@DubboService</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserInfoApiImpl</span> <span style="color:#770088">implements</span> <span style="color:#000000">UserInfoApi</span> {
<span style="color:#555555">@Autowired</span>
<span style="color:#770088">private</span> <span style="color:#000000">UserInfoMapper</span> <span style="color:#000000">userInfoMapper</span>;
<span style="color:#555555">@Override</span>
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">save</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>) {
<span style="color:#000000">userInfoMapper</span>.<span style="color:#000000">insert</span>(<span style="color:#000000">userInfo</span>);
}
}</span></span>
UserInfoMapper
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">interface</span> <span style="color:#0000ff">UserInfoMapper</span> <span style="color:#770088">extends</span> <span style="color:#000000">BaseMapper</span><span style="color:#981a1a"><</span><span style="color:#000000">UserInfo</span><span style="color:#981a1a">></span> {
}</span></span>
1.4、上传用户头像
1.4.1、需求分析
接口文档
YAPI地址:http://192.168.136.160:3000/project/19/interface/api/91
文件上传采用POST传递,mvc中经过文件解析器转化为MultipartFile对象处理
后续请求中,请求headr中都有Authorization参数。
执行流程
1.4.2、代码实现
UsersControler
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 更新用户资料</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@PutMapping</span>
<span style="color:#770088">public</span> <span style="color:#000000">ResponseEntity</span> <span style="color:#0000ff">updateUserInfo</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>,<span style="color:#555555">@RequestHeader</span>(<span style="color:#aa1111">"Authorization"</span>) <span style="color:#008855">String</span> <span style="color:#000000">token</span>) {
<span style="color:#000000">Claims</span> <span style="color:#000000">claims</span> <span style="color:#981a1a">=</span> <span style="color:#000000">JwtUtils</span>.<span style="color:#000000">getClaims</span>(<span style="color:#000000">token</span>);
<span style="color:#008855">Integer</span> <span style="color:#000000">id</span> <span style="color:#981a1a">=</span> (<span style="color:#008855">Integer</span>) <span style="color:#000000">claims</span>.<span style="color:#000000">get</span>(<span style="color:#aa1111">"id"</span>);
<span style="color:#000000">userInfo</span>.<span style="color:#000000">setId</span>(<span style="color:#008855">Long</span>.<span style="color:#000000">valueOf</span>(<span style="color:#000000">id</span>));
<span style="color:#000000">userInfoService</span>.<span style="color:#000000">update</span>(<span style="color:#000000">userInfo</span>);
<span style="color:#770088">return</span> <span style="color:#000000">ResponseEntity</span>.<span style="color:#000000">ok</span>(<span style="color:#221199">null</span>);
}</span></span>
UserInfoService
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">//更新用户头像</span>
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#0000ff">updateHead</span>(<span style="color:#000000">MultipartFile</span> <span style="color:#000000">headPhoto</span>, <span style="color:#008855">Long</span> <span style="color:#000000">id</span>) <span style="color:#770088">throws</span> <span style="color:#000000">IOException</span> {
<span style="color:#aa5500">//1、将图片上传到阿里云oss</span>
<span style="color:#008855">String</span> <span style="color:#000000">imageUrl</span> <span style="color:#981a1a">=</span> <span style="color:#000000">ossTemplate</span>.<span style="color:#000000">upload</span>(<span style="color:#000000">headPhoto</span>.<span style="color:#000000">getOriginalFilename</span>(), <span style="color:#000000">headPhoto</span>.<span style="color:#000000">getInputStream</span>());
<span style="color:#aa5500">//2、调用百度云判断是否包含人脸</span>
<span style="color:#008855">boolean</span> <span style="color:#000000">detect</span> <span style="color:#981a1a">=</span> <span style="color:#000000">aipFaceTemplate</span>.<span style="color:#000000">detect</span>(<span style="color:#000000">imageUrl</span>);
<span style="color:#aa5500">//2.1 如果不包含人脸,抛出异常</span>
<span style="color:#770088">if</span>(<span style="color:#981a1a">!</span><span style="color:#000000">detect</span>) {
<span style="color:#770088">throw</span> <span style="color:#770088">new</span> <span style="color:#000000">RuntimeException</span>();
}<span style="color:#770088">else</span>{
<span style="color:#aa5500">//2.2 包含人脸,调用API更新</span>
<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">UserInfo</span>();
<span style="color:#000000">userInfo</span>.<span style="color:#000000">setId</span>(<span style="color:#000000">id</span>);
<span style="color:#000000">userInfo</span>.<span style="color:#000000">setAvatar</span>(<span style="color:#000000">imageUrl</span>);
<span style="color:#000000">userInfoApi</span>.<span style="color:#000000">update</span>(<span style="color:#000000">userInfo</span>);
}
}</span></span>
UserInfoApi
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#0000ff">update</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>);</span></span>
UserInfoApiImpl
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Override</span>
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#0000ff">update</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>) {
<span style="color:#000000">userInfoMapper</span>.<span style="color:#000000">updateById</span>(<span style="color:#000000">userInfo</span>);
}</span></span>
2、用户信息管理
2.1、查询用户资料
2.1.1、接口文档
YAPI地址:http://192.168.136.160:3000/project/19/interface/api/265
参数userID: 用户id,当不传递时,查询当前用户的资料信息
2.1.2、代码实现
UserInfoVo
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Data</span>
<span style="color:#555555">@NoArgsConstructor</span>
<span style="color:#555555">@AllArgsConstructor</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UserInfoVo</span> <span style="color:#770088">implements</span> <span style="color:#000000">Serializable</span> {
<span style="color:#770088">private</span> <span style="color:#008855">Long</span> <span style="color:#000000">id</span>; <span style="color:#aa5500">//用户id</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">nickname</span>; <span style="color:#aa5500">//昵称</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">avatar</span>; <span style="color:#aa5500">//用户头像</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">birthday</span>; <span style="color:#aa5500">//生日</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">gender</span>; <span style="color:#aa5500">//性别</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">age</span>; <span style="color:#aa5500">//年龄</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">city</span>; <span style="color:#aa5500">//城市</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">income</span>; <span style="color:#aa5500">//收入</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">education</span>; <span style="color:#aa5500">//学历</span>
<span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">profession</span>; <span style="color:#aa5500">//行业</span>
<span style="color:#770088">private</span> <span style="color:#008855">Integer</span> <span style="color:#000000">marriage</span>; <span style="color:#aa5500">//婚姻状态</span>
}</span></span>
UsersController
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@RestController</span>
<span style="color:#555555">@RequestMapping</span>(<span style="color:#aa1111">"/users"</span>)
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">UsersControler</span> {
<span style="color:#555555">@Autowired</span>
<span style="color:#770088">private</span> <span style="color:#000000">UserInfoService</span> <span style="color:#000000">userInfoService</span>;
<span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 查询用户资料</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@GetMapping</span>
<span style="color:#770088">public</span> <span style="color:#000000">ResponseEntity</span> <span style="color:#000000">users</span>(<span style="color:#008855">Long</span> <span style="color:#000000">userID</span>,<span style="color:#555555">@RequestHeader</span>(<span style="color:#aa1111">"Authorization"</span>) <span style="color:#008855">String</span> <span style="color:#000000">token</span>) {
<span style="color:#770088">if</span>(<span style="color:#000000">userID</span> <span style="color:#981a1a">==</span> <span style="color:#221199">null</span>) {
<span style="color:#000000">Claims</span> <span style="color:#000000">claims</span> <span style="color:#981a1a">=</span> <span style="color:#000000">JwtUtils</span>.<span style="color:#000000">getClaims</span>(<span style="color:#000000">token</span>);
<span style="color:#008855">Integer</span> <span style="color:#000000">id</span> <span style="color:#981a1a">=</span> (<span style="color:#008855">Integer</span>) <span style="color:#000000">claims</span>.<span style="color:#000000">get</span>(<span style="color:#aa1111">"id"</span>);
<span style="color:#000000">userID</span> <span style="color:#981a1a">=</span> <span style="color:#008855">Long</span>.<span style="color:#000000">valueOf</span>(<span style="color:#000000">id</span>);
}
<span style="color:#000000">UserInfoVo</span> <span style="color:#000000">userInfo</span> <span style="color:#981a1a">=</span> <span style="color:#000000">userInfoService</span>.<span style="color:#000000">findById</span>(<span style="color:#000000">userID</span>);
<span style="color:#770088">return</span> <span style="color:#000000">ResponseEntity</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">userInfo</span>);
}
}</span></span>
UserInfoService
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">//根据id查寻</span>
<span style="color:#770088">public</span> <span style="color:#000000">UserInfoVo</span> <span style="color:#0000ff">findById</span>(<span style="color:#008855">Long</span> <span style="color:#000000">id</span>) {
<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span> <span style="color:#981a1a">=</span> <span style="color:#000000">userInfoApi</span>.<span style="color:#000000">findById</span>(<span style="color:#000000">id</span>);
<span style="color:#000000">UserInfoVo</span> <span style="color:#000000">vo</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">UserInfoVo</span>();
<span style="color:#000000">BeanUtils</span>.<span style="color:#000000">copyProperties</span>(<span style="color:#000000">userInfo</span>,<span style="color:#000000">vo</span>); <span style="color:#aa5500">//copy同名同类型的属性</span>
<span style="color:#770088">if</span>(<span style="color:#000000">userInfo</span>.<span style="color:#000000">getAge</span>() <span style="color:#981a1a">!=</span> <span style="color:#221199">null</span>) {
<span style="color:#000000">vo</span>.<span style="color:#000000">setAge</span>(<span style="color:#000000">userInfo</span>.<span style="color:#000000">getAge</span>().<span style="color:#000000">toString</span>());
}
<span style="color:#770088">return</span> <span style="color:#000000">vo</span>;
}</span></span>
UserInfoApiImpl
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Override</span>
<span style="color:#770088">public</span> <span style="color:#000000">UserInfo</span> <span style="color:#0000ff">findById</span>(<span style="color:#008855">Long</span> <span style="color:#000000">id</span>) {
<span style="color:#770088">return</span> <span style="color:#000000">userInfoMapper</span>.<span style="color:#000000">selectById</span>(<span style="color:#000000">id</span>);
}</span></span>
2.2、更新用户资料
2.2.1、接口文档
YAPI地址:http://192.168.136.160:3000/project/19/interface/api/259
2.2.2、代码实现
UsersController
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">/**</span>
<span style="color:#aa5500">* 更新用户资料</span>
<span style="color:#aa5500">*/</span>
<span style="color:#555555">@PutMapping</span>
<span style="color:#770088">public</span> <span style="color:#000000">ResponseEntity</span> <span style="color:#0000ff">updateUserInfo</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>,<span style="color:#555555">@RequestHeader</span>(<span style="color:#aa1111">"Authorization"</span>) <span style="color:#008855">String</span> <span style="color:#000000">token</span>) {
<span style="color:#000000">Claims</span> <span style="color:#000000">claims</span> <span style="color:#981a1a">=</span> <span style="color:#000000">JwtUtils</span>.<span style="color:#000000">getClaims</span>(<span style="color:#000000">token</span>);
<span style="color:#008855">Integer</span> <span style="color:#000000">id</span> <span style="color:#981a1a">=</span> (<span style="color:#008855">Integer</span>) <span style="color:#000000">claims</span>.<span style="color:#000000">get</span>(<span style="color:#aa1111">"id"</span>);
<span style="color:#000000">userID</span> <span style="color:#981a1a">=</span> <span style="color:#008855">Long</span>.<span style="color:#000000">valueOf</span>(<span style="color:#000000">id</span>);
<span style="color:#000000">userInfo</span>.<span style="color:#000000">setId</span>(<span style="color:#000000">UserHolder</span>.<span style="color:#000000">getUserId</span>());
<span style="color:#000000">userInfoService</span>.<span style="color:#000000">update</span>(<span style="color:#000000">userInfo</span>);
<span style="color:#770088">return</span> <span style="color:#000000">ResponseEntity</span>.<span style="color:#000000">ok</span>(<span style="color:#221199">null</span>);
}</span></span>
UserInfoService
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">//更新</span>
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#0000ff">update</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>) {
<span style="color:#000000">userInfoApi</span>.<span style="color:#000000">update</span>(<span style="color:#000000">userInfo</span>);
}</span></span>
UserInfoApiImpl
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Override</span>
<span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#0000ff">update</span>(<span style="color:#000000">UserInfo</span> <span style="color:#000000">userInfo</span>) {
<span style="color:#000000">userInfoMapper</span>.<span style="color:#000000">updateById</span>(<span style="color:#000000">userInfo</span>);
}</span></span>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?