项目总结——志颜
写在前面
首先是感谢FwF组织引导我去学习更多技术,从一开始对基础知识的引导,
到后面的项目实战都是很好的模式。其次是感谢一下学长们帮我解决的大大小小的bug、
cer头cer脑的问题。光是三次面试,都已经学到了很多。还有就是一直以来对我和我们团队的照顾,
真的受益良多。其次是感谢一下队友,这一个多月来,可能有些地方有分歧,但最后总能想到一起,
解决问题。
项目中遇到的难题
- 协作问题
- 如何协作?
- 前后端分离怎么实现?
- Git怎么使用?
- 接口文档如何写?
一开始拿到项目的时候,看了一下,感觉不简单,但是吧,
咱们人类就是有一种会把问题拆分的思想。在我看来,应该先解决协作的问题。
就先跟学长们了解了个大概,然后检索了一下知识,就把git相关的基本操作学习了。
更何况IDEA集成的工具很好用,然后晚上博哥忙完了,大半夜还给我们讲了一些东西。
到这里,关于协作,有了一个基本的认识。(够用了,慢慢完善嘛)
- 数据库的设计
- 都该有什么表?
- 每个功能对应表的字段该有哪些?
- 表和表之间的联系?
- 转发如何设计?
- 楼中楼如何设计
这应该是项目中遇到的第二个难题。因为我是相信,如果表设计得好,
那么后面开始写功能的业务逻辑,会轻松很多。
然后和小伙伴又花了一天多的时间,把这个初期的表给设计好了。
- 跨域与Cookie-Session问题

因为没有任何前后端分离的经验,一开始把登录注册的接口给出来了,
前端测试的时候,老是报跨域问题。后面查了一下,简
单的配置了一下,确实可以请求了,紧接着就是“null是个null”的session问题
<mvc:cors>
<mvc:mapping path="/**"
allowed-origins="http://172.20.10.4:8080,http://172.20.10.4:8081"
allowed-methods="GET,POST"
allow-credentials="true" // 若是跨域请求,想要前端发送cooki必须的,还有就是上面的地址不能使用通配符*
allowed-headers="*"/>
</mvc:cors>
因为学的东西还很少,还是按以前的方法,基于session来做登录验证、
或者说多次请求间的数据共享。这里先吐槽一下postman等接口测试工具的一些“小Bug”,
在上面测试,不管什么情况他会自动携带cookie。所以基本上在上面测试,就不会出什么问题。
然后就是为什么cookie存过去了,发不过来。当时也挺麻的。又发现了一个问题就是。

和google相同内核的浏览器,在高版本后。为了安全问题,goole发现是一个跨域请求,他会给
Set-Cookie标头的属性SameSite设置成“SameSite=Lax”导致不能把cookie携带上。
检索了一下解决方案,要么就是自己手动给浏览器设置一下浏览器的设置。要么换别的浏览器,
还有一种最优解决方案就是,使用https协议。但是后面和学长交流了一下,
决定还是换浏览器测试吧!因为目的是为了学习东西。
- 如何实现转发功能
一开始设计表的时候,想的是,多弄出一张表来记录转发的东西,但是后面我们发现,
不管是不是转发的动态,都长一个样,就根据这个往下面想。
我们是给动态表设计了一个forward_dynamic_id,用来标识是否是转发的动态,
默认值是0,不是转发类型的动态。若是转发,那么将forward_dynamicId
设置为被转发动态的id,到时候返回数据,根据这个id,将被转发微博的信息也返回。
- 如何实现回复楼中楼
一开始的困惑点是,若只是标识原先的所回复评论的id,他没法加载到对应的楼的下面。
我们在评论表里设计了两个字段 reply_id,用来标识是否是回复的评论。默认是0:不是回复
若是回复,则reply_id是被回复评论的id,另一字段floor_id , 用来标识评论的所在楼层,
默认是0:一级评论,若是二级评论,那么floor_id是所在楼层的一级评论的id。
- 多图片的编辑问题
一开始也是被困惑了好久,若用户没有修改图片,或者只有一张图片,都好修改,因为有唯一
标识。但是遇到点问题就是,若用户编辑了部分,或者删除了部分,或者新增了几张,都比较
不好处理,在博哥的引导下,和队友,最终解决了这个问题。
前端在传图片的时候,多传入一个数组,这个数组里存入的是原先图片所在位置是否有变动
,若有变动,那么就将其设置为1,没有就是0,后台通过这个数组,
就能将多图片编辑的问题解决了。
- 怎么将前端传过来的文本切割成话题
一开始切割的时候,感觉没多复杂,但是后面,发现,切割后的话题,老师出很多bug。
比如,有些话题匹配不成功。
先找出上话题符号#所在位置的索引,存入一个集合中。然后遍历这个集合,比较这个集合相邻
元素的值,若差值为1,说明是两个##挨在一起,然后遍历的索引+1,否则+2.
// 用于切割文本信息的话题
public String getTopicStr(String content) {
List<Integer> indexStr = new ArrayList<>();
int first = content.indexOf("#");
while (first != -1) { // 记录索引的集合
indexStr.add(first);
first = content.indexOf("#", first + 1);
}
// 返回的结果字符串
StringBuilder res = new StringBuilder();
if (indexStr.size() >= 2) { // >= 两个 # 才进行切割
int index = 0;
while (index < indexStr.size() - 1) {
if (indexStr.get(index + 1) - indexStr.get(index) == 1) {
index++; // 差值为1 只加 1
} else {
String objStr = content.substring(indexStr.get(index), indexStr.get(++index) + 1);
res.append(objStr).append(",");
index += 2; // 差值不为1 加 2 ,并且将文本切割。
}
}
// 将最后一个,给清除掉
if (res.length() > 1) res.replace(res.length() - 1, res.length(), "");
String result = String.valueOf(res);
return result.equals("") ? null : result;
} else {
return null;
}
}
- 综述
以上所述的就是这个项目中,我认为是遇到的主要的问题,当然,
从零开始做过来,还是遇到蛮多问题的。
可优化的地方
说到这个,我觉得真的有很多,说几个比较大的点吧!
- 做登录状态验证
现在对token已经有一点了解了,这次体会到了开发中,session的很多问题了。下次绝对
不使用这种方法做了。
- 返回的数据
这次项目,写到后面,发现写的接口文档,有蛮多地方。很多数据可以优化,特别是自己
了解了一点vue之后。下一次开发尽量采用Pojo的模式来交接数据。
- 话题的问题
学长提到的,想要用两个##,夹着一些东西,当做一个文字符号使用。当时没想到这个。
我是根据微博那个展示话题的做的。 如果要实现这个,我目前还没多少思路,可能就会采用
比较笨的方法,比如把常用的 两个##的颜文字收集过来….
- 代码规范
这次做项目,很多命名,忘记和伙伴沟通了,导致了代码的命名风格不太一样,下一次做项目,
会尽量按照阿里巴巴开发手册的规范和队友沟通。
项目总结
再一次感谢大家的照顾。还有就是说说咱们这个团队吧,我认为团队就应该发挥出
1 + 1 > 2 的效益,从一开始的建表,到现在的项目总结,队友都很优秀,
会有很多很好的想法,并且逻辑也能快速理通。大家刚好相辅相成,很幸运和你们
一起做了这么久的项目。
对于自己来说的话,让我对所学的技术,和弱弱的半真实开发,有了更深刻的理解,
也让我对很多新的技术,未学习的技术,有了更多的渴望。还有就是自己调试的能力
在不断的进步。但与此同时,发现了很多方向以外技术的重要性,例如数据结构和算法、
网络。 也发现了自己对以前的知识有很多的理解是错误的,还需要改进。
写在后面
接口文档:接口文档点我
github地址:查看代码到oldDev分支

