博客系统面试题

1、为什么做这个项目?

当时学习完mybatis、spring、springmvc等知识后,希望去用这些框架整合在一起写一个项目,巩固所学的知识,将所学的这些知识应用到真正的开发中去。

2、项目介绍

博客系统使用SSM框架写的,数据库使用的是MySQL,共有五个页面,分别是 登陆页面、写博客页面、博客列表页、博客详情页、后台管理页面,功能就是对博客的增删改查,写博客时使用的是百度提供的UEditor富文本编辑器。
数据库方面共有五张表:

  1. 用户表(t_manager):账号id、账号名称、账号密码
  2. 文章表(t_article):文章id、分类id、标题、内容、文章简介、状态、作者、发表时间、浏览量。
  3. 博客/标签对应表(t_article_tag):文章id、标签id
  4. 标签表(t_tag):标签id、标签名称
  5. 类别表(t_category):类别id、类别名称、图片样式、别名、排序

3、细节怎么实现?

1、博客内容一般很大,在数据库中用String类型存放不了,怎么处理?

MySQL底层针对博客有个blob类型字段,有tinyblob、blob、mediumblob、logblob,最大的内存限制可达到4G。

2、项目中的数据加密了吗?

加密了,在前端写完博客点击提交以后,会将所有的数据通过json格式传输到后台,所以在后台接收对象的时候需要使用JsonUtil.fromJson()方法将JSON数据解析为对象。保存文章使用ajax来提交数据的,encodeURI方法会将前端的数据按照指定的编码形式编码,所以在后台接收这些数据时,使用了URLDecoder.decode()方法来将接收到的各个参数进行解码,解码成utf-8的编码格式。

3、不登陆也可以直接写博客吗?

不登陆是可以直接通过URL进入写博客页面的,但是无法提交博客。在点击提交按钮后,后台会判断此时有没有登录,也就是去session中获取登录信息,有的话可以提交成功,如果获取的登录信息为空的话会重定向到登陆页面。
在每次登陆后,会通过调用session.setAttribute()方法记录登录的缓存信息。

4、登录页面输入密码时,密码隐藏了吗?

密码加密了,在输入密码时看不到密码,看到的是小点点,这个取决于type这个属性的参数,再导入jquery的js文件后,在span标签中有一个type属性,参数填text时,显示的是文本,也就是能看到密码;参数为password时输入就是图片,隐藏密码与否就是通过这个参数实现的。

5、系统可以存储图片吗?

当时跟着视频配置好以后,文字的存储是没问题的,但是点击图片存储以后没有反应,于是我就去网上查找原因,存储图片的话还是需要自己配置,在config.json文件中去修改"上传图片配置",主要修改两项,一个是图片访问路径前缀,一个是保存路径。保存路径这一项可以去自定义保存路径和文件名格式,为了文件名不为乱码且按序存储,我将图片的文件名设置为了存储的时间,也就是年份+月份+日期+时间戳。

6、数据库密码加密了吗?

加密了,使用的是MySQL中提供的双向加密,加密用的是AES_encryPT命令,解密用的是AES_decryPT命令,但是加密后的数据直接存储varchar类型的话会报错,所以在加密时还得使用HEX()函数来16进制化存入,解密时再使用UNHEX()函数处理后再解密。

7、博客的题目在数据库中是必填的,而传的参数没有博客的题目怎么处理?

在接收到博客从前台传来的各个参数后,对于题目,会进行判空,如果题目不为空,那么可以正常存入数据库,如果题目为空,就会将题目设置为【无题】。

4、项目中遇到的问题?是如何解决的?

1、项目中存在的乱码问题。

因为在MySQL中博客是以blob类型来存储的,那么就会导致在前端页面写完存储到数据库中时或者时前端访问博客详情页时出现乱码的问题,当时该问题没有解决的时候,我的数据库和博客详情页面的文字全部都是?,经过查阅相关资料,是需要一个类型转换器来完成类型的转换的,而且mybatis中提供了类型转换器,MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,可以实现BaseTypeHandler,自定义 TypeHandler。自定义的类型转换器中我记得是重写了三四个方法,具体操作就是将blob字段一个一个byte的转换成String类型,写好类型转换器后,在mybatis中需要用resultmap来指定博客内容属性对应的类型转换器,里面有个typeHandler标签,参数填自定义的类型转换器的路径。

2、在博客详情页,日期这个属性有问题。

在博客详情页中,对于博客的日期部分只能具体到某一天,而不能看到时分秒,最后是用SimpleDateFormat类解决的,这个类可以将Date类型转化为String类型,而且可以设置成想要的格式,但是时间对应的字母不能错,比如y代表年,M代表月,D代表哪一天等等。

5、这个系统还可以添加什么新功能吗?如何实现?

1、在用户读完博客后肯定有一些想说的话,因此可以添加一个留言功能,这个分为两种,可以非注册式评论,也就是不登录就可以留言(匿名留言),还有一种是注册式评论,用户必须登陆账号以后才可以留言,但是非注册式留言有很大的弊端,就是对于作者的回复不友好,由于对方是非注册式留言,那么作者的回复也不知道往什么地方发送,而且留言者也无法得知作者对他的回复。

2、可以给博客系统添加一个回收站,将用户删除的博客存入回收站中,可以设置一个时间,当这篇博客在指定时间没有被读取的话,就将他删除,就像LRU最近最少使用一样,因为MySQL无法设置数据的过期时间,所以可以用Redis来完成,将MySQL删除的博客写入Redis中,并且给删除的博客设置对应的过期时间,而且Redis中还提供了很多不同的回收策略,更加方便地支持这一功能。

6、项目中用到了哪些设计模式?

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以给你一些关于 Java 的面试资料: 1. 《Java 编程思想》(Thinking in Java)这本书是一本关于 Java 编程的经典教程,包含了 Java 的基础知识和一些比较复杂的主,对于准备 Java 面试非常有帮助。 2. 《Java 面试宝典》这是一本关于 Java 面试的专业书籍,包含了大量的 Java 面试和答案,可以帮助你更好地准备面试。 3. 《Java 核心技术·卷 I》(Java SE)这本书是 Oracle 出版的 Java 官方文档,包含了 Java SE 的所有核心知识,对于准备 Java 面试也是非常有帮助的。 4. 网上的模拟面试系统,比如 InterviewBit、LeetCode、HackerRank 等,都可以帮助你更好地准备面试,通过模拟面试的方式练习面试。 希望这些资料能帮助你准备 Java 面试。 ### 回答2: 很高兴为您提供关于Java面试的推荐资料。 首先,我建议您可以从以下几个方面来寻找相关的Java面试资料: 1. 书籍推荐:有许多经典的Java面试书籍可以帮助您准备面试。其中比较知名的包括《Java程序员面试宝典》、《剑指Offer》等。这些书籍中包含了大量的常见的Java面试及其解析,可以帮助您对Java面试有一个全面的了解。 2. 在线教育平台:目前有许多在线教育平台提供了丰富的Java面试资料,比如知乎、CSDN、园等。可以通过搜索关键词“Java面试”来获取大量相关资料,这些资料往往由经验丰富的Java工程师分享,包括常见的编程、算法、设计模式等。 3. 面试准备网站:有一些专门为面试准备提供资料的网站,比如牛网、LeetCode等。这些网站提供了大量的编程和算法,可以帮助您熟悉常见的面试类型和解答思路,同时还可以通过参与在线编程竞赛提高解能力。 最后,我建议您在准备Java面试时,不仅要注重答案的准确性,还要理解其中的原理和背后的思想。此外,注意平衡理论与实践,多进行实际的编码练习,熟悉Java常用的开发工具和框架,这样在面试时才能更加游刃有余。祝您面试顺利! ### 回答3: 在准备Java面试过程中,推荐以下几种Java面试资料: 1. 《Java编程思想》:这是一本广为流传的Java经典书籍,不仅深入浅出地讲述了Java编程的基础知识,还涵盖了许多常见的面试。 2. 网上Java面试集:可以通过搜索引擎找到很多网上整理的Java面试集。一些知名的技术和论坛上也有Java面试必备库,可以多多搜索和收集。 3. Java相关的MOOC课程:选择一门优质的Java相关的在线课程,学习课程中的练习和考试目,这些目一般会紧密结合实际应用场景,有助于提升实战能力。 4. IT技术社区和:加入一些知名的IT技术社区或关注几个知名的技术,这些平台上的经验分享和技术讨论往往会涉及到一些面试相关的问,可以增加一些思路和解技巧。 5. 面试经验分享:在各种面试准备网站或社交媒体上,可以找到很多关于Java面试经验的分享。这些分享中有些会提到一些常问的问和经典的面试,可以作为参考。 需要注意的是,Java面试主要涵盖基础知识、算法与数据结构、多线程、IO、网络编程、设计模式等领域,建议综合多个资料和资源进行学习和准备,灵活选择适合自己的面试资料。同时,还要结合自己的实际经验和项目经历,进行针对性的准备和答技巧的培养。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值