主页

设计模式(持续更新)

简介 什么是设计模式呢?其实设计模式没有想象中那么高大上,设计模式其实就是以前的程序员大牛们长期编程总结下来的一些经验,也就是我们平常所说的最佳实现,换句话说就是按照这种方式来写我们的代码,会让我们的代码变得更加“优美”。 这里“优美”的定义显然当然不是指我们的字写得漂亮,而是指我们的代码比较合理,更容易更改,更容易适应需求。 我们可以需要一个更加专业一点的描述 在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。    设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对...

阅读更多

关于技术的学习

关于问题 问题链接:关于技术的学习 两三年前只用会个SSH,SpringMVC,Hibernate,Oracle就能混个工作了,如今随着互联网的发展,各种狂拽炫酷的技术层出不穷,什么CDN,中间件,zookeeper,dubbo,redis,codis,垂直水平拆库。。。甚至这些都还没搞懂,又出现了微服务之类的技术。各种技术如此层出不穷,工作中用的技术又很老旧,我们在互联网的浪潮下怎么拥抱变化,不让自己被互联网时代淘汰,同时又不用在各种技术的学习上顾此失彼? 回答 关于这个问题和我 我想我对这个问题可以说是相当熟悉了,因为我就亲身经历过这个问题,其实也没多久,就年初吧,那个时候刚刚开始准备实习春招,我的水平大概是在对Java的一些多线程/反射/socket有一些初级的认识和...

阅读更多

2017编程提高第5节课——面向对象设计(5)

需求 一个ATM是一台机器,包含读卡设备,显示屏,吐钞口,存钞口,键盘,打印机 当机器空闲时,会显示一个欢迎消息,此时键盘和存钞口都是不活动的,直到一张银行卡被插入,读卡器会尝试读取这张卡,如果不可读,会提示用户并且弹出卡片 如果卡片可读,读卡设备会读取账号,然后要求用户输入密码, 用户的输入应该显示为星号,而不是真正输入的数字。 如果用户输入的密码正确,则显示主菜单; 如果不正确,再给用户两次输入机会,如果第三次依然失败,ATM就吞卡 主菜单提示用户可以:1.存款 2.取款 3.转账 4.查看余额 用户可以选定交易,提供相关信息,交易完成后,返回主菜单假设:每个银行卡只对应一个储蓄账号 如果选择了存款交易,ATM要求用户输入存款的金额,然后在存钞口放入钞票 ...

阅读更多

2017编程提高第4.5节课——Web SSO

Web登录的本质是什么? HTTP是个无状态的协议 什么是无状态? 如何增加状态/会话 单个系统的登录 扩展到多个系统:SSO 目标:在一个系统上登录一次,访问别的系统就不用登录了 约束 系统架构,语言可能不同 域名可能不同 方案1: 共享cookie 共享cookie的问题 Cookie不能跨域 abc.com 产生的cookie不能被xyz.com访问 域名映射 abc.com à abc.sso.com def.com ->def.sso.com ...

阅读更多

Vue 2.0 Admin后台管理模板对比

说明 我这边后台想快速使用一些后台管理的模板来构建应用,因为Vue成熟较晚,所以也是尽可能找到一些成熟的模板来使用,仅以此作为记录。 事实上Vue出现的时间也并不长,所以网上针对Vue的一些项目都还很少,以Demo居多,对于想直接使用模板来构建应用的人来说实在是有很大的障碍,当然这也不是说我们就是想直接用模板而懒得自己设计,只是公司需要用在实际环境的时候,还是希望能快速构建然后再慢慢完善,所以模板项目的重要性不言而喻,我在学习Vue的过程中也发现这方面的开源项目比较匮乏,希望以后可以把自己这边的框架开源出去给大家参考使用。 Vue.js框架 vue-admin GenesisUI vue-element-admin COREUI sls-admin vue-...

阅读更多

2017编程提高第4节课——面向对象设计(4)

先来学几个简单的单词 Salary: 薪水 Employee: 员工 Sales Receipt : 销售凭条 Commission:  佣金 Classification: 分类 Payment:  支付 Affiliation : 从属关系 需求 该系统由一个公司数据库以及和雇员相关的数据(例如工作时间卡)组成,系统需要准时地按照规则给员工支付薪水,同时,必须从薪水中扣除各种扣款(会费) 有些雇员是钟点工, 会按照他们雇员记录中每小时的报酬字段的值对他们进行支付,他们每天提交工作时间卡,其中记录了日期以及工作小时数,如果每天工作超过8小时,按1.5倍进行支付。 每周五对他们进行支付。 有些雇员完全以月薪进行支付,每个月的最后一个工作日...

阅读更多

为什么异步IO不能完全取代阻塞IO

问题 问题链接:为什么异步IO不能完全取代阻塞IO 既然异步IO不会让线程阻塞,而且加上回调处理也很方便。为什么java还要用阻塞式IO呢? 回答 umm……首先,异步IO对应的应该是同步IO,阻塞IO对应的是非阻塞IO,虽然两组概念在思想上可以类比着理解,但是实际上是不同的两组东西,不能混着讲,就比如异步阻塞式,同步非阻塞这些方式都是存在的。 那么你想问的是什么呢?好吧╮(╯_╰)╭其实我也不知道,那我就都说说看…… 同步/异步IO 这两个概念是针对消息的通知方式来说的 同步 就是在调用一个功能的时候,这个功能没有得出结果之前,都不会返回。 绝大部分Java方法都是同步的方式,对应生活中的情况也有很多啊,就是很多事情都是要有前提什么的,比如吃饭之前要先煮饭,拉屎(/◔ ◡...

阅读更多

2017编程提高第3节课——面向对象设计(3)

学习UML的好处 终于能看懂领导画的UML图了 终于可以在概念层面和别人交流了 注意: UML不是OOA/OOD, 它只是一种表示法 UML的阴和阳 Class Diagram 类(Class)封装了数据和行为,它是具有相同属性、操作、关系的对象集合的总称 类图展示类及类之间的静态关系 和具体实现/语言无关 Class的图形化标识 分为三部分的矩形 类名 属性(字段) 方法(操作) 修饰符 +public -private #protected 抽象类:斜体字 (或者用«abstract»表达) ...

阅读更多

实体类怎么用上面向对象的原则?

问题 问题链接:【实体类】怎么用上 【面向对象】的原则? 实体类就是和数据库对应的那个类,每个field都和数据库同名的表一一对应 里面只有get set方法 构造方法 实际上就是个数据结构而已 根本不像一个对象 我们学的那些面向对象设计原则 怎么用上? 回答 关于这个问题我似乎以前也有过类似的想法,所以现在重新理一下思路,我想要分享的观点有以下几点 实体类就不能是对象吗? 事实上,面向对象编程仅仅只是一种思想,面向对象编程并没有规定了我们应该怎么怎么写代码,代码应该是怎么样的形式,也没有规定一个类中必须有什么元素。 一个类是不是一个我们认为的一个对象并不是因为这个代码里面写了哪种形式的代码,而在于我们设计它的时候是不是把它当做一个对象,所以实体类为什么就不能是一个对象呢?有...

阅读更多

数据库连接为什么“昂贵”?

关于问题 问题链接:为什么数据库连接很“昂贵”? 关于这个问题,我是没有任何实践经验的,本着能答就答的原则,我是不能答这个问题的,但是刘老师推荐了这个问题,我就决定去找一下答案,权当一道面试题来对待了,毕竟造航母嘛,原理性的东西虽然都很难用上,但是知道多一些总是没有坏处的 第一眼见到这个问题的时候,我想到的就是数据库连接池,因为一直以来我对数据库连接池的印象就是——解决了创建数据库连接开销大的问题,不过就像线程池一样,数据库连接为什么开销大,这个问题倒是从来都没有想过,就像很多面试题一样,我也仅仅只是记住了答案,所以现在有了一个深究的机会整理我从网上搜集到的资料 数据库连接 我们都知道数据库连接创建的开销很大,但是数据库连接的原理是什么呢?到底是哪个环节导致了开销的出现?我还有点懵...

阅读更多

Vue2.0 UI框架对比

简介 Vue UI框架即通过预制的组件达到快速实现精美页面显示效果的框架,减少页面风格的不统一,同时预制了很多的常用组件,如按钮,输入框,文本框,还有一些动画和特效。 UI框架主要以编写CSS样式提供统一风格的组件为主要任务,所以比起功能性的框架,如Vue本身,UI框架会比较简单,所以网上的UI框架相对较多,因此筛选起来,主要按照以下几点来判断: 组件数量 如果组件数量少的话,那么就会面临想要实现某个功能的时候找不到对应的组件,这样的UI框架不完整,不能覆盖到网站的方方面面,影响较大 知名度 一个优秀的公开的项目应该会有比较热闹的社区,和热衷于使用和研究它的网友,这意味着在遇到使用上的问题的时候会比较容易得到帮助 可延续性 UI风格定下来之后就不会轻易改动,如果一个框架不...

阅读更多

Vue 2.0 简单项目创建

前言 老大说要重构后台,现在要调研前端框架,于是对前端一窍不通的我就来研究了一把Vue…… 简介 Vue.js 是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动。 Vue 的三大特点: 易用 已经会了HTML,CSS,JavaScript?即刻阅读指南开始构建应用! 灵活 简单小巧的核心,渐进式技术栈,足以应付任何规模的应用。 性能 17kb min+gzip 运行大小 超快虚拟 DOM 最省心的优化 总而言之,简单和轻量是Vue的最...

阅读更多

2017编程提高第2.5节课——Java并发编程(2)

作业讲评 OCP重构作业 题目 分析 需要抽象的重点概念 Formatter 和 Sender 如何得到Formatter和Sender 实例? 直接new 出来 Logger logger = new Logger(new RawFormatter(), new MailSender()); 使用工厂 SRP重构作业 原始程序:使用面向对象的语言编写面向过程的程序 toAddress, subject, message 应该和某个实例相关, 但是他们遍布程序的各个方法 隐藏的业务问题 在原始的代码中似乎只读取了文件的第一行 User 和Pro...

阅读更多

Spring Boot(二) Spring mvc + Mybatis整合

说明 本文旨在记录spring boot中创建spring mvc + mybatis的整合,网上的各种乱七八糟的整合方式都有,所以把自己的套路记录下来,我采用的整合方式为:gradle + spring mvc + mybatis 项目结构 新建项目完成之后,项目结构如下: main 主目录,放编写的所有代码 Demo2Application 启动文件,项目从这个文件直接部署到内置的tomcat运行 resource static 放静态文件,如js css templates 模板文件的默认目录 application.properties spring配置文件 ...

阅读更多

Spring Boot(一) Spring Boot项目创建

简介 Spring Boot简化了基于Spring的应用开发,你只需要”run”就能创建一个独立的,产 品级别的Spring应用。 我们为Spring平台及第三方库提供开箱即用的设置,这样你 就可以有条不紊地开始。多数Spring Boot应用只需要很少的Spring配置。 Spring Boot的目标是: 为所有Spring开发提供一个从根本上更快,且随处可得的入门体验。 开箱即用,但通过不采用默认设置可以快速摆脱这种方式。 提供一系列大型项目常用的非功能性特征,比如:内嵌服务器,安全,指标, 健康检测,外部化配置。 绝对没有代码生成,也不需要XML配置。 系统要求 默认情况下,Spring Boot 1.4.0.BUILD-SNAPSHOT需要Java7环境,...

阅读更多