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

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

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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 10 关注
  • Lute

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

    25 引用 • 191 回帖 • 21 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 136 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    45 引用 • 25 回帖 • 2 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 660 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 53 关注
  • Scala

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

    13 引用 • 11 回帖 • 115 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1386 回帖 • 324 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 3 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    109 引用 • 54 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • GitBook

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

    3 引用 • 8 回帖
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    54 引用 • 85 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 10 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 83 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    546 引用 • 3531 回帖 • 1 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 519 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • 房星科技

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

    6 引用 • 141 回帖 • 565 关注