当前位置: 首页 > 编程日记 > 正文

Java项目:个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取:博客首页 "资源" 里下载!

一、项目简述

本系统功能包括:文章展示、热门文章、文章分类、标签云用户登录评论、匿名评论用户留言、匿名留言评论管理、文章发布、文章管理文章数据统计等等.


二、项目运行

环境配置: Jdkl . 8 + Tomcats . 5 + Mysql + HBuilderX ( Webstorm 也行) + Eclispe ( IntelliJ 10 以,三 clispe , MyEclispe , Sts 都支持)。


项目技术: Springboot + Maven + Mybatis + Vue + Redis 组成, BIS 模式+ M aven 等等,附带支付宝沙箱环境以及支付环节代码。

处理管理员界面请求:

/*** 处理管理员界面请求**/
@Controller
@RequestMapping("/admin")
public class AdminController {@Resourceprivate AdminUserService adminUserService;@Resourceprivate BlogService blogService;@Resourceprivate CategoryService categoryService;@Resourceprivate TagService tagService;@Resourceprivate CommentService commentService;/*** 处理登录请求** @return java.lang.String*/@GetMapping({"/login"})public String login() {return "admin/login";}/*** 主页** @param request http请求* @return java.lang.String*/@GetMapping({"", "/", "/index", "/index.html"})public String index(HttpServletRequest request) {request.setAttribute("path", "index");request.setAttribute("categoryCount", categoryService.getTotalCategories());request.setAttribute("blogCount", blogService.getTotalBlogs());request.setAttribute("tagCount", tagService.getTotalTags());request.setAttribute("commentCount", commentService.getTotalComments());return "admin/index";}/*** 登录界面** @param userName   用户名* @param password   密码* @param verifyCode 验证码* @param session    session* @return java.lang.String*/@PostMapping(value = "/login")public String login(@RequestParam("userName") String userName,@RequestParam("password") String password,@RequestParam("verifyCode") String verifyCode,HttpSession session) {if (StringUtils.isEmpty(verifyCode)) {session.setAttribute("errorMsg", "验证码不能为空");return "admin/login";}if (StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)) {session.setAttribute("errorMsg", "用户名或密码不能为空");return "admin/login";}String kaptchaCode = session.getAttribute("verifyCode") + "";if (StringUtils.isEmpty(kaptchaCode) || !verifyCode.equals(kaptchaCode)) {session.setAttribute("errorMsg", "验证码错误");return "admin/login";}AdminUser adminUser = adminUserService.login(userName, password);if (adminUser != null) {session.setAttribute("loginUser", adminUser.getNickName());session.setAttribute("loginUserId", adminUser.getAdminUserId());//session过期时间设置为7200秒 即两小时//session.setMaxInactiveInterval(60 * 60 * 2);return "redirect:/admin/index";} else {session.setAttribute("errorMsg", "登陆失败");return "admin/login";}}/*** 修改个人信息** @param request http请求* @return java.lang.String*/@GetMapping("/profile")public String profile(HttpServletRequest request) {Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");AdminUser adminUser = adminUserService.getUserDetailById(loginUserId);if (adminUser == null) {return "admin/login";}request.setAttribute("path", "profile");request.setAttribute("loginUserName", adminUser.getLoginUserName());request.setAttribute("nickName", adminUser.getNickName());return "admin/profile";}/*** 修改密码** @param request          http请求* @param originalPassword 原始密码* @param newPassword      新密码* @return java.lang.String*/@PostMapping("/profile/password")@ResponseBodypublic String passwordUpdate(HttpServletRequest request, @RequestParam("originalPassword") String originalPassword,@RequestParam("newPassword") String newPassword) {if (StringUtils.isEmpty(originalPassword) || StringUtils.isEmpty(newPassword)) {return "参数不能为空";}Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");if (adminUserService.updatePassword(loginUserId, originalPassword, newPassword)) {//修改成功后清空session中的数据,前端控制跳转至登录页request.getSession().removeAttribute("loginUserId");request.getSession().removeAttribute("loginUser");request.getSession().removeAttribute("errorMsg");return "success";} else {return "修改失败";}}/*** 修改登录名,昵称** @param request       http请求* @param loginUserName 登录名* @param nickName      昵称* @return java.lang.String*/@PostMapping("/profile/name")@ResponseBodypublic String nameUpdate(HttpServletRequest request, @RequestParam("loginUserName") String loginUserName,@RequestParam("nickName") String nickName) {if (StringUtils.isEmpty(loginUserName) || StringUtils.isEmpty(nickName)) {return "参数不能为空";}Integer loginUserId = (int) request.getSession().getAttribute("loginUserId");if (adminUserService.updateName(loginUserId, loginUserName, nickName)) {return "success";} else {return "修改失败";}}/*** 管理员退出** @param request http请求* @return java.lang.String*/@GetMapping("/logout")public String logout(HttpServletRequest request) {request.getSession().removeAttribute("loginUserId");request.getSession().removeAttribute("loginUser");request.getSession().removeAttribute("errorMsg");return "admin/login";}
}

博客列表控制器:

/*** 博客列表控制器*/
@Controller
@RequestMapping("/admin")
public class BlogController {@Resourceprivate BlogService blogService;@Resourceprivate CategoryService categoryService;/*** 博客列表** @param params 参数* @return com.hbu.myblog.util.Result*/@GetMapping("/blogs/list")@ResponseBodypublic Result list(@RequestParam Map<String, Object> params) {if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {return ResultGenerator.genFailResult("参数异常!");}PageQueryUtil pageUtil = new PageQueryUtil(params);return ResultGenerator.genSuccessResult(blogService.getBlogsPage(pageUtil));}/*** @param request http请求* @return java.lang.String*/@GetMapping("/blogs")public String list(HttpServletRequest request) {request.setAttribute("path", "blogs");return "admin/blog";}/*** @param request http请求* @return java.lang.String*/@GetMapping("/blogs/edit")public String edit(HttpServletRequest request) {request.setAttribute("path", "edit");request.setAttribute("categories", categoryService.getAllCategories());return "admin/edit";}/*** @param request http请求* @param blogId  博客id* @return java.lang.String*/@GetMapping("/blogs/edit/{blogId}")public String edit(HttpServletRequest request, @PathVariable("blogId") Long blogId) {request.setAttribute("path", "edit");Blog blog = blogService.getBlogById(blogId);if (blog == null) {return "error/error_400";}request.setAttribute("blog", blog);request.setAttribute("categories", categoryService.getAllCategories());return "admin/edit";}/*** 添加文章** @param blogTitle      文章标题* @param blogSummary    摘要* @param blogCategoryId 类别* @param blogTags       标签* @param blogContent    内容* @param blogStatus     草稿,发布* @param enableComment  可否评论* @return com.hbu.myblog.util.Result*/@PostMapping("/blogs/save")@ResponseBodypublic Result save(@RequestParam("blogTitle") String blogTitle,@RequestParam(name = "blogSummary", required = false) String blogSummary,@RequestParam("blogCategoryId") Integer blogCategoryId,@RequestParam("blogTags") String blogTags,@RequestParam("blogContent") String blogContent,@RequestParam("blogStatus") Byte blogStatus,@RequestParam("enableComment") Byte enableComment) {if (StringUtils.isEmpty(blogTitle)) {return ResultGenerator.genFailResult("请输入文章标题");}if (blogTitle.trim().length() > 150) {return ResultGenerator.genFailResult("标题过长");}if (StringUtils.isEmpty(blogTags)) {return ResultGenerator.genFailResult("请输入文章标签");}if (blogTags.trim().length() > 150) {return ResultGenerator.genFailResult("标签过长");}if (blogSummary.trim().length() > 375) {return ResultGenerator.genFailResult("摘要过长");}if (StringUtils.isEmpty(blogContent)) {return ResultGenerator.genFailResult("请输入文章内容");}if (blogTags.trim().length() > 100000) {return ResultGenerator.genFailResult("文章内容过长");}Blog blog = new Blog();blog.setBlogTitle(blogTitle);blog.setBlogSummary(blogSummary);blog.setBlogCategoryId(blogCategoryId);blog.setBlogTags(blogTags);blog.setBlogContent(blogContent);blog.setBlogStatus(blogStatus);blog.setEnableComment(enableComment);String saveBlogResult = blogService.saveBlog(blog);if ("success".equals(saveBlogResult)) {return ResultGenerator.genSuccessResult("添加成功");} else {return ResultGenerator.genFailResult(saveBlogResult);}}/*** 修改文章** @param blogId         文章ID* @param blogTitle      文章标题* @param blogSummary    摘要* @param blogCategoryId 类别* @param blogTags       标签* @param blogContent    内容* @param blogStatus     草稿,发布* @param enableComment  可否评论* @return com.hbu.myblog.util.Result*/@PostMapping("/blogs/update")@ResponseBodypublic Result update(@RequestParam("blogId") Long blogId,@RequestParam("blogTitle") String blogTitle,@RequestParam(name = "blogSummary", required = false) String blogSummary,@RequestParam("blogCategoryId") Integer blogCategoryId,@RequestParam("blogTags") String blogTags,@RequestParam("blogContent") String blogContent,@RequestParam("blogStatus") Byte blogStatus,@RequestParam("enableComment") Byte enableComment) {if (StringUtils.isEmpty(blogTitle)) {return ResultGenerator.genFailResult("请输入文章标题");}if (blogTitle.trim().length() > 150) {return ResultGenerator.genFailResult("标题过长");}if (StringUtils.isEmpty(blogTags)) {return ResultGenerator.genFailResult("请输入文章标签");}if (blogTags.trim().length() > 150) {return ResultGenerator.genFailResult("标签过长");}if (blogSummary.trim().length() > 375) {return ResultGenerator.genFailResult("摘要过长");}if (StringUtils.isEmpty(blogContent)) {return ResultGenerator.genFailResult("请输入文章内容");}if (blogTags.trim().length() > 100000) {return ResultGenerator.genFailResult("文章内容过长");}Blog blog = new Blog();blog.setBlogId(blogId);blog.setBlogTitle(blogTitle);blog.setBlogSummary(blogSummary);blog.setBlogCategoryId(blogCategoryId);blog.setBlogTags(blogTags);blog.setBlogContent(blogContent);blog.setBlogStatus(blogStatus);blog.setEnableComment(enableComment);String updateBlogResult = blogService.updateBlog(blog);if ("success".equals(updateBlogResult)) {return ResultGenerator.genSuccessResult("修改成功");} else {return ResultGenerator.genFailResult(updateBlogResult);}}/*** 根据id的之删除文章** @param ids 要删除文章id列表* @return com.hbu.myblog.util.Result*/@PostMapping("/blogs/delete")@ResponseBodypublic Result delete(@RequestBody Integer[] ids) {if (ids.length < 1) {return ResultGenerator.genFailResult("参数异常!");}if (blogService.deleteBatch(ids)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("删除失败");}}}

品类信息控制层:

/*** 品类信息控制层*/
@Controller
@RequestMapping("/admin")
public class CategoryController {@Resourceprivate CategoryService categoryService;/*** @param request* @return java.lang.String*/@GetMapping("/categories")public String categoryPage(HttpServletRequest request) {request.setAttribute("path", "categories");return "admin/category";}/*** @param params* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/list", method = RequestMethod.GET)@ResponseBodypublic Result list(@RequestParam Map<String, Object> params) {if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {return ResultGenerator.genFailResult("参数异常!");}PageQueryUtil pageUtil = new PageQueryUtil(params);return ResultGenerator.genSuccessResult(categoryService.getBlogCategoryPage(pageUtil));}/*** @param categoryName* @param categoryIcon* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/save", method = RequestMethod.POST)@ResponseBodypublic Result save(@RequestParam("categoryName") String categoryName,@RequestParam("categoryIcon") String categoryIcon) {if (StringUtils.isEmpty(categoryName)) {return ResultGenerator.genFailResult("请输入分类名称!");}if (StringUtils.isEmpty(categoryIcon)) {return ResultGenerator.genFailResult("请选择分类图标!");}if (categoryService.saveCategory(categoryName, categoryIcon)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("分类名称重复");}}/*** @param categoryId* @param categoryName* @param categoryIcon* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/update", method = RequestMethod.POST)@ResponseBodypublic Result update(@RequestParam("categoryId") Integer categoryId,@RequestParam("categoryName") String categoryName,@RequestParam("categoryIcon") String categoryIcon) {if (StringUtils.isEmpty(categoryName)) {return ResultGenerator.genFailResult("请输入分类名称!");}if (StringUtils.isEmpty(categoryIcon)) {return ResultGenerator.genFailResult("请选择分类图标!");}if (categoryService.updateCategory(categoryId, categoryName, categoryIcon)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("分类名称重复");}}/*** @param ids* @return com.hbu.myblog.util.Result*/@RequestMapping(value = "/categories/delete", method = RequestMethod.POST)@ResponseBodypublic Result delete(@RequestBody Integer[] ids) {if (ids.length < 1) {return ResultGenerator.genFailResult("参数异常!");}if (categoryService.deleteBatch(ids)) {return ResultGenerator.genSuccessResult();} else {return ResultGenerator.genFailResult("删除失败");}}}

源码获取:博客首页 "资源" 里下载!

相关文章:

第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器

第十九章——使用资源调控器管理资源&#xff08;2&#xff09;——使用T-SQL配置资源调控器 原文:第十九章——使用资源调控器管理资源&#xff08;2&#xff09;——使用T-SQL配置资源调控器 前言&#xff1a;在前一章已经演示了如何使用SSMS来配置资源调控器。但是作为DBA&a…

Android_开源框架_Volley实例

2019独角兽企业重金招聘Python工程师标准>>> 1.自定义相关类在 Android_开源框架_Volley(Google IO 2013)源代码及内部实现过程分析一文中&#xff0c;简单概述了Volley框架内部实现过程。如想理解彻底应该熟悉 android多线程通信机制( Android_Thread多线程_Handle…

maven的配置-2019-4-13

一.Maven的优点 1. 依赖管理 jar 包管理 2.一键构建 &#xff08;编译-----测试------打包-----安装-----部署 &#xff09; 什么是项目构建&#xff1f; 指的是项目从编译-----测试------打包-----安装-----部署 整个过程都交给maven进行管理&#xff0c;这个过程称为构建 一…

WiredTiger引擎编译 及 LT_PREREQ(2.2.6)问题解决

近期需要为异构引擎做准备&#xff0c; wiredtiger 以其优异的性能(B-tree和LSM-tree都支持)和稳定性(Mongodb的默认存储引擎) 被我们备选为异构引擎里的一个子引擎&#xff0c;后续将深入wiredtiger 引擎原理。这里简单记录一下Wiredtiger 存储引擎的编译记录。 Environment …

Java项目:员工管理系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a;分为前端翻后端部分&#xff0c;包括用户&#xff0c;区分晋通用户以及誉里员用户&#xff0c;包括首页展示&#xff0c;部门管理&#xff0c;人事管理&#xff0c…

缺陷重点内容分析

1.缺陷优先级 序号优先级描述1低暂时不影响继续测试&#xff0c;可以在方便时解决2中部分功能测试无法继续测试&#xff1b;需要优先解决3高测试暂停&#xff0c;无法进行&#xff0c;必须立即解决2.缺陷的状态&#xff08;图片来自云测视频&#xff09; 3.缺陷生命周期与管理流…

关于node.js的误会

昨天写了篇博客&#xff0c;介绍了一下我对node.js的第一次亲密接触后的感受&#xff0c;以为node.js很小众&#xff0c;出乎我意料很多人感兴趣&#xff0c;并且对博客中的细节问题做了评论&#xff0c;最多的是围绕node.js的异步与单线程展开的&#xff0c;当然还有很多关于n…

文本相关CSS

文本相关CSS 属性 word-breakoverflow-wrap(word-wrap)white-spacetext-overflowtext-wrap(目前主流浏览器都不支持)应用 一般断行需求实现文本不换行&#xff0c;以省略号表示超出的部分参考资料属性 word-break 作用&#xff1a;指定非CJK(中日韩)文本的断行规则。&#xff0…

Rocksdb 的优秀代码(三)-- 工业级 线程池实现分享

文章目录前言1. Rocksdb线程池概览2. Rocksdb 线程池实现2.1 基本数据结构2.2 线程池创建2.3 线程池 调度线程执行2.4 线程池销毁线程2.5 线程池优先级调度2.6 动态调整线程池 线程数目上限3. 总结前言 Rocksdb 作为一个第三方库的形态嵌入到各个存储系统之中存储元数据&#…

Java项目:网上电商项目(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 一款基于SpringbootVue的电商项目&#xff0c;前后端分离项目&#xff0c;前台后台都有&#xff0c;前台商品展示购买&#xff0c;购物车分类&#xff0c;订 单查…

3月7日 ArrayList集合

ArrayList与数组的区别&#xff1a; 数组是连续的、同一类型数据的一块区域&#xff0c;而集合可以是不连续的、多种数据类型的。 1.ArrayList ArrayList al new ArrayList(); al.Add(3); al.Add(5.09); al.Add("gfdg"); al.Inse…

什么时候出生好?

从年龄来说&#xff0c;女人头一胎的怀孕时间最好在35岁以前&#xff0c;因为过了35岁后不孕和头胎生育缺陷的比例会大幅度升高。那么&#xff0c;从孩子的角度&#xff0c;什么时候出生好&#xff1f;很多人不考虑这个问题&#xff0c;能不能怀上还难说那。迷信的人则追求出生…

数据库搜索与索引

索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她&#xff0c;则与在表中搜索所有的行相比&#xff0c;索引有助于更快地获取信息。 索引的一个主要目的就是加快检索表中数据&#x…

Clion 远程开发 配置

文章目录1. 增加远端服务工具2. 配置远端服务器3. 配置编译选项4. 设置远端开发路径Clion作为C/C语言友好的IDE&#xff0c;除了高效的代码索引 以及 基本的本地开发 能力之外还需要有远程开发能力&#xff0c;即我们工作中的代码处于远端linux服务器之上&#xff0c;通过在本地…

Java项目:朴素风个人博客系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 基于vue Springboo痼J后端分离项目个人博客系统&#xff0c;注册 登录&#xff0c;首页展示&#xff0c;喜爰图书展示&#xff0c;后台图书维护&#xff0c;个人…

NodeJS+Mongodb+Express做CMS博客系统

楼主正在用业余时间开发中…… &#xff0c;目前的版本仅支持会员系统&#xff0c;尝鲜一下吧~ hi-blog 一个 nodejsexpressmongodb 的 cms 系统怎么启动 默认你已经安装了 mongodb &#xff1b;那么你得这样操作&#xff1a;安装项目 -> 初始化管理员 -> 运行项目 1、请…

Piranha实验总结

操作系统&#xff1a;rhel5.8分别在DirectorMaster和DirectorBackup上部署浮动资源(VIP IPVS策略)测试2个Director在DR模式下是否都可以正常工作。测试完成后都撤掉浮动资源。DirectorMaster[rootlocalhost ~]#yum install piranha[rootlocalhost ~]#piranha-passwdNew Passwor…

虚IP切换原理

高可用性HA&#xff08;High Availability&#xff09;指的是通过尽量缩短因日常维护操作&#xff08;计划&#xff09;和突发的系统崩溃&#xff08;非计划&#xff09;所导致的停机时间&#xff0c;以提高系统和应用的可用性。HA系统是目前企业防止核心计算机系统因故障停机的…

vim 键盘宏操作 -- 大道至简

最近利用vim做一些文本处理时 发现vim 支持的键盘宏是一个好东西啊&#xff0c;高效优雅得处理大量需要重复性操作的文本&#xff0c;让人爱不释手&#xff01;&#xff01;&#xff01; 希望接下来对键盘宏的分享能够实际帮助到大家。 后文中描述的一些vim操作会汇集成指令字…

Java项目:家居购物商城系统(java+html+jdbc+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a; Java Web精品项目源码&#xff0c;家居商城分类展示&#xff0c;商品展示&#xff0c; 商品下单&#xff0c;购物车&#xff0c;个人中心&#xff0c;后台管理&#xff0c;用…

leetcode:Search in Rotated Sorted Array

题目要求&#xff1a; Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may a…

解决Debian-7.1下Chrome浏览器字体难看的问题

首先在 Advance Setting 的 font 标签页下做如下配置&#xff1a; 然后在用户目录下创建 .fonts.conf 文件&#xff0c;内容如下&#xff1a; <?xml version1.0?> <!DOCTYPE fontconfig SYSTEM fonts.dtd> <fontconfig><match target"font"&g…

HDU.4903.The only survival(组合 计数)

题目链接 惊了 \(Description\) 给定\(n,k,L\)&#xff0c;表示&#xff0c;有一张\(n\)个点的无向完全图&#xff0c;每条边的边权在\([1,L]\)之间。求有多少张无向完全图满足&#xff0c;\(1\)到\(n\)的最短路为\(k\)。\(n,k\leq 12,\ L\leq10^9\)。 \(Solution\) 考虑暴力&a…

Rocksdb 写入数据后 GetApproximateSizes 获取的大小竟然为0?

项目开发中需要从引擎 获取一定范围的数据大小&#xff0c;用作打点上报&#xff0c;测试过程中竟然发现写入了一部分数据之后通过GetApproximateSizes 获取写入的key的范围时取出来的数据大小竟然为0。。。难道发现了一个bug?&#xff08;欣喜&#xff09; 因为写入的数据是…

Java项目:在线婚纱摄影预定系统(java+javaweb+SSM+springboot+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a; 前后用户的登录注册&#xff0c;婚纱照片分类&#xff0c;查看&#xff0c;摄影师预 订&#xff0c;后台订单管理&#xff0c;图片管理等等。 二、项目运行 环境配置&am…

Linux Terminal 控制终端的使用

1. Open new Terminal&#xff1a;Ctrl Alt T 或者 Ctrl Shift N 2. Open Tab&#xff1a;Ctrl Shift T 3. Close Tab&#xff1a;Ctrl Shift W 4. Close Window&#xff1a;Ctrl Shift Q 5. Copy : Ctrl Shift C 6. Paste: Ctrl Shift V 7. Full Screen: F11 8.…

如何防止代码腐烂

http://blog.jobbole.com/5643/ 很多团队都有这个问题&#xff0c;一个项目的代码本来开始设计得好好的&#xff0c;一段时间以后&#xff0c;代码就会变得难以理解&#xff0c;难以维护&#xff0c;难以修改。为什么&#xff1f;我一直在思考这个问题。 让我们先看一个人的情况…

CORS在Spring中的实现

CORS: 通常情况下浏览器禁止AJAX从外部获取资源&#xff0c;因此就衍生了CORS这一标准体系&#xff0c;来实现跨域请求。 CORS是一个W3C标准&#xff0c;全称是"跨域资源共享"&#xff08;Cross-origin resource sharing&#xff09;。它允许浏览器向跨源(协议 域名…

从BloomFilter到Counter BloomFilter

文章目录前言1. Traditional BloomFilter2. Counter BloomFilter本文traditional bloomfilter 和 counter bloomfilter的C实现 均已上传至&#xff1a; https://github.com/BaronStack/BloomFilter 前言 Bloomfilter 是一个老生常谈的数据结构&#xff0c;应用在存储领域的各…

进程、线程、多线程相关总结

进程、线程、多线程相关总结 一、说说概念 1、进程&#xff08;process&#xff09; 狭义定义&#xff1a;进程就是一段程序的执行过程。 广义定义&#xff1a;进程是一个程序关于某个数据集合的一次运行。它是操作系统动态执行的基本单元&#xff0c;在传统的操作系统中&#…