BOS项目技术点总结

1.什么是git,和svn的区别

git是一个分布式的版本控制系统,一般用于代码的版本控制,类似于svn,区别在于git可以在建立本地仓库,这样代码可以提交到本地,这样可以断网提交,可以查找本地的代码提交历史记录。git有像github,码云这样的代码托管网站(我们项目就放在github上),下代码很方便。

2.什么是maven, maven中的依赖范围,依赖传递是什么意思

maven是一个软件项目管理工具,一般用它的配置文件pom来加载jar包,也可以用来编译工程发布工程
安装一个外包maven并整合到eclipse中,通过配置文件指定jar包的本地仓库,私服,和中央仓库,镜像等。
通过maven引入jar包,也通过maven将工程发布出去给其它工程引用。
依赖范围是用来控制打jar包的范围。
compile 编译、测试、运行
provided 编译、和测试有效
runtime:测试、运行有效。
test:只是测试有效,只在单元测试类中用。
依赖传递 就近原则
坐标


3.spring的原理,它是如何整合其它框架的

AOP(面向切面编程) 对指定的业务进行统一的增强,如事务处理,日志记录,性能统计,将这些代码从业务逻辑代码中抽取出来。
IOC(控制反转)DI(依赖注入)
(1)项目引入的bean对象不用我们从bean工厂取,而是通过sring里的配置文件得到
(2)web层调service,service调dao都是通过加注解的方式,让spring注入进来,不用我们new出来
spring一般通过配置文件将其它框架整合进来,在配置文件中配置bean工厂或模板和相关的属性,这样我们就不需要自己new出来bean工厂而是由spring统一得到

4.什么是模型驱动,什么是领域驱动建模,有什么好处

模型驱动是使用javaBean对象来封装请求参数,在整个MVC流程中可以直接使用这个对象,用起来方便(对比属性驱动,对比servlet中request.getParameter)

领域驱动建模是对业务对象的的抽取,就程序来说领域模型就是java里面的实体bean(domain),我们将这些实体bean抽取出来,通过maven配置引入,不同的工程就都可以使用这些模型。

5.什么是jpa,springdatajpa和hibernate之间的关系

jpa是sun公司定义的一套数据持久层的标准,是一种规范 hibernate是具体的技术实现 还有别的技术(Toplink等)但不流行了。类似于接口和实现类的关系
jpa定义的是一系列的接口和注解。Spring Data JPA 是在JPA规范的基础下提供了Repository层的实现
好处 用jpa方式 开发者面向JPA规范的接口 不必关注底层的JPA实现 哪种好用哪个 不用再去学习一套新的技术
减少学习成本。

6.用springdatajpa有什么好处,为什么

对于Oracle数据库,我们自己编写的dao 继承了jparepository接口 在具体实用时由 sprinrg容器给我们注入进一个实现类,
使用springdatajpa抽象了具体的数据库操作,项目中用的redis,elasticsearch和ehcache都可以通过springdatajpa来操作

7.webservice是干什么的

webservice就是多项目,多平台之间进行方法调用的一种技术,现在工作中用cxf框架通过spring配置进项目来,用起来很简单的,只要在普通的服务上加上对应的注解就可以发布出去了。
webservice分成两种方式,一种是传统的基于sopa协议的方式,一种是rest的方式,传统的ws的方式不太常用了,我们项目中是用的就是rest的方式

8.webservice的两种实现方式rs和ws的区别

rs和ws的最主要的是rest是用的http协议,传统ws用的是soap协议,一般ws用的是xml格式而rs用的多是json格式,如果是完全基于restful风格,那么发布的服务就是一个资源,具体的增删改查方式是通过请求方式post,delete,put,get的方式来确定的。
rs更方便,更流行一些,因为它是返回json格式 访问服务的客户端只用通过工具webClient或者httpclient就可以访问了。

9.分页查询的参数,及查询后的数据是如何返回的

请求参数页码,每页记录数
返回总记录数和当前页数据记录 一般返回的当前页数据是一个list集合, 我们要把list和总记录数封装到一个对象中返回前端页面

10.AngularJS的几个特性,什么是路由

MVC,(模仿后台框架的MVC Controller就是js代码,Model)
双向数据绑定(更新模型,视图会自动更新,更新视图,模型会自动更新)
模块化设计
官方提供的模块 ng、ngRoute
用户自定义的模块 angular.module(‘模块名’,[ ])
angularJs实现单页面多视图的页面跳转效果 类似于url跳转

11.什么是消息队列(mq) 消息服务器的应用场景和队列的两种方式

消息队列中间件是分布式系统中的一种的组件,主要解决应用服务之间耦合,异步消息,流量削锋,等问题实现提高系统性能的一种架构
2、ActiveMQ 应用场景分析
1)用户注册,重点用户信息数据库保存,发短信、发邮件,增加业务处理复杂度,这时候用MQ,将发短信、发邮箱,通知MQ,由另外服务平台完成
2)搜索平台、缓存平台
查询数据,建立缓存、索引,不从数据库查询,从缓存或者索引库查询
当增加、修改,删除数据时,发送消息给MQ,缓存平台、索引平台从MQ获取到这个消息,更新缓存或者索引
1)Queue队列,生产者生产了一个消息,只能由一个消费者进行消费
2)Topic话题,生产者生产了一个消息,可以由多个消费者进行消费

12.什么是页面静态化,如何实现,有什么好处

Freemarker

将动态数据访问,生成为一个静态html页面,提高查询效率
页面静态化,其实就是将动态生成的jsp页面,变成静态的HTML页面,让用户直接访问。有一下几方面好处:
1,首先就是访问速度,不需要去访问数据库,或者缓存来获取哪些数据,浏览器直接加载渲染html页即可。所以可以大大的提高访问效率;
2,从网站优化来分析,搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎SEO排名更容易提高。
3,从安全角度讲,静态网页不宜遭到黑客攻击,如果黑客不知道你网站的后台、网站采用程序、数据库的地址,静态网页, 更不容易受到黑客的攻击。
4,从网站稳定性来讲,如果程序、数据库出了问题,会直接影响网站的访问,而静态网页就避免了如此情况,不会因为程序等,而损失网站数据,影响正常打开,损失用户体验,影响网站信任度。
注意问题:
1,随着项目的扩大,静态html页面将会不断的增大,增多,所以要注意管理这些静态页面。例如路径的管理,及时更新的管理等等。
2,有些页面并不一定非要来静态化,但是为了避免地址暴露过多的信息,也可以用URL伪静态,使页面看起来就像静态页面一样,原理只是一个Filter。

13.Quartz是什么,应用场景

定时任务框架
用户解冻:比如用户在登录的时候,连续输错3次密码后,系统会将该用户冻结,不再允许该用户登录系统,等到了晚上零晨时分,再为所有被冻结的用户解冻,这样,用户在第二天又可以正常登录系统
抓取日志:比如需要在每天凌晨时候,分析一次前一天的日志信息
sheduler

job jobFactory

trigger

14.elasticserach是什么,原理, 如何使用,和lucene的关系

1、Lucene就是一套全文检索编程API,基于Lucene对数据建立索引,进行查询。
2、现代企业开发中,更常用的是solr搜索服务器和ElasticSearch搜索服务器。
主要概念
索引 文档 文档类型 映射
1)索引对象(数据存在哪?):存储数据的表结构,任何搜索数据,存放在索引对象上
2)映射(数据怎么存?):数据如何存放到索引对象上,需要有一个映射配置,数据类型、是否存储、是否分词…
3)文档(存什么数据?):一条数据记录,存在索引对象上
4)文档类型(数据有哪些类型?):一个索引对象,存放多种类型数据,数据用文档类型进行标识
编程步骤

1)建立索引对象

2)建立映射

3)存储数据【文档】

4)指定文档类型进行搜索数据【文档】

5)查询数据【文档】

15.缓存的原理,redis和ehcache的比较

缓存可以提高查询性能,对同一批数据进行多次查询时,第一次查询走数据库,查询数据后,将数据保存在内存中,第二次以后查询可以直接从内存获取数据,而不需要和数据库进行交互.
最简单的缓存实现可以用一个map实现,map的键存查询语句,map的值存对应查询到的数据。
ehcahe和redis的比较
ehcache直接在本机jvm虚拟机中缓存,速度快,效率高,本机速度自然是最快的,但重启web容器会一起消亡掉,只能当前web应用访问操作, 做缓存共享麻烦,集群分布式应用不方便。ehcahe可做hibernate的二级缓存。
redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。
如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis。
ehcache也有缓存共享方案,不过是通过RMI或者Jgroup多播方式进行广播缓存通知更新,缓存共享复杂,维护不方便;简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。总之ehcache能干的活redis都能干,redis能干的,ehcache不一定。

16.权限控制的几种方式, Shiro如何实现权限控制

第一种:URL级别粗粒度权限控制(重点)
配置web.xml的shiroFilter拦截 /*
在spring的applicationContext*.xml配置文件中配置同名的bean,配置filterChainDefinitions拦截控制规则
xxx.html*=anon(未登录可以访问)
xxx.html*=authc(必须登录才能访问)
xxx.html*=perms[权限](需要特定权限才能访问 )
xxx.html*=roles[角色](需要特定角色才能访问)
第二种:方法级别细粒度权限控制
在spring的applicationContext*.xml配置spring aop对spring管理bean对象开启shiro注解支持
@RequiresPermissions(权限) 需要特定权限才能访问
@RequiresRoles(角色) 需要特定角色才能访问
@RequiresAuthentication 需要认证才能访问
Shiro执行流程
应用程序—>Subject—>SecurityManager—>Realm—>安全数据

17.延迟加载是什么问题,如何解决

查询数据时当对象中有一对多的关联属性 当要在view层获取数据时比如将对象转化成json,由于session已关闭造成无法读取数据
要看实际业务需不需要展示多方数据
如果不需要直接加载
则在相关属性的get方法上加@JSON(serialize=false)注解
如果需要立即加载则有三种方式 效率由底到高
1 service中手动查询出来
2 加注解 @OneToMany(fetch=FetchType.EAGER)
3 配OpenEntityManagerInView filter

18.什么是报表,如何生成报表

报表就是数据的呈现,对于程序员来说就是复杂SQL查询语句,可以生成excel(poi)格式,pdf(ireport)格式或前端highcharts生成图表

你可能感兴趣的:(经验分享,前端技术,后台编程,项目实战,学亮说JAVA)