第三章:过滤敏感词、帖子管理
过滤敏感词
根节点没有字符,到最末节点拼起来才是敏感字符,做一个标记在最后。
过滤符号
/*
* 过滤敏感词
* 参数:待过滤的文本, 返回过滤后的文本
* */
public String filter(String text){// 参数空值判断if(StringUtils.isBlank(text)){return null;}//依赖三个指针去过滤TrieNode tempNode=rootNode; //指针一int begin=0; //指针二int position=0; //指针三//变量记录最后的结果,变长StringBuilder sb=new StringBuilder();// 利用指针三做条件while (begin<text.length()){if(position<text.length()){//得到指针三的字符char c = text.charAt(position);//跳过符号(跳过敏感词汇里面有符号)if(isSymbol(c)){//若指针一属于根节点,将此符号计入结果,让指针2向下走if(tempNode==rootNode){begin++;sb.append(c);}//无论符号在开头或中间,指针3都向下走一步position++;//跳过符号下面的业务就不用处理了,到此为止continue;}//字符不是符号,检查下级节点//去下级节点tempNode = tempNode.getSubNode(c);//当下级没有节点,即以begin开头的字符串不是敏感词,将其添加到结果中if(tempNode==null){sb.append(text.charAt(begin));//指针2后移,且指针3与其保持一致begin++;position=begin;//重新指向根节点tempNode=rootNode;}else if(tempNode.isKeywordEnd()){//当当前节点是最后//发现敏感词,将beagin~position字符串替换掉sb.append(REPLACEMENT);//position下移,并且指针2与其保持一致position++;begin=position;//重新指向根节点tempNode=rootNode;}else {//检查下一个字符if(position<text.length()-1){position++;}}}}//将最后一批字符计入结果sb.append(text.substring(begin));return sb.toString();
}/*
* 判断是否为符号
* */
public boolean isSymbol(Character c){//利用工具,判断字符是不是普通的字符(abc。。),东亚文字范围中、日、韩文(0x2E80~0x9FFF)return !CharUtils.isAsciiAlphanumeric(c) && (c<0x2E80 || c>0x9FFF);
}
发布帖子
异步请求:当前页面不刷新,去访问服务器,返回结果提炼数据对网页进行局部刷新(提示,更改样式等)
完成前后端交互,data服务器返回的数据
插入帖子,从数据层开始。业务层保存帖子,同时过滤敏感词汇
帖子详情
数据:查看帖子方法
事务管理
不可重复读是对一条数据,幻读是对多个数据行数
编程式事务
显示评论
处理楼数显示,要考虑要分页,起始行+循环次数
复用前端代码:
添加评论
私信列表
未读消息和共几条会话。
0:未读 ,1:已读, 2:删除。 会话id(查询会话列表,将两个发送方和接收方id拼起来,将小的id放前面,大的放后面)
数据层:建立实体类
dao层:接口Messagemapper
五个方法:
1,查询这一页的方法(查询当前用户会话列表,针对每个会话只返回一条最新的私信)
2、查询总行数的方法
3、4 :点进去是详情的查询一页的方法及总行数的方法
5:查未读消息数量(查某个用户会话总的未读消息和查询用户与另外一个用户的未读消息数量)
from_id=1表示系统通知
业务层
直接调用mapper实现即可
发送私信
异步请求
当mybatis参数为集合时,用foreach循环
//修改消息状态(将未读变成已读)
int updateMessage(List<Integer> ids,int status);
<update id="updateMessage" >update message set status=#{status}where id in<foreach collection="ids" item="id" open="(" separator="," close=")">#{id}</foreach>
</update>
删除私信
(修改私信的状态为2)
业务层方法
dao
异步请求js
统一处理异常
@ModelAttributr:给model绑定统一的参数,给所有的controller用
@DataBinder:页面向服务器传参自动的参数转换,例将page转为Page类
@ControllerAdvice(annotations = Controller.class) //只有带有Controller注解的会被异常处理
public class ExceptionAdvice {private static final Logger logger= LoggerFactory.getLogger(ExceptionAdvice.class);@ExceptionHandler(Exception.class)public void handleException(Exception e, HttpServletRequest request, HttpServletResponse response) throws IOException {//记录日志logger.error("服务器异常:"+e.getMessage());for (StackTraceElement element : e.getStackTrace()) {//每一个对象记录了一条错误信息logger.error(element.toString());}//给浏览器一个响应,浏览器访问服务器可能希望返回页面,或者是异步请求希望返回json//需要判断请求是普通请求还是异步请求String xRequestedWith = request.getHeader("x-requested-with");//返回值等于xml,表示为异步请求(异步希望返回xml,普通希望返回http)if("XMLHttpRequest".equals(xRequestedWith)){//设置格式为字符串自己转为jsonresponse.setContentType("application/plain;charset=utf-8");PrintWriter writer=response.getWriter();writer.write(CommunityUtil.getJSIONString(1,"服务器异常!"));}else{//普通请求,重定向到错误页面response.sendRedirect(request.getContextPath()+"/error");}}
}
统一记录日志
控制器通知是控制器发生异常时记录日志,拦截器是针对controller控制层的,两个都不合适,
需求:对所有的service记日志。
记录日志是系统需求(业务方法和系统需求不要耦合在一起,以后修改系统需求时不方便)
没有接口时(service业务层)需要CGLib代理
@Around:是在方法前后都进行织入
需要有参数:连接点(代表程序织入的部位)。
@AfterThrowing:是在抛异常之后
@AfterReturning:是在方法返回之后
记录日志:用户(ip)XXX在某时刻使用了XX方法
用工具类获取用户ip
第三章:过滤敏感词、帖子管理相关推荐
- python过滤敏感词汇_利用Python正则表达式过滤敏感词的方法
利用Python正则表达式过滤敏感词的方法 问题描述:很多网站会对用户发帖内容进行一定的检查,并自动把敏感词修改为特定的字符. 技术要点: 1)Python正则表达式模块re的sub()函数: 2)在 ...
- 使用数据结构过滤敏感词算法
前缀树 名称:Tire.字典树.查找树 特点:查找效率高,消耗内存大 应用:字符串检索.词频统计.字符串排序等 敏感词过滤器 定义前缀树 package com.nowcoder.community. ...
- 过滤敏感词及正则表达式
过滤敏感词及正则表达式 使用正则表达式筛选出要过滤的词,使用replace替换掉. let textarea = document.querySelector("textarea" ...
- IA-32系统编程指南 - 第三章 保护模式的内存管理【1】
第三章 保护模式的内存管理[1] [作者:lion3875 原创文章 参考文献<Intel 64 and IA-32 system programming guide>] IA-32保护模 ...
- php过滤敏感词实例代码
php过滤敏感词实例代码 <?php /** * Created by JetBrains PhpStorm. * User: lsl * Date: 13-8-28 ...
- flex java 全局拦截_flex + java 过滤敏感词
过滤敏感词这个相对比较容易做到,网上也很多方法,看得比较多的一个方法就是:把所有的敏感词写入到一个properties文件中,程序启动时拼成一个正则表达式.这个也只是比较基础的敏感词过滤器,比较强大的 ...
- IA-32系统编程指南 - 第三章 保护模式的内存管理【2】
第三章 保护模式的内存管理[2] [作者:lion3875 原创文章 参考文献<Intel 64 and IA-32 system programming guide>] ...
- python过滤敏感词记录
简述: 关于敏感词过滤可以看成是一种文本反垃圾算法,例如 题目:敏感词文本文件 filtered_words.txt,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成 ...
- ios 弹幕过滤敏感词方案对比和性能测试
在看视频的过程中, 很多用户会发弹幕, 当前用户可以设置过滤敏感词和敏感用户, 设置后, 命中敏感词和敏感用户的弹幕就不会显示. 敏感词和敏感用户的设置上限为各100. 由客户端进行过滤, 不区分大 ...
最新文章
- 我的程序员生活的前六年,是这样度过的!
- 自已动手写的轮播图插件,功能不断增加中,可以下载
- mysql数据库、表、索引、触发器
- 【BZOJ 4170】 4170: 极光 (CDQ分治)
- Win7系统电脑休眠后无法唤醒的解决方法
- 【转载】图片 CSS:怎样才能 “响应式 + 固定宽高比例”?
- java排序算法 sort_Java排序算法之SleepSort排序示例
- 为什么应尽量从列表的尾部进行元素的增加与删除操作?
- 推桌子nyoj 220hdu1050 (贪心算法系列)
- html中字体都可以设置哪些,html中设置字体的属性有哪些
- Windows 10 如何修改桌面路径位置
- 编程语言【JAVA】编程(4)---摇色子
- 证明N={1,2,...,n,...}有最大元 黄小宁
- pulsar client jar包选择-shaded 还是original
- 从《我要投资》,看藏在“对立面”里的创业正解
- DP(最长上升子序列)——腾讯校招题:逛街
- Matlab显示图像三维信息
- 购物网站商城系统,购物网站毕业设计,B2C网上购物系统毕业设计
- linux napi
- Iterator_trait总结
热门文章
- 使用C++实现MySQL数据库编程
- 陈莉君老师写的中断絮说(经典+幽默)
- 计算机自适应的应用领域,计算机自适应题库的建立
- 记录贴:RuntimeError: version_ <= kMaxSupportedFileFormatVersion INTERNAL ASSERT FAILED at /pytorch/caff
- c语言复数的运算实验报告,C语言复数的运算实验报告.doc
- Java表达式运算工具类
- elementUI table多级表头固定列
- 《统计学》黄良文—思维导图
- 正版授权|bigmp4 Ai人工智能视频无损放大
- Android studio 中删除git 版本控制