online-questioning 从零开始开发在线问答平台, 这是我模仿知乎做的一个贴吧类问答交流平台
项目github地址:https://github.com/guomzh/online-questioning , 欢迎各位star和与我交流
本文持续更新,未完待续…
使用到的技术栈:
1、spring/springboot
* intercepter拦截器实现登录权限控制
* javax.mali邮件服务,如有新评论时发邮件通知用户,注册时邮件验证
* ioc项目容器中对象管理,对容器中beans操作
* aop平台日志操作记录
* maven管理整个项目依赖
2、mybatis操作数据库主要业务数据
3、前端模板引擎freemarker ,渲染整个前端模板
4、算法设计:trie前缀树实现网站敏感词过滤
5、Redis实现异步队列,利用多线程实现异步事件处理,主要针对一些耗时操作,进行异步执行,如发邮件,评论后发站内私信通知等
6、使用 Redis 数据结构中的 set 集合实现用户对问题评论的点赞点踩功能
7、solr导入mysql数据,建立问题和标题文档库,利用ik-analyzer进行中文分词,用户可以进行站内全文搜索
开发通用的新模块流程:
1、数据库设计
2、Model:模型定义,与数据库相匹配
3、Dao层:数据操作
4、Service:服务包装
5、Controller:业务入口,数据交互
6、单元测试
注册模块:
- 用户名合法性检测(长度,敏感词,重复,特殊字符)
- 密码长度要求
- 密码salt加密,密码强度检查(md5库)
- 用户注册邮件激活
我在实现用户注册邮箱激活时自己的实现思路:
当用户提交注册表单信息时,把表单信息存到redis的hash数据结构中,同时产生一个对应的key,
这时发布一个异步事件,发送一封邮件,同时把这个key放到链接中发到用户的注册邮箱中,当用户
访问邮箱中这个链接时,在redis中查出这个key对应的注册信息,并存到数据库中完成注册
//信息存到redis中
String register_ticket=OnlineQUtil.MD5(email);
redisAdapter.hset(register_ticket,"email",email);
redisAdapter.hset(register_ticket,"username",username);
redisAdapter.hset(register_ticket,"password", password);
redisAdapter.expire(register_ticket,60*15);
redisAdapter.sadd("email",email);
//发布异步事件
eventProducer.fireEvent(new Event