最近在学习通上扩展了一个小功能,面试技巧自我测试,也就是简单的让用户选择,然后给出测评结果的小功能,以下是一些总结:
1.明白为什么Android,Ios开发难找工作,因为很多公司都是用Android,Ios做个外壳,然后使用统一的js协议来做功能,这样的好处很明显,就是前端做一套H5就可以在网页,移动端等任意平台使用,缺点是js协议功能有限,且无法在Android和AppStore上线,但是可以通过官网扫码下载,如果自己推广不通过这些平台,完全没必要有专门的平台开发工程师。
2.js调用移动端终究还是移动端的核,所以页面跳转和H5很不一样,应用本身是一个大的堆栈,如果每次页面跳转都是新增,终究会造成内存溢出,所以在开发时要注重一个思路,所有页面的跳转最终在返回首页时,内存中只有一个页面。本次项目中的方法时,跳转页面时关闭当前页面,并通知上一个页面重新加载数据,上一个页面根据参数不同,返回不同的信息;
代码方面的提升
3.ajax提交json数据
前端
var answers = new Array();
answers.push(object)
var answerArrJson = JSON.stringify(answers);
var params = {
"answerArrJson": answerArrJson
}
后台springmvc直接获取参数answerArrJson
4.如果一个问题,前端后端都能解决,那么一定交给后台去解决
原因:因为如果前端解决,别人完全可以通过一个简单的URL修改自己的数据,这不是很尴尬吗。。
5.一个对象中有些数据不希望反回给别人,比如一个答案的正确与否,如何最简单的解决这个问题,通过fastjson自带的过滤器即可解决
在实体不需要的字段上添加如下注解,就可以在将对象序列化为json字符串时不添加被注解的字段
@JSONField(serialize = false)
6.mybits关联查询的一个优化
之前的处理方式:1使用关联查询,2在resultMap中添加collection并且写了关联对象的所有参数
优化解决方法:1.在子对象中添加根据父对象Id查询List的方法
2.在父对象中添加如下
<resultMap id="BaseResultMap" type="com.java.mbti.model.InterviewQuestion">
......此处省略对象字段
/*id为参数表示将父id作为参数传入
*oftype子对象路径
*select 方法所在路径
*/
<collection property="chooses" column="id" ofType="com.java.mbti.model.InterviewQuestionChoose" select="com.java.mbti.mapper.InterviewQuestionChooseMapper.getByQId"></collection>
</resultMap>
这样做关联查询优于之前的方法
7.静态查询添加缓存
service 添加@Cacheable(key = ,value = )
缓存关系为key->value->content
@SpringBootApplication启动注释上添加@EnableCaching
允许使用缓存
8.一个bug
不要for循环查数据库
有类似的需要可以转换为select * form table t where t.id in()
如果for连接数据库,并发量一大,连接池不够用,就会阻塞。