中金所技术一面准备

1、实习遇到的问题

连锁餐饮企业客户关系管理系统的设计与实现

对餐饮客户的信息维护
增加删除客户,修改客户信息,查询客户,利用SpringMVC,对浏览器发送的请求,controller层调用service层处理业务,dao层进行数据库操作,最后返回数据给前台页面 springmvc+mysql+navicate+javascript+html+kafka+quartz
按消费金额对用户分级,
每次消费成功时往表里存一条记录,每天零时按规则执行一次用户等级的统计来更新用户表
优化:
在用户每次消费金额变化的时候发送一个事件,自动升级的程序自动去订阅这个事件,异步去计算用户的等级,每两小时更新一次,kafka+quartz 消息队列+分布式定时任务。event producer consumer
quartz定时任务驱动参数存在数据库,优先抢占,任意bean中的方法加注解@Async @scheduled注解作为线程体,quartz有一套表,job_details配置job,trigger配置job什么时候运行,job接口定义一个任务,quartz读取配置信息存到表里,以后读表执行任务。
发送祝福短信等功能,在客户生日纪念日等特殊日期为客户发送祝福短信
查询当天生日的人,
发送邮件的工具类,JavaMailSender createMimeMessage,MimeMessageHelper,setTo,setFrom,setSubject,setText,mailSender.send(helper.getMimeMessage)
根据数据库查询结果使用调度器定时发送祝福邮件,ServletContextListener

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import javax.mail.MessagingException;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.cc.birthday.Customer;
import com.cc.mail.MailUtils;

public class BirthdayListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // 当web应用启动开启任务调动---功能在用户的生日当天发送邮件
        //开启一个定时器
        Timer timer=new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            
            @Override
            public void run() {
                // 为当前的生日的用户发邮件
                //1.获得今天过生日的人
                //获得今天的日期
                SimpleDateFormat format=new SimpleDateFormat("MM-dd");
                String currentDate=format.format(new Date());
                //根据当前时间从数据库查询今天过生日的人
                QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
                String sql="select * from customer where birthday like ?";
                List<Customer> customerList=null;
                try {
                     customerList = qr.query(sql, new BeanListHandler<Customer>(Customer.class),"%"+currentDate);
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                //2.发邮件
                if(customerList!=null&&customerList.size()>0){
                    for(Customer c:customerList){
                    String emailMsg="亲爱的:"+c.getRealname()+",生日快乐!";
                    try {
                        MailUtils.sendMail(c.getEmail(), "happy..birthday", emailMsg);
                        System.out.println(c.getRealname()+"邮件发送完毕");
                    } catch (MessagingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    }
                }
            }
        },new Date(),10*1000);
        //实际开发中起始时间是一个固定的时间
        //实际开发中间隔时间是1天
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub
        
    }
    
}

2、项目
标注工具
问题 京沪全线1319km 20亿条动检数据,导入数据库的时候,数据太多所以很慢
geo文件 2 3G,我们把数据进行了分割,我把6500万条数据分为500个文件,每个文件大约11万条数据,将这11万条数据放到ArrayList中,然后批量导入
添加索引,快速查询和检索,普通,主键,唯一,组合索引
社区论坛,

3、自我介绍
1分钟:各位面试官上午好,我叫滕菲,河北保定人,本科毕业于河北工业大学,现就读于北京交通大学,明年6月份研究生毕业,在学校学习期间,我认真学习了专业知识,取得了优异的成绩;积极参与实验室的科研项目,积累了实践经验,熟练掌握了开发工具和开发流程,性格开朗活泼,抗压能力强,喜欢唱歌跑步,羽毛球打得还不错,做事认真负责,担任班级负责人和团支部书记,有组织能力,获得校一等奖学金,优秀团干部等荣誉称号,我的介绍完毕,谢谢!
4、为什么来上海
比较喜欢上海这座城市,将来想在上海发展,研究生本来想去上海交通大学,对这座城市有特殊的感情
5、技术上根据你的项目会问些场景实现
6.redis的数据会丢失吗
Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。 众所周知Redis 的持久化机制有两种,第一种是快照RDB,将redis在内存的数据库中的数据定时转存到硬盘上,先将数据集写入到临时文件中,写入成功后,再替换之前的文件,再用二进制压缩存储。那么此操作是一种间隔存储的,类似一种快照形式;实现rdb持久化,第二种是 AOF 日志,将redis的操作日志以追加的形式写入到文件中。会对每一次操作的命令进行一个记录,那么在redis服务进行一个启动的时候,会读取日志中的命令,对redis中的数据进行一个恢复。
7、微服务的好处
将大型应用程序细分为多个小的独立功能。每个功能都由一个小型,高度专注的团队提供支持,该团队负责其服务,并确保他们为该服务选择适当的技术,流程和工具。帮助团队更加高效、更快和轻松的部署、错误和故障隔离、可扩展性
8、两个栈排序
解题思路:

循环遍历要排序的栈,第一次遍历时直接把数据放入栈2中,在下次遍历时,比较栈1出栈的数据与栈2数据的大小,如果栈2数据大于要压入的数时,进行出栈压入栈1中,直到数据比要压入数小,同时记录栈2出栈次数j,然后压入数据,再把压入栈1的数据重新压回到栈2中。

public static Stack<Integer> sortBy2Stack(Stack<Integer> stack){
        int size=stack.size();
        Stack<Integer> tempStack=new Stack();//结果栈
        int temp;
        int j=0;
        while(stack.size()>0){
            temp=stack.pop();
            if(tempStack.size()!=0){//判断结果栈是否为空
                while (tempStack.size()>0&&tempStack.peek()>temp){
                    stack.push(tempStack.pop());
                    j++;//记录出栈次数
                }
                tempStack.push(temp);
                while(j>0){
                    tempStack.push(stack.pop());
                    j--;//根据出栈次数重新压栈
                }
            }else{
                tempStack.push(temp);
            }
        }
        return tempStack;
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值