1、说说Spring 的核心 IOC 和AOP?
答:
IOC控制翻转:依赖对象的创建交由spring容器创建。只需要根据架构加上响应的注解即可例如控制层加@Controller注解 业务层加@Service 注解 数据访问层加@Respostory注解 。需要使用响应对象只需要声明属性用@Autowired注解或者@Resource注解即可
AOP:面向切面。理解起来就是一个横切逻辑。可以动态的在目标方法之前或者之后进行预操作或者后处理行为。例如spring的AOP最典型的应用就是事物处理、日志记录、权限校验、资源池管理等。AOP可采用动态代理实现。例如jdk的动态代理。每次都会调用代理对象的invoke方法。可以重写此方法。在该方法中反射调用目标方法,然后可以在目标方法之前或之后做增强。传统的装饰者模式也可以。但是需要目标类和代理类需要实现相同的接口。
2、前台判断用户是否需要登录,那个拦截是怎么实现的?比如加入购物车结算时需要登录,进个人中心需要登录,还有其他模块需要登录,
答。加入购物车可以不用拦截器。在结算方法中获取session中的用户信息来判断用户是否登录,使用拦截器也可以实现,进个人中心需要登录,还有其他模块需要登录,这是可以使用权限来做
3、你是怎么用Spring来管理的
答。使用spring的注解。来管理 controller。Service。Dao.,如果该层需要注入其他对象。可以使用autowired或者 Resource注解注入 使用spring的AOP来管理事物
4、你怎么理解aop,核心是啥
答:AOP是一个横切逻辑,可以动态的对目标方法进行前置或者后置增强,其核心是动态代理。
5、你是怎么理解IOC的,核心是啥
答:IOC是对象的创建交由spring管理。不需要自己new对象。Spring可以控制此对象为单例或者多例。其核心是反射
6、你是怎么理解大数据的
答:我的理解是 大量数据并发访问。这个我们项目中采用的是F5负载均衡,LVS也能解决此问题。对并发访问分流到各个服务器。减轻并发访问压力。还有就是大数据量的存储。这个需要采用数据库集群和适当的缓存来解决此问题。缓存例如 redis缓存服务器。或者框架的缓存技术例如hibernate和mybatis的二级缓存
7、你用到过哪些缓存技术?
答:框架的缓存有mybatis、hibernate的二级缓存。可以将数据放置到二级缓存中。下次查询从缓存中获取数据。适合放置于二级缓存的数据一般是安全性要求不高、很少被修改、允许出现并发的数据。例如权限数据、省市区数据等 。其他缓存技术有redis 和oscache
8、Hibernate的多对多关系怎么更新
答:配置 cascade=update
9、你觉得Maven是什么,你是怎么使用的
答:maven主要是管理项目的构建,可以用一个父工程来聚合其他子项目。项目发布的时候采用maven进行打包发布父工程即可。子工程可以继承父工程。可以将项目的功能划分到不同的子工程中,开发中分工协作。提高开发速度。可以将通用的业务处理和封装类放置于一个通用(或者核心)工程中。其他项目需要使用直接配置依赖即可。
10、你们这个项目组对少个人,整个项目组,
答:开发人员6人。测试人员有3名 不算在开发小组内 负责整个部门项目的测试。项目经理一名。美工一名 不算在开发组 负责前台UI。也负责其他项目的前台。运维1名
11、各个表之间的关系
参看相关项目的 PDF文件
12、Solr具体说明下
13、Freemark静态化怎么用的
答:在原始的JSP页面修改成模板文件,使用freemarker的标签替代原有的EL表达式。使用freemarker生成静态页面时候传入模板文件和需要的数据,数据封装到map里面,在模板中使用freemarker标签去取map中的值
14、WebService用过什么框架 (请讲师提供该项目在哪些地方调用过webservice)
答:使用过cxf框架,在商品上架时候后天调用前台工程的接口传入商品ID,在前台工程生成该商品的静态页面
15、你觉得你们公司这个系统做的最好的模块(功能)是什么
此问题较灵活,学员可以拿自己最熟悉的模块回答
范例:1.前台商品列表页面:采用solr检索。商品展示信息从solr服务器检索。大大减少数据库服务器的访问量,降低数据库压力
2,、品牌信息放置于redis服务器。减少页面检索对数据库服务器压力
2、订单表的主键生成采用redis统一主键生成,方便后期数据合并进行数据挖掘产生的主键冲突问题
16、你对代理,反射,泛型有什么理解
17、你项目部署时的环境
18、你做这个项目遇到哪些问题,咋解决的
答:1、新技术的问题,freemarker。自己网上搜索资料,查看以前项目的代码,自行修改和学习完成静态化页面的发布
2、沟通问题。个人中心模块功能较多,与同事合作开发完成,开始阶段经常出现SVN冲突,后经过频繁有效的沟通,大大降低了SVN冲突次数,提高开发效率。
19、你为啥这么早就从学校出来。
答:一般以实习生身份面试才会被问到改问题。原因是大四课程学习很少,主要科目已经学习完毕,技能掌握比较成熟,想尽早进入企业磨练。提升工作能力。
20、你的乐观锁和update内个解决并发,where后面的条件是什么?
答:update自身带锁。直接update不会出现并发修改问题。乐观锁是先查询在修改,where条件是
version = 查询出来的version值,商品ID为传入的商品ID,整条update语句为
Update 商品表 set 库存 = 库存 - 购买量 ,version = 查询version值+1 where version = #{查询的version值} and 商品ID= #{商品ID}
21、说说你对事务管理的理解,事务管理的作用举例说明
答:事物管理就是不需要自己手动的控制事物,减少代码编写,提高开发速度,和减少手动控制事物造成的资源浪费。
事物的作用就是保证一组业务逻辑操作在一个事物内,要么全部成功要么全部失败,例如在修改商品信息的时候纪要修改数据库数据还要更新solr服务器的数据,这两组操作就必须同时成功或失败,不然会造成页面展示的数据和数据库数据不一致。
22、项目的测试环境是什么,运行环境是什么,
23、项目最后是运行在什么操作系统下的,
答:Linux。开发是在windows系统下进行的。移植到Linux主要是要配置好jdk、tomcat、数据库。环境配置基本
24、Solr怎么实现和数据库同步
答:修改修改商品信息的时候更新solr服务器的数据,保证solr服务器数据和数据库的一致
25、Redis一般用来缓存那些数据
26、页面静态化和缓存的区别是什么;
答:静态化和缓存的主要区别在于 缓存是将数据库静态化到页面,客户端访问不需要查询数据库,主要存放形式是静态化文件资源,存储于硬盘,缓存是将数据存储于服务器内存,二者存放位置和形式不一样。
27、你们的session一般是存在那些信息;(除了用户对象以外;
28、你们数据的数据的id是怎么生成的;
答: ID采用redis统一生成。在数据库集群情况下防止不同数据库数据合并时候主键冲突问题。例如如果后期业务扩大数据库可能分地区。但是表一样。止痒如果将不同地区数据导出在导入到一个数据库做数据挖掘就会出现主键冲突问题。
29、商品下架是把数据从Solr中删除吗,在商品列表面还会显示该商品吗,在静态页面中还存在该商品的静态页面吗
答:商品下架会将数据从solr中删除。后台商品列表页面在下架商品中可以看到该商品。但是静态页面不会删除。如果选择删除商品将会进行删除静态页面。