自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 软件工程小组作业--网上书店平台项目

一、项目成员二、需求规格说明书三、需求分析四、设计活动五、运行界面1、主界面在主界面上,导航栏有登录和注册两个功能,搜索栏实现模糊搜索。图书展示板块,显示在售图书的简要信息,点击图书图片可以跳转到相应图书的详细信息界面。页脚处可选页,也可直接选择,实现页面跳转。2、注册界面注册时,会检测登陆名是否已注册,密码的二次确认核对,Email格式核对,验证码核对。注册完成之后则直接跳转到登陆界面,进行用户登录。3、登陆界

2020-12-28 20:16:28 508

转载 矩阵链乘法问题

一、概述 以两个矩阵相乘为例,A1*A2,A1和A2为两个矩阵,假设A1的行列数是p*q,A2的行列数是q*r。注意这里由于是A1乘以A2,所以A1的列数要等于A2的行数,否则无法做矩阵乘法,满足上述条件的矩阵,我们称之为“相容”的。那么对于A1*A2而言,我们需要分别执行p*r次对应A1的行元素乘以A2的列元素,根据线性代数知识,不难得出我们一共需要执行p*q*r次乘法。 对于两个矩阵相乘,一旦矩阵的大小确定下来了,那么所需执行的乘法次数就确定下来了。那么对于两个以上的矩阵呢?是不是也是

2020-12-23 22:40:15 477

转载 【CSS】为什么 a 标签的伪类选择器要注意书写顺序?

和 标签相关的伪类有很多,但最常见(也是初学者最先接触到)的有以下4个。:link:visited:hover:active它们的大概作用分别如下(详细作用以后逐一探讨,这次的主题主要和css的优先级有关)a:link选取用户未访问的 标签,而且鼠标没有悬停在其上。a:visited选取已被访问过的 标签。a:hover选取鼠标悬停在其上的 标签。a:active选取用户正在点击的 标签。大多数前端开发者在刚接触css时,和 标签有关的伪类选择器(

2020-12-10 22:58:12 406

原创 模型驱动的前端开发--学习笔记

模型是人们根据事物特征将它们分类并抽象后的结果,建模是人们认知世界的一种方式。模型驱动数字世界这种虚拟空间,里面本无一物,是个需要被人开垦的空虚的世界。那么人该如何打造数字世界呢?就像《圣经》里描述的——上帝按照自己的样子创造了亚当这个世上第一个人类,又从他身上取下一根肋骨创造了夏娃这个世界上第二个人类。在这里,上帝将自己作为参照提取特征抽象出祂所认为的「人」的模型,并根据这个模型创造出「亚当」和「夏娃」。人在打造数字世界时必然会参照自己所存在的并且是自己所认知的世界,因为人不可能想像出自己无法.

2020-12-07 22:05:44 239

原创 关于前端应用表现层抽象--学习笔记

「表现层」与「视图层」「表现层」的英文是「presentation tier」或「presentation layer」,具体是哪个取决于是物理上还是逻辑上划分;而「视图层」的英文是「view」。「表现层」是「视图层」的超集,根据前端应用的架构设计,它们既可以不等又可以相等。表现层「表现层」这个词出自经典的三层架构(或多层架构),是其中一个分层。三层架构包括数据层、逻辑层和表现层,一般用在 C/S 架构中。为什么会在这篇讲前端开发的文章中提到它?这是因为,虽然在一些前端应用中用不到,尤其

2020-12-06 21:40:32 742

原创 使用 CSS3 实现酷炫的 3D 旋转透视

3D动画效果现在越来越普及,已经被广泛的应用到了各个平台,比如阿里云,华为云,webpack官网等。它可以更接近于真实的展示我们的产品和介绍,带来极强的视觉冲击感。所以说,为了让自己更加优秀,css33D动画必不可少。一、CSS3 3D 转换的常用API介绍旋转rotateX()rotateY()rotateZ()以上几个api分别代表绕x,y,z轴旋转相关代码如下:` 复制代码`位移(Transform)translateX(x) 定义 3.

2020-12-05 23:28:38 615

原创 CORS和CSRF--学习笔记

一、CORS 和 CSRF 区别两者概念完全不同,另外常常我们也会看到 XSS ,这里一起介绍:CORS : Cross Origin Resourse-Sharing 跨站资源共享CSRF : Cross-Site Request Forgery 跨站请求伪造XSS : Cross Site Scrit 跨站脚本攻击(为与 CSS 区别,所以在安全领域叫 XSS)二、CORS1、概念跨来源资源共享(CORS),亦译为跨域资源共享,是一份浏览器技术的规范,提供了 Web服

2020-12-04 23:19:15 3974 1

原创 Cookie 和 Session 的作用及它们之间的区别

CookieCookie是存储在用户本地计算机上,用于保存一些用户操作的历史信息,当用户再次访问我们的服务器的时候,浏览器通过HTTP协议,将他们本地的Cookie内容也发到咱们服务器上,从而完成验证。Cookie又分为了会话Cookie与持久Cookie,要区分这两种类型,非常的简单,持久Cookie就是我们设置了它的过期时间,而没设置过期时间的,都属于会话Cookie。因为当我们设置了Cookie的过期时间,那么这个Cookie就会存储在用户的硬盘中,而不是在内存中,因为不在内存中,不管用户是关

2020-12-03 19:57:59 721

原创 尾调用和尾递归--学习笔记

尾调用尾调用是指一个函数里的最后一个动作是一个函数调用的情形:即这个调用的返回值直接被当前函数返回的情形。这种情形下称该调用位置为尾位置。若这个函数在尾位置调用本身(或是一个尾调用本身的其他函数等等),则称这种情况为尾递归,是递归的一种特殊情形。尾调用不一定是递归调用,但是尾递归特别有用,也比较容易实现。在程序运行时,计算机会为应用程序分配一定的内存空间;应用程序则会自行分配所获得的内存空间,其中一部分被用于记录程序中正在调用的各个函数的运行情况,这就是函数的调用栈。常规的函数调用总是会在调用栈最上层添

2020-12-02 23:17:08 134

原创 关于vue--学习笔记

vue作为前端主流的3大框架之一,目前在国内有着非常广泛的应用,由于其轻量和自底向上的渐进式设计思想,使其不仅仅被应用于PC系统,对于移动端,桌面软件(electronjs)等也有广泛的应用,与此诞生的优秀的开源框架比如elementUI,iView, ant-design-vue等也极大的降低了开发者的开发成本,并极大的提高了开发效率。vue框架使用注意事项和最佳经验vue学习最快的方式就是实践,根据官网多写几个例子是掌握vue最快的方式。接下来笔者就来总结一下在开发vue项目中的一些实践经验。

2020-12-01 23:30:55 82

原创 应用架构需要分类思维

模块(Module)、组件(Component)、包(Package),这些概念对于我们技术同学并不陌生,但并不是所有人都能理解其要义。深入理解之后,我才发现,其背后的深意是分类思维。而这种分类也是应用架构的核心所在,通过不同粒度、不同层次的分类,把复杂的软件系统实现控制在可以被理解、被维护的程度。否则,对于动则上100万行代码的软件,人类根本没有办法理解和维护。试想一个极端情况,假如没有这些概念协助我们分类,我们把所有业务逻辑都写在一个类里面,会是什么样的结果呢?我们很多的“非人类”系统,正是因为没有

2020-11-30 23:16:52 105

原创 关于排序--学习笔记

快速排序性能分析快速排序的一次划分算法从两头交替搜索,直到low和hight重合,因此其时间复杂度是O(n);而整个快速排序算法的时间复杂度与划分的趟数有关。 [4]理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分,经过log2n趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为O(nlog2n)。 [4]最坏的情况是,每次所选的中间数是当前序列中的最大或最小元素,这使得每次划分所得的子表中一个为空表,另一子表的长度为原表的长度-1。这样,长度为n的数据表的快速排序需要经过n趟划.

2020-11-29 23:15:16 88

原创 面向切面编程(AOP)--学习笔记

什么是AOPAOP(Aspect-Oriented Programming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对

2020-11-28 23:09:24 166

原创 依赖倒转原则--学习笔记

依赖倒置原则定义1、上层模块不应该依赖底层模块,它们都应该依赖于抽象。2、抽象不应该依赖于细节,细节应该依赖于抽象。首先,这个原则听起来很像是“针对接口编程,不针对现实编程”,不是吗?的确很相似,然而这里更强调“抽象”。依赖倒置原则,究竟倒置在哪里?在依赖倒置原则中的倒置指的是和一般OO设计的思考方式完全相反。举个例子,现在你需要实现一个比萨店,你第一件想到的事情是什么?我想到的是一个比萨店,里面有很多具体的比萨,如:芝士比萨、素食比萨、海鲜比萨……比萨店是上层模块,比萨是下层模块,如果把比萨

2020-11-27 22:39:32 201

原创 开闭原则--学习笔记

开闭原则 软件对象(类、模块、方法等)应该对于扩展是开放的,对修改是关闭的。比如:一个网络模块,原来只有服务端功能,而现在要加入客户端功能,那么应当在不用修改服务端功能代码的前提下,就能够增加客户端功能的实现代码,这要求在设计之初,就应当将客户端和服务端分开。公共部分抽象出来。问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。解决办法:当软件需要变化时,尽量通过扩展软

2020-11-26 23:51:26 159

原创 接口隔离原则--学习笔记

接口隔离原则(ISP)设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块做出抽象。设想该模块由一个类实现,我们可以把系统抽象成一个接口。但是要添加一个新的模块扩展程序时,如果要添加的模块只包含原系统中的一些子模块,那么系统就会强迫我们实现接口中的所有方法,并且清寒要编写一些哑方法。这样的接口被称为肚胖接口或者被污染的接口,使用这样的接口将会给系统引入一些不当的行为,这些不当的行为可能导致不正确的结果,也可能导入资源浪费。1.定义接口隔离原则(Interface Segregatio

2020-11-25 23:16:28 129

原创 里氏替换原则--学习笔记

定义里氏替换原则的定义是:所有引用基类的地方必须能透明化地使用其子类的对象。里氏替换原则针对的问题有一个功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。里氏替换原则的解决方案当使用继承的时候,遵循里氏替换原则。类B继承类A的时候,除了添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法。继承包含这样一层含义:父类中

2020-11-24 19:27:59 361

原创 单一职责原则--学习笔记

单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式与实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责

2020-11-22 22:34:28 110

原创 文档对象模型DOM--学习笔记

定义文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。它是一种与平台和语言无关的应用程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www文档的风格(目前,HTML和XML文档是通过说明部分定义的)。文档可以进一步被处理,处理的结果可以加入到当前的页面。DOM是一种基于树的API文档,它要求在处理过程中整个文档都表示在存储器中。另外一种简单的API是基于事件的SAX,它可以用于处理很大的XML文档,由于大,所以不

2020-11-08 16:40:27 451 1

原创 关于Ajax请求中的URL路径

ajax的url有两种,一种是绝对路径,另一种是相对路径。一、绝对路径:包括协议名称、主机地址、端口、web项目名称等的完整请求路径。例如:$.ajax({url:“http://localhost:8080/webname/test”});好处:比如在webA项目中的ajax需要请求webB项目中的服务,则必须使用绝对路径。坏处:使用绝对路径要求古地理更web项目的名称,如果webB项目重命名了,则对应的ajax请求都需要修改。二、相对路径:不需要协议名、主机地址、端口、web项目名称,只

2020-11-07 22:39:11 4813 1

原创 浏览器跨域访问

什么是跨域资源共享跨源资源共享 (CORS)是http-基于标头的机制,允许服务器指示任何其他起源S(域、协议或端口),而不是浏览器应该允许加载资源的自身。CORS还依赖于浏览器向承载跨源资源的服务器发出“预飞”请求的机制,以检查服务器是否允许实际请求。在该预运行中,浏览器发送指示将在实际请求中使用的HTTP方法和标头的标头。造成跨域的两种策略浏览器的同源策略会导致跨域,这里同源策略又分为以下两种DOM同源策略:禁止对不同源页面DOM进行操作。这里主要场景是iframe跨域的情况,不同域名的if

2020-11-06 23:18:00 669 2

转载 前端 UI 组件:组件特征

构成元素一个完整的具备功能的 UI 组件的构成,有结构(structure)、表现(presentation)和行为(behavior)这三个方面。为什么强调是「完整的具备功能的 UI 组件」?是因为它是一个最全的特征集合,而其他的「UI 组件」可能会缺少一些特征,从而使分析不那么完善。看到「结构」、「表现」与「行为」这三个词,作为一名有经验的前端开发者,很自然地就会想到很久很久之前开始一直提倡的前端开发的关注点分离——HTML 负责组织页面结构,CSS 负责网页内容的表现样式,JS 则负责用户与网页之

2020-11-04 20:50:15 869 1

原创 数据访问对象DAO和DAO模式--学习笔记

DAO(Data Access Object)DAO(Data Access Object)数据访问对象是一个面向对象的数据库接口,存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。DAO模式对外提供相应的接口在面向对象设计过程中,有一些"套路”用于解决特定问题称为模式。DAO 模式提供了访问关系型数据库系统所

2020-11-02 20:04:13 748

原创 结构化程序设计--学习笔记

结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构化程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更有效更容易原则结构化程序设计采用自顶向下、逐步求精的设计方法,各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口。结构化程序设计的原则可表示为:程序=(算法)+(数据结构)。算法是一个独立的整体,数据结构(包含数据类型与数据)也是一个独立的整体。两者分开设计,.

2020-11-01 18:18:09 665

原创 Web前后端的分离与耦合

关于前后端的定义,大体来说是这样的:前端负责的内容主要有页面路径管理,页面对应数据的显示与管理等等;后端负责的内容主要有数据的提供,数据的计算,安全性管理等等;前后端的通信一般通过HTTP请求来实现;当然这里也有个例外情况,比如有一部分功能可能要求实时性,像类似聊天类的功能,共享文档的功能,画板分享的功能,多人协同操作的功能等等,需要通过socketio这样的通信机制进行。再细分一下讲,单一的程序框架模型会是MVC(Model-View-Controller)结构的。前后端分离以后,后端会有Model/E

2020-10-30 22:17:39 1094

原创 Why Software Development Methodologies Suck

围绕软件开发实践和方法论,总有很多教条式的口水仗。阶段式(phase-gate)方法能够有效管理软件开发过程的风险,还是说只是风险管理中的花哨噱 头?TDD真的能够促生出高品质软件?结对编程是代码评审的有效替代抑或只是增加了商议沟通代价?我想说,虽然缺乏证据判断这些论调的谬处,但有两条常用的法则能够帮助我们选择好的实践,同时,提升我们所提供软件的价值:划小开发周期以及提升反馈效率。Michael Feathers给出了以下观点:我认为,我们最终还是得倚重开发者的能力,这才是个更重要的考量因素,而非选择哪

2020-10-28 21:42:05 151

原创 《软件工程》这门课程,你是否有这样的疑问

软件工程是不是教会不怎么会写程序的人开发软件呢?Software engineering , of course, presents itself as another worthy cause , but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accep

2020-10-27 23:26:14 928

原创 内置对象session与httpSession对象--JavaWeb学习笔记

Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。而session机制采用的是在服务器端保持 HTTP 状态信息的方案 。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否包含了一个session标识.

2020-10-26 22:38:28 169

转载 getParameter()与getAttribute()--Javaweb学习笔记

getParameter和getAttribute区别(超详细分析) 对getParameter过程,如下图: 对getAttribute过程,如下图: 两者区别: ①getParameter()获取的是客户端设置的数据。 getAttribute()获取的是...

2020-10-26 22:07:21 169

原创 轻量化设计

关于轻量化设计,相信也是热门讨论话题,从字面意思上来看「轻量」的反义词就是臃肿、拖沓,反映到产品设计中就是界面内容过载,操作步骤繁琐。如果非要用一个字来定义,那就是“多”,内容多,步骤多。轻量化设计是,去除繁杂厚重的装饰效果,转而向“扁平化”风格发展,采用二维平面化元素,避免使用阴影、渐变、投影等立体效果的设计,图片、按钮、导航简洁利落,拒绝羽化、阴影这样的特效,为应用带来简洁、清爽的美感。...

2020-10-25 21:44:32 3612

原创 软件工程方法论对我们软件开发的用处

软件工程方法论采用软件工程方法论开发软件的时候,从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行开发。前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的物理细节。每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,通过之后这个阶段才算结束:如果检查通不

2020-10-23 22:45:25 416 1

原创 工作分解结构WBS

WBS:工作分解结构(Work Breakdown Structure), 创建WBS是把项目工作按阶段可交付成果分解成较小的,更易于管理的组成部分的过程。WBS是项目管理重要的专业术语之一。WBS的基本定义 :以可交付成果为导向对项目要素进行的分组,它归纳和定义了项目的整个工作范围每下降一层代表对项目工作的更详细定义。无论在项目管理实践中,还是在PMP,IPMP考试中,工作分解结构(WBS)都是最重要的内容之一。WBS总是处于计划过程的中心,也是制定进度计划、资源需求、成本预算、风险管理计划和采购计划等

2020-10-22 16:42:44 3074

原创 形式化方法

形式化方法英文的名称是formal methods。在逻辑科学中是指分析、研究思维形式结构的方法。它把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出其中各个部分相互联结的方式,如命题中包含概念彼此间的联结,推理中则是各个命题之间的联结,抽取出它们共同的形式结构;再引入表达形式结构的符号语言,用符号与符号之间的联系表达命题或推理的形式结构。例如,把全称肯定命题,用符号形式化为“SAP”;把联言命题、假言命题分别形式化为:“p∧q、“p→q”。又例如:一个具体的假言联言推理“如果这种金属是纯铝,那

2020-10-21 23:24:10 494

原创 体系结构框架MVC与MVP的区别

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。...

2020-10-20 23:21:02 263

原创 分治(Divide-and-Conquer)

分治法,字面意思是**“分而治之”,就是把一个复杂的问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并。这个思想是很多高效算法的基础,例如排序算法**(快速排序,归并排序),傅里叶变换(快速傅里叶变换)等。分治法的基本思想将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治策略对于一个规模为n的问题,若该问题可以容易的解决(比如规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这

2020-10-20 23:14:40 453

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除