经典 java 教学项目 bos2.0 物流技术总结

本贴最后更新于 2247 天前,其中的信息可能已经时移世异

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 生成图表 --------

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 585 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 618 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22346 引用 • 89408 回帖 • 1 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 595 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    15 引用 • 122 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 587 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    70 引用 • 375 回帖 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 155 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 431 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 530 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 721 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    341 引用 • 708 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 130 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖