java当当网项目问题?

Python014

java当当网项目问题?,第1张

首先把技术分类,

JQuery,js这些是页面相关的技术,实现前段展现;

ajax重点在于异步交互,也就是实现不跳转页面,与后台进行数据交互;

jdbc 是 java database connection,存在的意义就是连接数据库;

struts 则是 使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。可以理解为一个便于设计JavaWeb的 一个轻量级框架。

这些弄清楚了,然后对应去想想你学过的内容,面试么,扬长避短,当然对于MVC和设计模式最好能多知道一些。

最后,祝你面试成功。

第一点:用户体验。

我觉得这是SEO里的重点,因为如果一个用户体验都不良好的网站,搜索引擎也不会认为你是一个好的网站,搜索引擎的排名算法有很大程度的去考虑用户体验的。所以我们建设一个网站要让用户访问到我们的网站中能够很清楚的自己在什么地方,接下来要去什么地方,很方便的点击链接,得到他想要得到的信息。假如你进一个网站,网站内部混乱不堪,没有清晰的导航,没有你像看到的信息锚文字,你是是不是也会不假思索的关闭这个网站,去寻找另一个网站。

第二点:收录量。

我们进行网站结构优化的目的就是利于SEO,SEO的最基础前提是你的网站有收录,如果一个良好的网站结构,搜索引擎蜘蛛也很容易爬行到你的网站内页对你的网站进行收录,像我的tuihongbao.cn这个网站网站结构就是很清晰的,虽然收录量不是很(尴)大(尬)。

第三点:网站权重的分配。

网站的哪些内容是你最想给用户展现的,哪些内容是比较次要的,那么这个在网站结构规划的时候,就要对网站进行权重分配,权重高的网站自然排名就会比较高。这样才能突出我们的主要业务

第四点:锚文字。

要说网站的站外锚文字自己控制不了,那么在站内,锚文字站长都是可以控制的。为什么要达到锚文字清晰的目的,因为锚文字是搜索引擎排名中很重要的一部分。

关于当当网架构优化的几点心得

第一,对技术部组织架构进行调整。

将原来的职能化组织中的产品、研发和测试部门按照产品线进行整合,转型为Unit化,以加强同一产品线不同职能团队之间的配合协作,沟通更高效,团队更为聚焦。

这样的组织结构更易于应用敏捷,与实施敏捷的前提同理,产品线拆分建立在系统架构解耦基础之上,在这一点上,系统架构与组织架构异曲同工且相辅相成。解耦越充分,系统边界越清晰,模块越小,越适合敏捷团队,能够快速响应业务需求。

业务相近的产品线组成一个产品研发部,这样多数的小型需求在部门内就可以解决,面对紧急项目还可以灵活使用人力资源,并为员工创造接触更多类型业务需求的机会。

第二,系统分层依赖。

随着业务逻辑越来越复杂,系统越来越多,相互依赖也越来越多。比如我的当当中就聚合了安全中心、用户、账户、订单、收藏夹、推荐等多维度的信息,需要调用多个系统服务。经过讨论,决定将用户交互层面的前端页面与原有的后端系统拆分,并入前端的产品线,以便为用户提供更好的服务。

而后端系统之间的依赖关系也需要更为精细的分层定义,对于促销系统,需要会员系统、订单系统、价格系统提供基础数据对于运费系统需要商品信息和配货数据,而在精准定位销售区域的前提下,库存只是配货的基础数据,配货系统负责判断是否有货,Promise则根据配货结果计算预计送达时间。

调整系统之间的关系是很难的,牵一发而动全身,但重构是契机,2015年,对于电商的核心系统交易和促销进行了重构,同时价格、配货、运费等系统也进行了较大调整,从而使系统间依赖问题得到了明显改善。

第三,服务化。

微服务为互联网行业的服务化指明了方向,也坚定了我们进行服务拆分和解耦的决心。

原有的架构以系统为维度,服务归属于明确的系统,而系统的划分一般以业务功能为聚合,随着业务的发展,新的业务功能层出不穷,总会有一些打破原有的系统边界,给架构提出难题。

服务化,不仅是指系统将能力通过服务对外提供,更重要的是服务本身就是承载业务功能的单元,如果有组合了多个逻辑难以归入某系统的服务,不必纠结,作为独立的业务模块开发就是了,以服务为单元,系统架构更加扁平,简单清晰。

微服务架构中,服务粒度会更小,服务治理的需求更加迫切,更需要技术手段解决,比如分布式服务框架,当当使用的是基于Dubbo二次研发的DubboX,以及结合ddframe实现的服务调用监控。

去年的容器技术爆发,为微服务架构实施提供了有力工具,当当内部也在部分系统使用了Docker。

微服务大势所趋,秉承SOA理念,在服务治理中心的基础上,将系统弱化,提供更多的基础服务,提高了系统的复用性和灵活性。

第四,平台化。

平台化包括两个维度,技术平台化和系统平台化。

技术平台化是指在技术层面建立统一的体系,包括根据行业特点进行技术选型,使用稳定可靠的技术组件。

当当从2012年开始将原有的.net平台向Java平台迁移,从封闭到开源,应用电商行业的主流技术栈,到2015年,基本完成了技术转型,主要后端业务系统都转移到Java平台。

经过数年的积累,2015年当当架构部研发了Java应用开发框架ddframe,目的是分离技术和业务,封装技术细节,将应用开发人员的精力集中在业务开发上。

随后再接再厉,当当架构部又推出了用来替代TBSchedule的分布式作业调度框架Elastic-Job。并将之开源,基于JDBC的分布式数据库中间件Sharding-JDBC也在开发中。

统一的技术栈,能够复用技术资源,持续积累整体的研发能力,为做精做专提供更好的基础条件。

系统平台化是指搭建基础平台,包括测试平台、分布式服务平台、自动化运维平台、监控平台、缓存集群、消息中间件平台、大数据处理平台、项目管理系统、日志平台、问题跟踪系统等。

基础平台是各业务系统有机协作的基础,保证了整个技术架构的全面可控,能够降低系统运维复杂度,是大型电商系统不可或缺的组成部分,良好的基础平台是技术实力和管理能力的双重体现,而多数公司更注重业务,会在基础平台建设方面欠下许多技术债务。

2015年,当当搭建了自动化运维平台Pangu、监控平台Radar,重构了项目管理系统,Redis集群管理平台也在搭建中。

第五,核心系统重构。

在电商业务发展的快节奏之下,核心系统持续迭代是常态,而且基本两、三年以上,就需要考虑重构,否则难以支撑业务的快速变化。

另外,系统重构集中梳理业务逻辑和系统依赖,整理统一的文档,剔除无用功能,归并多个版本,甩掉历史包袱重新设计架构,适度的前瞻性设计使系统在一定周期内具备业务扩展性。

2015年,当当完成了交易系统和促销系统进行了重构。

交易系统在2015年10月底完成新老版本切换。重构耗费约1500人天,重构代码17万行,全部切换至Java开源技术架构,为公司节约大量成本,并进行了架构优化,整体性能平均提升25%,经受住了双十一和双十二的考验。

在当当,有一些“类促销”业务,从广义上可以归入促销范畴,但业务与数据均不属于促销系统,在促销系统重构设计中,我们考虑将这类业务逐渐回收另外,促销系统能不能承担一些营销的功能?带着这两点考虑,在促销基础上进一步抽象出活动模型。

目前主流动态网站开发技术无非是基于JavaEE、ASP.NET、PHP,本人对基于JavaEE最为了解。

下面就为你谈谈 javaEE.

当前我们所讨论的Java EE应用,已经不再是Sun公司所规定的经典Java EE应用规范,而是一种更广泛的应用规范。经典的Java EE应用规范被提出时,是以EJB做为核心,以应用服务器作运行环境,通常开发、运行成本较高。而目前主流的JavaEE应用具备了经典Java EE应用规范的各种特性,例如面向对象设计、清晰的分层结构以及良好的可拓展性、可维护性。

JavaEE应用可以分为以下5层:

(1)、领域对象层(Domain Object):该层由一系列的最基本的Java对象构成,它们是系统的领域对象,通常具备了一定业务处理能力。

(2)、数据访问对象层(DataAccess Object):该层由一系列的DAO组件构成,在这一层,实现对数据表的Select(查询),Insert(插入),Update(更新),Delete(删除)等操作。

(3)、业务逻辑层:该层包含了系统所需要的业务逻辑组件,系统所需要的业务逻辑方法都定义在这些组件中,无疑是系统架构中体现核心价值的部分,通常会调用DAO层中的方法。

(4)、控制层:该层由一系列的控制器组成,这些控制器主要调用service层的业务逻辑方法,完成对用户请求的处理,并且依据处理结果呈现不同的视图资源。

(5)、表现层:该层主要由一系列的JSP资源组成,用于将后台的数据呈现给用户。

正是由于以上分层的提出。出现了以下主流技术:

JSP、Servlet

JSP(Java Server Pages)是由SunMicrosystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件(*.jsp)。

Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。

JSP和Servlet是JavaEE规范的两个最基本的成员,它们是Java Web开发的重点技术,也是Java EE开发的基础技术。JSP和Servlet的本质是一样的,因此JSP最终必须编译成Servlet才能运行。

Struts2

做Java开发的技术人员都应该清楚,Struts很早就将MVC模式引入到web开发领域中的框架之一。从Struts1诞生至今已有近10年的光景,即便到现在有不少企业在使用Struts1来开发,所以不得不承认Struts已经深入人心。它迫使开发人员按照MVC模式对项目模块进行分层,开发时会感觉略显繁琐,这么做自然有利于项目的开发与后期维护,它的价值远远高过开发时多付出的代价。然而,Strut1的弊端也日益暴露出来,如与Servlet API的紧密耦合,不利于单元测试,WebWork2的Struts2框架应运而生。

无论从Struts2设计角度来讲,还是从Struts2在实际项目中的易用性来看,Struts2都是一个非常优秀的MVC框架。与传统的Struts1相比,Struts2可以使用普通的传统的Java对象作为Action,action的execute()方法不再与ServletAPI耦合,因而更利于测试;Sruts2还有如下优点:支持更多的视图技术;基于AOP思想的拦截器机制,提供了极好的可拓展性;更强大、更易用的输入校验功能;整合的Ajax支持等。

Hibernate

Hibernate是轻量级JavaEE应用的持久层解决方案,Hibernate不仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法,可以大幅缩短使用JDBC处理数据持久化的时间。

目前的主流数据库依然是关系数据库,而Java语言则是面向对象的编程语言,当把二者结合在一起使用时相当麻烦,而Hibernate则减少了这个问题的困扰,它完成对象模型和基于SQL的关系模型的映射关系,充当了面向对象的程序设计语言和关系数据库之间的桥梁,使得应用开发者完全采用面向对象的方式来开发应用程序。

Spring

Spring是一个从实际开发中抽取出来的框架,为企业的应用开发提供了一个轻量级的解决方案。该方案包括:基于依赖注入的核心机制,基于AOP的声明式事务管理,与多种持久层技术的整合,以及优秀的WebMVC框架。Spring致力于JavaEE应用各层的解决方案,而不是仅仅专注于某一层的方案。可以说:Spring是企业应用开发的“一站式”选择,Spring贯穿表现层、业务层、持久层。然而,Spring并不想取代哪些已有的框架,而是以高度的开放性与它们无缝整合。

如果哪个Java框架没有集成Spring都不好意思和人打招呼,也从侧面印证了Spring在Java企业开发中的江湖地位。Spring凭借其控制反转与面向切面编程颠覆了Java企业开发中非EJB不用的状态,将Java从重量级的旧世界带到了轻量级的新世界。