主页

Kotlin(二) 变量

变量声明 通过val关键字进行变量的声明,并且忽略类型,不需要在声明变量的时候指定它们的类型,事实上kotlin也是通过类型推断来进行变量类型的指定,只是原来手工变成了自动的 // 类型是String val string = "Do you love me?" // 类型是Int val int = 1 // 类型是Double val double = 7.5e6 当然也可以手动指定类型 // Byte类型 val byte: Byte = 127 // Char类型 val char: Char = 'a' // Short类型 val short: Short = 10 // Int类型 val int: Int = 10 // Long类型 val long: Long =...

阅读更多

Kotlin(一) Hello world

概述 Kotlin 是什么 Kotlin是一门把 Java 平台作为目标的新的编程语言。它简洁、安全、优雅而且专注于和 Java 代码间的互操作性。它几乎可以用于如今 Java 遍及的所有地方:服务器端开发、Android 应用开发和更多其他的方面。Kotlin 能够很好的与现有的Java 库和框架并存。而且,它运行的性能不亚于 Java 。 当然,我们关注的最大的一个特点就是Kotlin和Java的无缝配合,即我们无需改变现在的Java代码,可以直接增加Kotlin代码和Java代码一同编译一起运行,大大降低了我们使用Kotlin的门槛。 静态类型 Kotin 是一种静态类型的编程语言。这意味着在编译时就可以确定程序中每一个表达式的类型。编译器可以验证你所访问的对象中的方法和...

阅读更多

建造者模式(Builder Pattern)

简介 建造者模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。 建造者模式又被称为生成器模式,建造模式等,实际上建造者模式的核心就在于把对象的构造过程抽象出来。 让我们举个例子,比如我们常常在电视上看到做菜的节目,做一道菜出来,必须是要经过洗菜,炒菜,放盐,放调料……吧啦吧啦一套程序下来,才能变成我们吃的美味的菜,但是轮到我们自己做的时候,可能就已经不是很记得清步骤了,到底是要先放盐呢还是要先加水呢?这个时候我们就会想到把这个做菜的步骤记录下来,然后自己就可以一步一步按照步骤来做菜了,也许在细致一点,我们还可以把放多少盐加多少水都记下来,这样我们自己做的菜就和电视里面的菜相差无几了。 其实这...

阅读更多

为什么不直接使用socket ,还要定义一个新的websocket 的呢?

关于问题 问题链接:为什么不直接使用socket ,还要定义一个新的websocket 的呢? 首先,要说到这个websocket和socket,umm,只让我和大家一样不约而同地想到一个图: 哈哈哈哈,反正他们之间是没什么直接的联系单的,既然要说区别,就让我们先来理一理这两个东西是个什么玩意儿先。 Websocket WebSocket一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket通讯协定于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范。WebSocket API也被W3C定为标准。   WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,...

阅读更多

单例模式(Singleton Pattern)

小插曲 关于单例模式其实我是没有准备这么早开始写的,不过确实是巧合,我这边刚好准备开始写单例模式,就遇到了一件和单例模式相关的小插曲,让我提前开始准备了单例模式的一些探讨,这个故事是这样的: 今晚老大看我的项目框架,我在Demo里面写了一个关于Gson的单例,因为我们知道Gson没有提供静态方法,但是我们每次只是简单地把类转化为Json就要new一个Gson的实例,显然比较浪费,所以就写了一个单例,umm,我是这么写的 public class GsonUtil { private static Gson gson = null; public Gson getGson () { if (gson == null) { gson = new Gson();...

阅读更多

Spring Boot(三) Spring boot + Hibernate 多租户的使用

多租户 多租户(Multi Tenancy/Tenant) 是一种软件架构,其定义是:在一台服务器上运行单个应用实例,它为多个租户提供服务。 概念是抽象的,但是理解起来并不困难,简单来说就是分组,举个例子:我们管理学校学生的时候,可以按照不同的范围来进行分组,比如我们可以按照学生个人为单位进行分组,也可以按照班级为单位进行分组,然后班级下面有很多的学生,也可以按照年级为单位进行分组,以学校为单位……这样的每一个分组的单位,都可以是我们概念里面说的一个租户。 但是这样不就和我们以前说的按照面向对象来分类是一样的吗?其实是差不多的,但是有着一些细节上的差别,首先多租户架构的概念是针对数据存储的,我们是一个数据服务提供商,假设我们给所有的学校提供服务,对于我们来说,分组是按照学校为...

阅读更多

设计模式(持续更新)

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

阅读更多

关于技术的学习

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

阅读更多

Vue 2.0 Admin后台管理模板对比

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

阅读更多

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

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

阅读更多

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

问题 问题链接:【实体类】怎么用上 【面向对象】的原则? 实体类就是和数据库对应的那个类,每个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的最...

阅读更多

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配置文件 ...

阅读更多