• 基于SSM实现手机销售商城系统


    作者主页:编程指南针

    作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

    主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

    文末获取源码 

    一,项目简介

     网络销售已经成为现在商品销售的一个主流趋势,传统的代理模式己经不再适合现在的商业的生态发展。网络销售可以实现F2C的这种厂家直销到客户手中的方式,这样既能降低销售费用,又能减少中间的程序,可以为顾客提供便利。,而且可以打破地域和时空的限制,让买卖更加的自由灵活。

    经过调研开发的这套SSM手机商城系统,主要基于SSM框架进行商城系统的整体开发实现。前端使用Bootstrap进行页面布局,并使用MySql5.7关系型数据库进行商品和业务数据的存储。系统整体功能完整,操作简洁方便。

    本商城系统主要实现在线销售各类品牌手机的功能,包含前端商品展示和购买以及后台管理功能。主要实现商品浏览、在线下单购买手机、热销手机查看、个人中心管理、后台的用户数据、订单数据、产品数据的管理等相关功能。本商城的上线必定能为商家的产品销售提供更好的销售渠道。

    下面展示一下SSM手机商城的功能结构图

     

    SSM手机商城系统的使用者主要包含两种用户角色,其一是商城后台管理员角色,其二是商城前端用户角色,这两个角色的具体功能如下:

        管理员角色:管理员登陆手机商城系统后台管理,管理并操作系统中的相关业务数据,包括前端客户管理、手机商品管理、手机订单管理、手机分类管理等;

    前台用户角色:前台用户登录SSM手机商城系统后可以进行手机商品信息浏览、选择手机添加到购物车、在线下单购买、个人中心管理等操作。

    二,环境介绍

    语言环境:Java:  jdk1.8

    数据库:Mysql: mysql5.7

    应用服务器:Tomcat:  tomcat8.5.31

    开发工具:IDEA或eclipse

    后台开发技术:SSM框架

    前台开发技术:Bootstrap+Jquery+Ajax

    三,系统展示

    3.1 SSM手机商城功能模块的展示

    3.1.1 前台首页展示

    SSM手机商城前端主要就是实现商品的信息浏览及购买下单操作,采用Bootstrap框架 ,主要基于 HTML、CSS、JAVASCRIPT、JSP,它简洁灵活,且使用便捷,前台首页主要包含商品浏览、在线下单、个人中心、我的订单等。具体操作界面展示如下图3-1所示。

     

    图3-1 前台首页界面

    .1.2前台用户购物车模块

      SSM手机商场面前台用户登陆系统后可以进入手机详情页面中将手机添加到购物车。然后在购物车中可以实现在线下单购买操作。添加购物车及用户下单操作界面如下图3-2、3-3所示。

     

    图3-2 前台用户添加购物车操作界面

     

    图3-3 前台用户提交订单操作界面

    3.1.3前台用户个人订单管理模块

      SSM手机商城系统前台用户登陆系统后可以在个人订单管理模块中管理个人的订单信息。可以根据订单状态显示相关信息,并可以对未支付的订单进行支付操作,前端用户个人订单管理操作界面如下图3-4所示。

     

    图3-4前台用户个人订单管理操作界面

    3.1.4前台用户个人信息管理模块

    SSM手机商城系统前台用户登陆系统后可以在个人信息管理模块中管理个人的相关信息。前端用户个人信息管理操作界面如下图3-5所示。

     

    图3-5前台用户个人信息管理操作界面

    3.1.5前台用户注册模块

      SSM手机商城系统前台用户可以进行个人信息注册后再进行登陆。前端用户个人账户注册操作界面如下图3-6所示。

     

    图3-6前台用户个人注册操作界面

    其中用户密码和密码是必填项,会进行基于JS正则表达式的校验,如果录的数据不符合要求,将进行相应的信息提示。

    3.1.6前台用户登陆模块

      SSM手机商城系统前台用户可以进行个人信息注册后可以进行系统登陆,登陆系统后方可执行有权限的购买等操作。前端用户个人登陆操作界面如下图3-7所示。

     

    图3-7前台用户个人登陆操作界面

    3.2后台功能模块的展示

    3.2.1后台用户登录功能

      SSM手机商城系统后台用户如果想要对商城的相关信息进行管理操作,首先要登录系统,才可展开相关的操作。输入手机号和密码后用户登陆界面如下图3-8所示。

     

    图3-8后台用户登录操作界面

    3.2.2客户管理功能

      SSM手机商城系统系统管理员用户登陆系统后,可以进入客户管理菜单进行相应的管理员客户信息管理。用户管理操作界面如下图3-9、3-10所示:

     

    图3-9后台户管理功能界面图

    图3-10后台客户新增界面图

    3.2.3 后台手机商品管理操作UI

      SSM手机商城系统管理员用户登陆系统后,可以进入商品管理菜单进行相应的手机商品信息管理。其中主要包含手机商品的添加、修改、查询、加入条幅、加入新品、加入热销以及相应的移出操作等。商品信息管理操作界面如下图3-11、3-12所示。

     

    图3-11后台商品管理功能UI界面

     

    图3-12商台餐品新增功能UI界面

    4.2.4 后台订单管理操作UI

      SSM手机商城系统系统管理员用户登陆系统后,可以进入商品订单管理菜单进行相应的商品订单信息管理。其中主要包含订单的查询、订单明细的查看等,可以根据订单不同的完成状态来查行查看,并可以根据用户的付款情况,收货情况等来设置订单的不同完成状,订单信息管理操作界面如下图4-13所示。

     

    图4-13后台订单管理功能UI界面

    4.2.5 后台商品类目管理操作UI

      SSM手机商城系统管理员用户登陆系统后,可以进入商品类目管理模块管理餐品的分类信息。商品类目管理界面如下图3-14所示。

     

    图3-14商品类目管理功能UI界面

    3.2.6 后台管理员个人密码管理操作UI

      SSM手机商城系统管理员用户登陆系统后,在后台可以对进自己的密码进行修改管理操作。个人密码管理界面如下图4-15所示。

     

    图3-15个人密码修改功能UI界面

    四,核心代码展示

    1. package com.controller;
    2. import java.util.Objects;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpSession;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Controller;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RequestParam;
    9. import org.springframework.web.bind.annotation.ResponseBody;
    10. import org.springframework.web.multipart.MultipartFile;
    11. import com.entity.Admins;
    12. import com.entity.Goods;
    13. import com.entity.Tops;
    14. import com.entity.Types;
    15. import com.entity.Users;
    16. import com.service.AdminService;
    17. import com.service.GoodService;
    18. import com.service.OrderService;
    19. import com.service.TopService;
    20. import com.service.TypeService;
    21. import com.service.UserService;
    22. import com.util.PageUtil;
    23. import com.util.SafeUtil;
    24. import com.util.UploadUtil;
    25. /**
    26. * 后台相关接口
    27. */
    28. @Controller
    29. @RequestMapping("/admin")
    30. public class AdminController {
    31. private static final int rows = 10;
    32. @Autowired
    33. private AdminService adminService;
    34. @Autowired
    35. private OrderService orderService;
    36. @Autowired
    37. private UserService userService;
    38. @Autowired
    39. private GoodService goodService;
    40. @Autowired
    41. private TopService topService;
    42. @Autowired
    43. private TypeService typeService;
    44. /**
    45. * 管理员登录
    46. * @return
    47. */
    48. @RequestMapping("/login")
    49. public String login(Admins admin, HttpServletRequest request, HttpSession session) {
    50. if (adminService.checkUser(admin.getUsername(), admin.getPassword())) {
    51. session.setAttribute("username", admin.getUsername());
    52. return "redirect:index";
    53. }
    54. request.setAttribute("msg", "用户名或密码错误!");
    55. return "/admin/login.jsp";
    56. }
    57. /**
    58. * 退出
    59. * @return
    60. */
    61. @RequestMapping("/logout")
    62. public String logout(HttpSession session) {
    63. session.removeAttribute("admin");
    64. return "/admin/login.jsp";
    65. }
    66. /**
    67. * 后台首页
    68. * @return
    69. */
    70. @RequestMapping("/index")
    71. public String index(HttpServletRequest request) {
    72. request.setAttribute("msg", "恭喜你! 登录成功了");
    73. return "/admin/index.jsp";
    74. }
    75. /**
    76. * 订单列表
    77. *
    78. * @return
    79. */
    80. @RequestMapping("/orderList")
    81. public String orderList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,
    82. @RequestParam(required=false, defaultValue="1") int page) {
    83. request.setAttribute("flag", 1);
    84. request.setAttribute("status", status);
    85. request.setAttribute("orderList", orderService.getList(status, page, rows));
    86. request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getTotal(status), page, rows));
    87. return "/admin/order_list.jsp";
    88. }
    89. /**
    90. * 订单发货
    91. *
    92. * @return
    93. */
    94. @RequestMapping("/orderDispose")
    95. public String orderDispose(int id, byte status,
    96. @RequestParam(required=false, defaultValue="1") int page) {
    97. orderService.dispose(id);
    98. return "redirect:orderList?flag=1&status="+status+"&page="+page;
    99. }
    100. /**
    101. * 订单完成
    102. *
    103. * @return
    104. */
    105. @RequestMapping("/orderFinish")
    106. public String orderFinish(int id, byte status,
    107. @RequestParam(required=false, defaultValue="1") int page) {
    108. orderService.finish(id);
    109. return "redirect:orderList?flag=1&status="+status+"&page="+page;
    110. }
    111. /**
    112. * 订单删除
    113. *
    114. * @return
    115. */
    116. @RequestMapping("/orderDelete")
    117. public String orderDelete(int id, byte status,
    118. @RequestParam(required=false, defaultValue="1") int page) {
    119. orderService.delete(id);
    120. return "redirect:orderList?flag=1&status="+status+"&page="+page;
    121. }
    122. /**
    123. * 顾客管理
    124. *
    125. * @return
    126. */
    127. @RequestMapping("/userList")
    128. public String userList(HttpServletRequest request,
    129. @RequestParam(required=false, defaultValue="1") int page) {
    130. request.setAttribute("flag", 2);
    131. request.setAttribute("userList", userService.getList(page, rows));
    132. request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getTotal(), page, rows));
    133. return "/admin/user_list.jsp";
    134. }
    135. /**
    136. * 顾客添加
    137. *
    138. * @return
    139. */
    140. @RequestMapping("/userAdd")
    141. public String userAdd(HttpServletRequest request) {
    142. request.setAttribute("flag", 2);
    143. return "/admin/user_add.jsp";
    144. }
    145. /**
    146. * 顾客添加
    147. *
    148. * @return
    149. */
    150. @RequestMapping("/userSave")
    151. public String userSave(Users user, HttpServletRequest request,
    152. @RequestParam(required=false, defaultValue="1") int page) {
    153. if (userService.isExist(user.getUsername())) {
    154. request.setAttribute("msg", "用户名已存在!");
    155. return "/admin/user_add.jsp";
    156. }
    157. userService.add(user);
    158. return "redirect:userList?flag=2&page="+page;
    159. }
    160. /**
    161. * 顾客密码重置页面
    162. *
    163. * @return
    164. */
    165. @RequestMapping("/userRe")
    166. public String userRe(int id, HttpServletRequest request) {
    167. request.setAttribute("flag", 2);
    168. request.setAttribute("user", userService.get(id));
    169. return "/admin/user_reset.jsp";
    170. }
    171. /**
    172. * 顾客密码重置
    173. *
    174. * @return
    175. */
    176. @RequestMapping("/userReset")
    177. public String userReset(Users user,
    178. @RequestParam(required=false, defaultValue="1") int page) {
    179. String password = SafeUtil.encode(user.getPassword());
    180. user = userService.get(user.getId());
    181. user.setPassword(password);
    182. userService.update(user);
    183. return "redirect:userList?flag=2&page="+page;
    184. }
    185. /**
    186. * 顾客更新
    187. *
    188. * @return
    189. */
    190. @RequestMapping("/userEdit")
    191. public String userEdit(int id, HttpServletRequest request) {
    192. request.setAttribute("flag", 2);
    193. request.setAttribute("user", userService.get(id));
    194. return "/admin/user_edit.jsp";
    195. }
    196. /**
    197. * 顾客更新
    198. *
    199. * @return
    200. */
    201. @RequestMapping("/userUpdate")
    202. public String userUpdate(Users user,
    203. @RequestParam(required=false, defaultValue="1") int page) {
    204. userService.update(user);
    205. return "redirect:userList?flag=2&page="+page;
    206. }
    207. /**
    208. * 顾客删除
    209. *
    210. * @return
    211. */
    212. @RequestMapping("/userDelete")
    213. public String userDelete(Users user,
    214. @RequestParam(required=false, defaultValue="1") int page) {
    215. userService.delete(user);
    216. return "redirect:userList?flag=2&page="+page;
    217. }
    218. /**
    219. * 产品列表
    220. *
    221. * @return
    222. */
    223. @RequestMapping("/goodList")
    224. public String goodList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,
    225. @RequestParam(required=false, defaultValue="1") int page) {
    226. request.setAttribute("flag", 3);
    227. request.setAttribute("page", page);
    228. request.setAttribute("status", status);
    229. request.setAttribute("goodList", goodService.getList(status, page, rows));
    230. request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows));
    231. return "/admin/good_list.jsp";
    232. }
    233. /**
    234. * 产品添加
    235. *
    236. * @return
    237. */
    238. @RequestMapping("/goodAdd")
    239. public String goodAdd(HttpServletRequest request) {
    240. request.setAttribute("flag", 3);
    241. request.setAttribute("typeList", typeService.getList());
    242. return "/admin/good_add.jsp";
    243. }
    244. /**
    245. * 产品添加
    246. *
    247. * @return
    248. * @throws Exception
    249. */
    250. @RequestMapping("/goodSave")
    251. public String goodSave(String name, int price, String intro, int stock, int typeId,
    252. MultipartFile cover, MultipartFile image1, MultipartFile image2,
    253. @RequestParam(required=false, defaultValue="1") int page) throws Exception {
    254. Goods good = new Goods();
    255. good.setName(name);
    256. good.setPrice(price);
    257. good.setIntro(intro);
    258. good.setStock(stock);
    259. good.setTypeId(typeId);
    260. good.setCover(UploadUtil.fileUpload(cover));
    261. good.setImage1(UploadUtil.fileUpload(image1));
    262. good.setImage2(UploadUtil.fileUpload(image2));
    263. goodService.add(good);
    264. return "redirect:goodList?flag=3&page="+page;
    265. }
    266. /**
    267. * 产品更新
    268. *
    269. * @return
    270. */
    271. @RequestMapping("/goodEdit")
    272. public String goodEdit(int id, HttpServletRequest request) {
    273. request.setAttribute("flag", 3);
    274. request.setAttribute("typeList", typeService.getList());
    275. request.setAttribute("good", goodService.get(id));
    276. return "/admin/good_edit.jsp";
    277. }
    278. /**
    279. * 产品更新
    280. *
    281. * @return
    282. * @throws Exception
    283. */
    284. @RequestMapping("/goodUpdate")
    285. public String goodUpdate(int id, String name, int price, String intro, int stock, int typeId,
    286. MultipartFile cover, MultipartFile image1, MultipartFile image2,
    287. @RequestParam(required=false, defaultValue="1") int page) throws Exception {
    288. Goods good = goodService.get(id);
    289. good.setName(name);
    290. good.setPrice(price);
    291. good.setIntro(intro);
    292. good.setStock(stock);
    293. good.setTypeId(typeId);
    294. if (Objects.nonNull(cover) && !cover.isEmpty()) {
    295. good.setCover(UploadUtil.fileUpload(cover));
    296. }
    297. if (Objects.nonNull(image1) && !image1.isEmpty()) {
    298. good.setImage1(UploadUtil.fileUpload(image1));
    299. }
    300. if (Objects.nonNull(image2) && !image2.isEmpty()) {
    301. good.setImage2(UploadUtil.fileUpload(image2));
    302. }
    303. goodService.update(good);
    304. return "redirect:goodList?flag=3&page="+page;
    305. }
    306. /**
    307. * 产品删除
    308. *
    309. * @return
    310. */
    311. @RequestMapping("/goodDelete")
    312. public String goodDelete(int id,
    313. @RequestParam(required=false, defaultValue="1") int page) {
    314. goodService.delete(id);
    315. return "redirect:goodList?flag=3&page="+page;
    316. }
    317. /**
    318. * 添加推荐
    319. * @return
    320. */
    321. @RequestMapping("/topSave")
    322. public @ResponseBody String topSave(Tops tops,
    323. @RequestParam(required=false, defaultValue="0")byte status,
    324. @RequestParam(required=false, defaultValue="1") int page) {
    325. int id = topService.add(tops);
    326. return id > 0 ? "ok" : null;
    327. }
    328. /**
    329. * 删除推荐
    330. * @return
    331. */
    332. @RequestMapping("/topDelete")
    333. public @ResponseBody String topDelete(Tops tops,
    334. @RequestParam(required=false, defaultValue="0")byte status,
    335. @RequestParam(required=false, defaultValue="1") int page) {
    336. boolean flag = topService.delete(tops);
    337. return flag ? "ok" : null;
    338. }
    339. /**
    340. * 类目列表
    341. *
    342. * @return
    343. */
    344. @RequestMapping("/typeList")
    345. public String typeList(HttpServletRequest request) {
    346. request.setAttribute("flag", 4);
    347. request.setAttribute("typeList", typeService.getList());
    348. return "/admin/type_list.jsp";
    349. }
    350. /**
    351. * 类目添加
    352. *
    353. * @return
    354. */
    355. @RequestMapping("/typeSave")
    356. public String typeSave(Types type,
    357. @RequestParam(required=false, defaultValue="1") int page) {
    358. typeService.add(type);
    359. return "redirect:typeList?flag=4&page="+page;
    360. }
    361. /**
    362. * 类目更新
    363. *
    364. * @return
    365. */
    366. @RequestMapping("/typeEdit")
    367. public String typeUp(int id, HttpServletRequest request) {
    368. request.setAttribute("flag", 4);
    369. request.setAttribute("type", typeService.get(id));
    370. return "/admin/type_edit.jsp";
    371. }
    372. /**
    373. * 类目更新
    374. *
    375. * @return
    376. */
    377. @RequestMapping("/typeUpdate")
    378. public String typeUpdate(Types type,
    379. @RequestParam(required=false, defaultValue="1") int page) {
    380. typeService.update(type);
    381. return "redirect:typeList?flag=4&page="+page;
    382. }
    383. /**
    384. * 类目删除
    385. *
    386. * @return
    387. */
    388. @RequestMapping("/typeDelete")
    389. public String typeDelete(Types type,
    390. @RequestParam(required=false, defaultValue="1") int page) {
    391. typeService.delete(type);
    392. return "redirect:typeList?flag=4&page="+page;
    393. }
    394. /**
    395. * 管理员列表
    396. *
    397. * @return
    398. */
    399. @RequestMapping("/adminList")
    400. public String adminList(HttpServletRequest request,
    401. @RequestParam(required=false, defaultValue="1") int page) {
    402. request.setAttribute("flag", 5);
    403. request.setAttribute("adminList", adminService.getList(page, rows));
    404. request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getTotal(), page, rows));
    405. return "/admin/admin_list.jsp";
    406. }
    407. /**
    408. * 管理员修改自己密码
    409. *
    410. * @return
    411. */
    412. @RequestMapping("/adminRe")
    413. public String adminRe(HttpServletRequest request, HttpSession session) {
    414. request.setAttribute("flag", 5);
    415. request.setAttribute("admin", adminService.getByUsername(String.valueOf(session.getAttribute("username"))));
    416. return "/admin/admin_reset.jsp";
    417. }
    418. /**
    419. * 管理员修改自己密码
    420. *
    421. * @return
    422. */
    423. @RequestMapping("/adminReset")
    424. public String adminReset(Admins admin, HttpServletRequest request) {
    425. request.setAttribute("flag", 5);
    426. if (adminService.get(admin.getId()).getPassword().equals(SafeUtil.encode(admin.getPassword()))) {
    427. admin.setPassword(SafeUtil.encode(admin.getPasswordNew()));
    428. adminService.update(admin);
    429. request.setAttribute("admin", admin);
    430. request.setAttribute("msg", "修改成功!");
    431. }else {
    432. request.setAttribute("msg", "原密码错误!");
    433. }
    434. return "/admin/admin_reset.jsp";
    435. }
    436. /**
    437. * 管理员添加
    438. *
    439. * @return
    440. */
    441. @RequestMapping("/adminSave")
    442. public String adminSave(Admins admin, HttpServletRequest request,
    443. @RequestParam(required=false, defaultValue="1") int page) {
    444. if (adminService.isExist(admin.getUsername())) {
    445. request.setAttribute("msg", "用户名已存在!");
    446. return "/admin/admin_add.jsp";
    447. }
    448. adminService.add(admin);
    449. return "redirect:adminList?flag=5&page="+page;
    450. }
    451. /**
    452. * 管理员修改
    453. *
    454. * @return
    455. */
    456. @RequestMapping("/adminEdit")
    457. public String adminEdit(int id, HttpServletRequest request) {
    458. request.setAttribute("flag", 5);
    459. request.setAttribute("admin", adminService.get(id));
    460. return "/admin/admin_edit.jsp";
    461. }
    462. /**
    463. * 管理员更新
    464. *
    465. * @return
    466. */
    467. @RequestMapping("/adminUpdate")
    468. public String adminUpdate(Admins admin,
    469. @RequestParam(required=false, defaultValue="1") int page) {
    470. admin.setPassword(SafeUtil.encode(admin.getPassword()));
    471. adminService.update(admin);
    472. return "redirect:adminList?flag=5&page="+page;
    473. }
    474. /**
    475. * 管理员删除
    476. *
    477. * @return
    478. */
    479. @RequestMapping("/adminDelete")
    480. public String adminDelete(Admins admin,
    481. @RequestParam(required=false, defaultValue="1") int page) {
    482. adminService.delete(admin);
    483. return "redirect:adminList?flag=5&page="+page;
    484. }
    485. }
    1. package com.controller;
    2. import java.util.Objects;
    3. import javax.servlet.http.HttpServletRequest;
    4. import javax.servlet.http.HttpServletResponse;
    5. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    6. /**
    7. * 后台登录验证拦截器
    8. */
    9. public class AdminInterceptor extends HandlerInterceptorAdapter{
    10. /**
    11. * 检测登录状态
    12. */
    13. @Override
    14. public boolean preHandle(HttpServletRequest request,
    15. HttpServletResponse response, Object handler) throws Exception {
    16. String uri = request.getRequestURI();
    17. if(uri.contains("css/") || uri.contains("js/") || uri.contains("img/")
    18. || uri.contains("login") || uri.contains("logout")) {
    19. return true; // 不拦截路径
    20. }
    21. Object username = request.getSession().getAttribute("username");
    22. if (Objects.nonNull(username) && !username.toString().trim().isEmpty()) {
    23. return true; // 登录验证通过
    24. }
    25. response.sendRedirect("login.jsp");
    26. return false; // 其他情况一律拦截
    27. }
    28. }

    五,项目总结

    本文设计并实现的商城系统,通过互联网来实现电子商城这一新兴产业,电子商城主要依靠于计算机互联网技术。如果缺少了这个技术,就没有办法实现电子商城,如果要想完美实现,互联网技术就要有重大发展。这样,电子商城就带动了科技的巨大进步。用户就可以随时随地完成搜索商品、挑选商品、购买商品的全部过程。对于商家而言,网上购买商品有如下优点:不受场地限制、购买成本低、降低了风险、有利于更好的刺激用户去消费购买。对于消费者来说,网上购买商品有如下优点:价格便宜方便性、足不出户就能买到满意的商品。对商家而言,网上出售商品有如下优点:可以为商家节省了商店的租金、人力成本,最重要的是商品的价格也会大大降低。

  • 相关阅读:
    浅谈Spring中JDK动态代理和CGLIB动态代理
    学习笔记 HTML前端开发面试题 (重要) 【实时更新】
    防错与自働化的结合|优思学院・精益管理学会|CLMP
    Day06-filebeat,logstash多实例,pipline,ElasticStack项目架构梳理及实战案例
    CSP-J1 CSP-S2第1轮 初赛资料集(2022.09.09)
    2024字节跳动校招面试真题汇总及其解答(四)
    [Python] Python编程技巧总结[不断更新....]
    Win10 系统中用户环境变量和系统环境变量是什么作用和区别?
    2020 年 Java 面试题集锦(金九银十)
    镜像永久挂载
  • 原文地址:https://blog.csdn.net/whirlwind526/article/details/126251041