自我介绍+项目

1、自我介绍

面试官你好,我叫念靖渊,来自西安邮电大学大数据与人工智能实验室,目前在计算机学院读大三;

我是从大二上的时候加入了我们学校的实验室,也就是从那个时候开始学习编程的,然后在大二上的时候学习了 Java语言,然后紧接着在寒假期间学习了 MySQL,到了大二下的时候,开始了对 JavaWeb 的一个学习,然后陆续学习了后续 Java 框架的使用,然后在暑假和大三上的时候,和同学一起合作做了一个项目,这个项目是一个美食类的社交APP,其实就相当于是一个美食类的”微博“,我主要负责了其中的好友功能以及用户签到以及Feed流和大额代金券的抢购这四个功能;然后在大三上剩余时间对JDK的部分源码进行了阅读,像 HashMap的源码,concurrentHashMap的源码都有过阅读,然后学习了一些MySQL的一些知识,像日志系统,还有事务机制都有一定了解;

目前的话,就是说,掌握的最好的是Java并发编程, 对HashMap的源码,concurrentHashMap的源码都有过阅读,对Java并发包下的部分源码也有了解,像 CAS、线程池;其次对MySQL的索引、日志系统、事务机制、还有TCP和HTTP相关的一些知识都比较熟悉,对简历上写的剩余部分都有一个大概的了解;

以上就是我过往的学习经历和现在对知识点的一个掌握情况

2、美食APP项目

1、用户签到

这个功能的话,涉及到了对于用户签到信息的存储,一起统计一个月内用户的连续签到天数和一个月内用户的签到天数

存储的话,其实在我第一次写的时候,是采用 MySQL 对用户的签到信息进行存储,但是我在学了 Redis 之后,使用 Bitmap 对签到信息进行了存储

字段名 描述
id 数据表主键(AUTO_INCREMENT)
fk_diner_id 用户ID
sign_date 签到日期(如2010-11-11)
amount 连续签到天数(如2)
为什么要用 BitMap 对签到信息进行存储呢?

使用 MySQL 存储的话,单表是有4个字段,分别是 id、用户id、签到日期和连续签到天数,单行数据的长度在接近50个字节左右,这是一个人签到一日天的数据,那么一个人假设他连续签到一个月,那么签到信息总共接近1500字节;

但是我们使用 Redis 的 Bitmap 的话,一个人一个月的签到信息最多只有31个比特,算下来是不到4个字节,对于存储空间的节约还是很大的


设计思路上其实并不难,但是在代码的编写上遇到了一个困难,我没有办法去统计连续签到天数,因为把用户的签到数据从位图中取出来,这个数据是由二进制转换成10进制的一个非常大的数据,非常难以计算

后来的解决方案是:

这里采用位运算来统计来连续签到次数

先右移一位,然后左移一位,如果等于自己,表示未签到;如果不等表示签到了

算完一位后,右移把这一位丢弃了,然后计算下一位,写了一个for循环来实现的对连续签到天数的计算

其实就是取低位连续不为0的个数即为连续签到次数

2、积分功能

这个功能主要是两个点:一个是添加积分,根据我们之前的签到信息来送积分;另外一个是积分排行榜

利用 MySQL 来对积分记录进行存储,表结构的设计:

CREATE TABLE `t_diner_points` (
`id`  int(11) NOT NULL AUTO_INCREMENT ,	//主键id
`fk_diner_id`  int(11) NULL DEFAULT NULL ,	//用户id
`points`  int(11) NULL DEFAULT NULL ,	//积分数
`is_valid`  int(11) NULL DEFAULT NULL ,		//逻辑删除字段
`create_date`  datetime NULL DEFAULT NULL ,
`update_date`  datetime NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
AUTO_INCREMENT=1
ROW_FORMAT=COMPACT;

根据我们之前统计的连续签到次数去添加积分;

积分排行榜

使用 MySQL 来进行实现,需要写复杂的 SQL 语句,获取排行榜前20


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值