复习准备面试项目

社团管理系统

  • Servlet的工作流程

1.web服务器收到一个请求,会先检查有没有servlet实例,如果没有则执行servlet的init方法,创建servlet实例。

2.创建一个封装了HTTP请求信息的httpServletRequest对象,以及封装http响应的httpServletResponse对象,并将其作为参数执行servlet实例的service方法

3.web应用停止时,servlet引擎调用destroy()方法销毁servlet对象。

  • sendredirect()重定向forward()请求转发区别:

    重定向是在客户端完成的,浏览器的地址栏url会改变,要发送两次请求(对应两个request和response),不同请求之间不能共享请求中的数据,是一种跨域访问资源的客户端跳转,速度慢

    在这里插入图片描述

    而请求访问forward()总共只发送了一个请求,共享整个请求的数据和资源。地址栏路径没有变化,对于浏览 器来说是透明的,因为浏览器不知道为其提供服务的servlet已经换了一个,是在服务器内部的跳转,速度快forward()实际上起到了延长request()生命周期的作用,比如说有一个1.jsp通过setAttribute设置了值,如果想跳转到2.jsp并且希望把值传递过去,这时候只能通过forward跳转,否则如果是重定向的话,已经是换了一个request,就不能共享先前设置的值。

在这里插入图片描述

  • getParameter()和getAttribute()区别:

    getParameter()是获取客户端(浏览器端)设置的数据,永远返回的是字符串类型,取得的一般是类似post()方法表单或者是URL重写(就是xxx?id=1中的id)传入的参数。

    getAttribute()一般是在服务器端之间进行的数据流传,必须通过在服务器setAttribute()后才能通过get获得。可以在一次请求中set,然后在其他页面使用getAttribute获取对应的值,这样就达到一次请求可以在多个页面共享一些对象信息

  • GetPost区别:

  1. Get通过URL提交数据传参,数据在URL中可以看到。而Post通过request body传递数据。因此账号密码登录用Post,分页程序用Get更好,用户可以看到当前是第几页。
  2. Get方式请求,浏览器会把header和data一并发出去,只发一次包;而post第一次发header,第二次发data,共发两次包。因此时间消耗post更多一点,但是在网络环境差的情况下,post更适合。
  3. 这些数据是中文数据而且是非敏感数据,那么使用 Get;如果用户输入的数据不是中文字符且包含敏感数据,那还是使用 post为好。
  4. Get用于从服务器获取数据,而Post用于向服务器提交数据,比如新建用户等。
  5. 两者本质都是TCP链接。
  • 分页类实现:线性表ArrayList+页号索引信息

  • 项目问题和解决方式:

  1. 底层查表一开始实现的方式是对于表中某个属性(键)的查找,对应一个sql语句,那么就应该对应一个表查询函数(形参对应那个属性的值),后来发现这样子有几个毛病,第一就是业务逻辑层的逻辑原子性操作被分成很多部分,你一个查表函数还分成按照这个条件查找,那个条件查找,代码可读性变差。第二如果你这个查表要根据多个属性时,又得另外写一个函数,代码利用率变低。

    采取的解决方法:是采用sql语句拼接的方法,所有的查找都可以封装到一个函数当中,直接根据一个类对象来进行查找,这个对象某个属性如果不为空,那么就把它通过where A=value的方式拼接到sql语句的后面,最后直接执行拼接好限定条件的sql语句就行。

  2. 新闻实体类的设计:一开始社团新闻,社团活动,社团展示想着是对应建立三个实体类,三个表。

    解决方法:由于这三种信息内容包含的key基本都是相同的,都有标题,内容,所属社团,时间等,因此可以把三个表合起来只用一个表保存信息,一个类来进行封装即可,类中设置一个newsStatus属性来标记是属于哪一种类的信息。

  3. 泛型类设计:一开始实现分页是在每个类里面都设置一个arraylist和页索引,实际上可以把这个概念抽象出来。而且当查询结果返回表中有多条记录,而且后续还需要继续对该表再进行二次筛选查找时,比较麻烦。

    解决方法:声明定义一个页表的泛型类,list线性表元素类型就是泛型。并且在业务逻辑层实现一个返回list的方法,把查询得到的结果放到表中,二次查询时可以直接遍历该表即可。

  • 数据库设计
  1. 活动——成员表:将活动和成员形成多对多关系。学生——社团表:学生与社团多对多关系。
  2. 对于含有多对多关系的中间表进行查询时,采用select * from club_apply a left join club b on b.club_id = a.club_id left join student c on c.stu_id = a.apply_ones
  3. 统计记录总数:select count(*) as count 。 其中 count(*)是news表中每个branch的记录总数 as count是给count(*)取一个别名
  4. order by sort limit (pageNo-1)*pageSize , pageSize :分页查找。其中order by 默认升序,limit M,N表示查询第M条记录后面的N条记录(M+1~M+N)
  • 申请参加活动/加入社团提交表单的过程:
  1. 首先点击某个活动之后,会把活动的newsid传给前端frontServlet,业务逻辑层通过该id查找news表并返回该news对象,跳转到展示活动的detail.jsp中。

  2. 这时候用户若点击参与报名活动,就会把当前session会话中登录用户的信息和当前活动对象news的信息整合在表单中发出post请求,相应的servlet就会通过getParameter取出申请信息并实例化一个新的对象,调用业务逻辑层方法,先在活动——成员对应表找相同活动ID+学生ID记录,有表示已经申请过,没有则把新的记录加入到该表中。

  3. 如果是加入社团,则先在社团申请表中,先查找相同学生ID+社团ID+申请状态为0(未审核)记录,再查找审核过的,如果都没有表示是第一次申请,添加新的记录。

车牌识别系统

  • 预处理
  1. 均值模糊:通过 cv2.blur 柔化一些小噪声点,特别是对于椒盐噪声的滤除效果比较好.
  2. sobel 获取垂直边缘:由于车牌垂直边缘比较多,因此通过 cv2.Sobel 进行图像梯度计算,因为要找出垂直边缘因此使用大小为 3 的 Sobel 算子计算 x 方向的一阶导数。
  3. 二值化:这里图像二值化采用 cv2.threshold,通过设置一个阈值来把图像划分,使用的二值化图像算法是 OSTU 最大类间方差法,来自适应的找到一个认为的最好的划分图像的阈值。
  • 车牌定位
  1. 先获取二值图像的轮廓,再遍历所有轮廓生成最小外接矩形。
  2. 这时候通过矩形的长,宽,长宽比,面积,倾斜角等几个方面先排除一部分非车牌的轮廓。
  3. 之后再通过背景色进一步排除非车牌区域,使用的是漫水填充法(还有一个好处是可以把先前残缺的车牌轮廓补齐)。通过在矩形区域生成种子点,种子点的颜色必须是蓝色的,因为车牌背景色就是蓝色的。填充后的图形再绘制外接矩形,再判断这个外接矩形的尺寸是否符合车牌要求。最后通过仿射变换校准位置。
  4. 种子点的选取有几种情形:第一,车牌倾斜不严重直接选择水平垂直方向范围内中间两个值作为上下限来生成随机种子点。第二,倾斜比较严重可以直接在对角线上生成种子点也能比较好的覆盖整个区域。
  • 字符分割:根据水平轮廓长度比,垂直方向的最长投影来切割。

投简历

  • 腾讯

  • 小红书

  • 网易

  • 中兴 :测试

  • 知乎:JAVA工程师

  • 阿里:研发工程师JAVA

  • 京东:JAVA开发工程师

  • 快手:JAVA开发工程师

  • 百度:JAVA研发工程师



今日总结

复习简历项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值