Java EE

领域驱动设计(DDD):领域接口化设计

痞子三分冷 提交于 2020-12-10 02:21:05
领域接口化设计 把服务对象(service)和资源库对象(repository)设计成接口是最常见的。但是这对接口化的认识还远远不够,我们需要更深入地去分析接口化设计和更全面地应用接口化编程。所以我们要讨论的是全面接口化,尤其是对 领域模型 接口化的认识。 领域接口化 通常的情况下我们会把领域模型设计成 类(class) ,但是你有没有想过把领域模型设计成 接口(interface) ?比如: public interface User { // ... } public class UserImpl implements User { // ... } 这样的设计似乎没有任何价值,那么继续深入地看看。比如: 这时候看起来有点东西,因为我们为了适配不同的 数据源 ,提供了不同的实现类。 最开始要把 领域对象 设计成接口,确实是为了在不同的 ORM 框架之间实现 无缝切换 。因为 JPA 对面向对象的支持最好,而 Mybatis 因为简单在大环境下比较流行。在解决这个问题时,通常使用 层内包裹 或者叫 对象转换 的方式来解决。具体来说是在持久层使用持久化对象(PO)与领域对象(DO)的之间进行转换。例如: public class JpaUserRepository implements UserRepository { // ... @Override public

(附面试题)掌握这些还怕面试官不下”跪“-115道经典Java面试题及答案解析,

て烟熏妆下的殇ゞ 提交于 2020-12-10 00:11:38
面向对象编程(OOP) Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。下面的章节我们会逐个分析这些特性。 点此免费领取更多面试资料及答案! 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 下面列出了使用封装的一些好处: 通过隐藏对象的属性来保护对象内部的状态。 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。 禁止对象之间的不良交互提高模块化。 参考这个文档获取更多关于封装的细节和示例。 多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。 继承 继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。 抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类

JavaWeb03-请求和响应

风格不统一 提交于 2020-12-09 07:31:28
请求响应流程图 response 1 response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。 response对象的功能分为以下四种: l 设置响应头信息; l 发送状态码; l 设置响应正文; l 重定向; 2 response响应正文 response是响应对象,向客户端输出响应正文(响应体)可以使用response的响应流,repsonse一共提供了两个响应流对象: l PrintWriter out = response.getWriter():获取字符流; l ServletOutputStream out = response.getOutputStream():获取字节流; 当然,如果响应正文内容为字符,那么使用response.getWriter(),如果响应内容是字节,例如下载时,那么可以使用response.getOutputStream()。 注意,在一个请求中,不能同时使用这两个流!也就是说

session的工作原理?

☆樱花仙子☆ 提交于 2020-12-08 08:33:22
1、什么是 session session 是浏览器和服务器会话过程中,服务器分配的一块储存空间。服务器默认为浏览器在cookie中设置 sessionid,浏览器在向服务器请求过程中传输 cookie 包含 sessionid ,服务器根据 sessionid 获取出会话中存储的信息。 由于 http 协议是无状态的,即 http 请求一次连接一次,数据传输完毕,连接就断开了,下次访问需要重新连接。 通过 cookie 中的 sessionid 字段和服务器端的 session 关联,可以确定会话的身份信息。 2、session 比 cookie 更安全 用户信息可以通过加密存储到 cookie,但是这样做的安全性很差,浏览器的 cookie 的容易被其他程序获取和篡改。使用 session 的意义在于 session 存储在服务器,相对安全性更高。 3、session 的生命周期 创建 浏览器访问服务器的 servlet(jsp)时,服务器会自动创建 session,并把 sessionid 通过 cookie 返回到浏览器。 servlet 规范中,通过 request.getSession(true) 可以强制创建 session。 销毁 服务器会默认给 session 一个过期时间,即从该 session 的会话在有效时间内没有再被访问就会被设置过超时,需要重新建立会话。

session的工作原理

江枫思渺然 提交于 2020-12-08 08:32:27
一、session的概念及特点   session概念:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。说白了session就是一种可以维持服务器端的数据存储技术。session主要有以下的这些特点: session保存的位置是在服务端 session一般来说要配合cookie使用,如果用户浏览器禁用了cookie,那么只能使用URL重写来实现session的存储功能 单纯的使用session来存储用户回话信息,那么当用户量较多时,session文件数量会很多,会存在session查询慢的问题 本质上:session技术就是一种基于后端有别于数据库的临时存储技术 二、为什么要使用session   我们目前使用的互联网应用层协议基本上都是基于 HTTP 和 HTTPS 的,它们的本身是无状态的, 只负责请求和响应。 我告诉服务器我需要什么,服务器返回给我相应的资源。 如果没有额外处理的话, 服务器是不知道你是谁,更无法根据你是谁给你展现和你相关的内容了。HTTP 协议一开始被设计成这样还是有一些历史原因的,当时的互联网多用于学术交流,只用于文章信息的展现之类的事情,远没有现在这么丰富多彩。所以在当时的背景下 HTTP 协议被设计成这样其实也是很符合它的场景的。但随着互联网应用越来越广泛,应用的形式也变得越来越多,我们的

session的工作原理

拈花ヽ惹草 提交于 2020-12-08 08:32:11
session的工作原理 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候也可能仅仅是指一次连接,也有可能是指含义①,其中的差别只能靠上下文来推断②。 然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,比如打电话,直到对方接了电话通信才能开始,与此相对的是写信,在你把信发出去的时候你并不能确认对方的地址是否正确,通信渠道不一定能建立,但对发信人来说,通信已经开始了。“保持状态”则是指通信的一方能够把一系列的消息关联起来

蚂蚁金服招人!机器学习算法/JAVA开发/产品

让人想犯罪 __ 提交于 2020-12-08 08:27:07
欢迎大家关注蚂蚁集团数字金融业务线的工作机会。在这里你将接触十亿级的平台型用户数据 以及 业界领先的金融科技算法和产品。你的每一个贡献都将影响大部分国人和世界各地的用户。本组目前开放的职位如下文所述(有数十HC)。无论你是否匹配以下岗位,都可以 加我的微信OwlLite 沟通关于 职业发展、我司岗位机会、组内业务情况、简历要求和修改、面试经验/改进和流程 等方面的问题。如果你自信已经达到了对应岗位的要求,可以将简历(包含 可联系到的 手机号)发送到 miaoqianwen.mqw@antgroup.com (本内容长期有效)。注意,岗位要求非硬性标准。 1.消费金融风控算法(杭州/上海) 职位描述 从花呗、借呗、互联网银行等金融信用业务出发,打造世界一流的信用风险控制、资金管理、产品转化等多种核心智能能力。 岗位要求 在以下一个或多个领域有扎实的理论技术基础和5年以上相关工作经验,是该领域的资深/高级专家,领域包括但不限于数据挖掘、机器学习(CV/NLP等)、搜索推荐、广告系统、自然语言处理、运筹优化等; 具有较强的业务敏感度和学习能力,对公司业务有全局理解和创新思考;同时具有横向协同整合资源,结合业务和技术创新,形成完整的解决方案能力。有互联网、金融领域等行业经验者优先; 具有结合大数据与人工智能技术支持业务创新的经验,主导重大项目或课题的立项并落地完整解法取得突出业务成果

web server 乱码

允我心安 提交于 2020-12-08 07:47:43
以下前端都是 utf-8 字符集编码 一、后台接收 1.1 、 get 请求 get 请求中,请求参数在请求头中; 解决方法:通过在 web server 中配置编码格式: tomcat 中,在 Connector 中添加 URIEncoding="UTF-8" ; 1.2、post 请求乱码 post 请求中,请求参数分两部份, 1.2.1、url?参数,这部分参数在请求头中 解决方法:与 get 请求中相同 1.2.2、其他请求参数在请求体中(这部分参数 web server 不会对其编码) 解决方法: 1、request.setCharacterEncoding("UTF-8"); 注:要在 request 任何操作之前设置,否则无效。 2、在 web.xml 中配置拦截器来设置编码字符集: <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter

Servlet--Servlet进阶API、过滤器、监听器

一世执手 提交于 2020-12-08 02:57:21
Servlet初始化过程、ServletConfig 每个Servlet都必须由Web容器读取Servlet设置的信息,初始化等,才能生成对应的Servlet实例。对于每个Servlet的设置信息,Web容器都会为其生成一个ServletConfig作为代表对象。 在Servlet接口上,定义了与Servlet生命周期及请求服务相关的init,service,destroy三个方法。每一次请求来到容器时,会产生HttpServletRequest,HttpServletResponse对象,并调用service方法时当做参数传入。 在Web容器启动后,根据上面所说,会产生一个ServletConfig对象,而后调用init方法并将产生的ServletConfig对象传入其中,这个过程在创建Servlet实例之后只会发生一次,之后每次请求到来,就只调用Servlet的service方法进行服务。 Servlet类架构图: 在Java中,当我们想要在对象实例化后做一些操作,必须定义构造器,然而在JavaWeb中则不然,当我们想要使用ServletConfig来做一些事情的时候,我们需要重新定义init方法,因为在Web中,对象实例化之后,容器还没有调用init方法传入ServletConfig,所以我们如果在构造器中使用ServletConfig的话,是没有这个对象的。

Spring+SpringMVC+Mybatis环境的搭建(使用Intellij IDEA)

百般思念 提交于 2020-12-07 10:11:14
前言:本文主要介绍利用IDEA如何搭建SSM环境,并使用mybatis的逆向生成功能,根据数据表生成对应mapper接口和sql映射文件。具体步骤如下。 开发环境:     IDEA 14.1.7     maven 3.5.2 1.搭建web环境 利用idea搭建web环境的具体步骤,请参考笔者的另一篇博文: 使用IntelliJ IDEA和Maven管理搭建Web开发环境(以Spring MVC为例)(一) 文中有详细介绍。 2.通过maven添加相关依赖包 搭建ssm环境,需要spring、mybatis、数据库驱动等相关依赖包。具体如下pom文件。 1 <!-- 相关文件版本 --> 2 < properties > 3 < spring.version > 4.2.1.RELEASE </ spring.version > 4 < aspectj.version > 1.8.1 </ aspectj.version > 5 < servlet.version > 2.5 </ servlet.version > 6 < jstl.version > 1.2 </ jstl.version > 7 < mybatis.version > 3.4.5 </ mybatis.version > 8 < mybatis-spring.version > 1.3.1 </