项目面试题

项目面试题

需要按照功能点把系统拆分,拆分成独立的功能。单独为某一个节点添加服务器。需要系统之间配合才能完成整个业务逻辑。叫做分布式。

集群:同一个工程部署到多台服务器上。
优点:1、把模块拆分,使用接口通信,降低模块之间的耦合度。
2、把项目拆分成若干个子项目,不同的团队负责不同的子项目。
3、增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。
4、可以灵活的进行分布式部署。

缺点:1、系统之间交互需要使用远程通信,接口开发增加工作量。
2、各个模块有一些通用的业务逻辑无法共用。

导入依赖的原则:1、所有的工程都需要的依赖应该在聚合工程(taotao-manage)中导入。
2、在使用依赖的最底层导入。
3、运行时所需要的依赖在web工程中加入。人员配置产品经理:3人,确定需求以及给出产品原型图项目经理:1人,项目管理前端团队:5人,根据产品经理给出的原型制作出静态页面后端团队:20人,实现产品功能测试团队:5人,测试所有的功能运维团队:3人,项目的发布以及维护

#{}与${}的区别
#{}:占位符,用于参数传递,可以防止SQL注入
${}:用于SQL拼接

什么是负载均衡高可用
nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

Redis优点
1.支持多种数据类型存储
2.支持持久化
3.功能丰富
4.简单稳定,基于c语言开发

redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用,也可以将二者结合使用。

1.RDB持久化(默认支持,无需配置)该机制是指在指定时间间隔内将内存中的数据集快照写入磁盘
2.AOF持久化,该机制将以日志的形式记录服务器所处理的每一个写操作,在redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

二、solr

什么是SolrCloud

SolrCloud是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。

它有几个特色功能:
1)集中式的配置信息
2)自动容错
3)近实时搜索
4)查询时自动负载均衡

solr怎么设置搜索结果排名靠前(得分)?
可以设置文档中域的boost值,boost值越高计算出来的相关度得分就越高,排名也就越靠前。此方法可以把热点商品或者是推广商品的排名提高。

SpringMVC全局异常处理
整个系统只有一个,
使用方法:1)需要实现一个接口HandlerExceptionResolver2)需要在springmvc中配置。处理逻辑:捕获整个系统中发生的异常。1) 异常写入日志文件2) 及时通知开发人员。发邮件、短信。展示一个错误页面,例如:您的网络故障,请重试。.

网页静态化
好处1.有利于搜索引擎优化
好处2.提高访问速度
好处3.解决高并发

静态文件生成的时机:当后台添加、编辑商品时生成静态网页

  1. mq发送消息
  2. 接收到消息,生成静态页面
  3. nginx访问静态页面。

登录的处理流程:
1、登录页面提交用户名密码。
2、登录成功后生成token。Token相当于原来的jsessionid,字符串,可以使用uuid。
3、把用户信息保存到redis。Key就是token,value就是TbUser对象转换成json。
4、使用String类型保存Session信息。可以使用“前缀:token”为key
5、设置key的过期时间。模拟Session的过期时间。一般半个小时。
6、把token写入cookie中。

如何判断是否登录
1.从cookie中取token
2.取不到未登录
3.取到token,到redis中查询token是否过期
4.如果过期,为登录状态
5.没有过期,登录状态

实现购车商品数据同步
1、要求用户登录。
2、把购物车商品列表保存到数据库中。推荐使用redis。
3、Key:用户id,value:购车商品列表。推荐使用hash,hash的field:商品id,value:商品信息。
4、在用户未登录情况下写cookie。当用户登录后,访问购物车列表时,a)把cookie中的数据同步到redis。b)把cookie中的数据删除c)展示购物车列表时以redis为准。d)如果redis中有数据cookie中也有数据,需要做数据合并。相同商品数量相加,不同商品添加一个新商品。
5、如果用户登录状态,展示购物车列表以redis为准。如果未登录,以cookie为准。

浏览器跨域问题
跨域是指从一个域名的网页去请求另一个域名的资源。浏览器出于安全的考虑,不允许不同源的请求

JSONP解决AJAX跨域问题:
JSONP是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小。
它的基本思想是,网页通过添加一个

海量数据的存储问题如今随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如果使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储。

创建单线程用来初始化

/**
     * 初始化门架流量预测数据入库
     * */
    @PostConstruct
    private void init() {
        new predictFlow().start();
    }

    class predictFlow extends Thread {
        @Override
        public void run() {
            List<JSONObject> gantryTz = (List<JSONObject>) redisUtil.get("gantryTz");
            for (JSONObject bean : gantryTz) {
                Object obj = bean;
                Map<String, Object> map = (Map<String, Object>) obj;
                if (map.containsKey("f_vc_gantry_id")) {
                    try {
                        String gantryId= map.get("f_vc_gantry_id").toString();
                        HttpClient client = new HttpClient();
                        URI url = new URIBuilder(APP_URL)
                                .setPath("/taisl/v1.2/traffic_flow/gantry/forecast/current/query")
                                .addParameter("app_key", "f4f56da0-4589-11eb-aa8e-5b1ae6b0d7f9")
                                .addParameter("gantry", gantryId)
                                .addParameter("group", "taizhou_ZDGKPT")
                                .build();
                        GetMethod get = new GetMethod(url.toString());
                        client.executeMethod(get);
                        InputStream in = get.getResponseBodyAsStream();
                        String res = IOUtils.toString(in, "utf-8");
                        redisUtil.set("predictFlow"+gantryId,res);
                    } catch (Exception e) {
                        continue;
                    }
                }
            }
            super.run();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值