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 页面,让用户直接访问。
有一下几方面好处:
12.1,首先就是访问速度,不需要去访问数据库,或者缓存来获取哪些数据,浏览器直接加载渲染 html 页即可。所以可以大大的提高访问效率;
12.2,从网站优化来分析,搜索引擎更喜欢静态的网页,静态网页与动态网页相比,搜索引擎更喜欢静的,更便于抓取,搜索引擎 SEO 排名更容易提高。
12.3,从安全角度讲,静态网页不宜遭到黑客攻击,如果黑客不知道你网站的后台、网站采用程序、数据库的地址,静态网页, 更不容易受到黑客的攻击。
12.4,从网站稳定性来讲,如果程序、数据库出了问题,会直接影响网站的访问,而静态网页就避免了如此情况,不会因为程序等,而损失网站数据,影响正常打开,损失用户体验,影响网站信任度。
注意问题:
12.4.1,随着项目的扩大,静态 html 页面将会不断的增大,增多,所以要注意管理这些静态页面。例如路径的管理,及时更新的管理等等。
12.4.2,有些页面并不一定非要来静态化,但是为了避免地址暴露过多的信息,也可以用 URL 伪静态,使页面看起来就像静态页面一样,原理只是一个 Filter。
13.Quartz 是什么,应用场景
定时任务框架 用户解冻:比如用户在登录的时候,连续输错 3 次密码后,系统会将该用户冻结,不再允许该用户登录系统,等到了晚上零晨时分,再为所有被冻结的用户解冻,这样,用户在第二天又可以正常登录系统 抓取日志:比如需要在每天凌晨时候,分析一次前一天的日志信息 sheduler job jobFactory trigger
14.elasticserach 是什么,原理, 如何使用,和 lucene 的关系
1、Lucene 就是一套全文检索编程 API,基于 Lucene 对数据建立索引,进行查询。
2、现代企业开发中,更常用的是 solr 搜索服务器和 ElasticSearch 搜索服务器。
主要概念 索引 文档 文档类型 映射
1)索引对象(数据存在哪?):存储数据的表结构,任何搜索数据,存放在索引对象上
2)映射(数据怎么存?):数据如何存放到索引对象上,需要有一个映射配置,数据类型、是否存储、是否分词…
3)文档(存什么数据?):一条数据记录,存在索引对象上
4)文档类型(数据有哪些类型?):一个索引对象,存放多种类型数据,数据用文档类型进行标识 编程步骤
4.1)建立索引对象 4.2)建立映射 4.3)存储数据【文档】 4.4)指定文档类型进行搜索数据【文档】 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 生成图表 --------
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于