自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (1)
  • 收藏
  • 关注

原创 分布式物联网(IOT)服务实战(二)-消息通讯处理服务集成Netty

Netty简介官网的简介:Netty是一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化和简化了诸如TCP和UDP套接字服务器之类的网络编程。“快速简便”并不意味着最终的应用程序将遭受可维护性或性能问题的困扰。 Netty经过精心设计,结合了许多协议(例如FTP,SMTP,HTTP以及各种基于二进制和基于文本的旧协议)的实施经验。结果,Netty成功地找到了一种无需妥协即可轻松实现开发,性能,稳定性和灵活性的方法。百度的介绍:Netty是由JBOSS提

2021-04-15 11:30:24 816

原创 分布式物联网(IOT)服务实战(一)-初步搭建(Spring Cloud)

Spring Cloud简介官网(https://spring.io/projects/spring-cloud)简介:Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的一些常见模式(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态)。分布式系统的协调导致样板式样,并且使用Spring Cloud开发人员可以快速站起来实现这些样板的服务和应用程序。它们可以在任何分布式环境中正常工作,包括开发人员自己的笔记本电脑,裸机数据

2021-03-30 17:30:46 1686 1

原创 Java高级工程师常见面试题-总结

《Java高级工程师常见面试题(一)-Java基础 》《Java高级工程师常见面试题(二)-Java IO》《Java高级工程师常见面试题(三)-Java Web》《Java高级工程师常见面试题(四)-JVM》《Java高级工程师常见面试题(五)-开源框架》《Java高级工程师常见面试题(六)-多线程》《Java高级工程师常见面试题(七)-网络通信》《Java高级工程师...

2018-07-23 10:03:43 7871 2

原创 IntelliJ IDEA For Mac 快捷键

IntelliJ IDEA For Mac 快捷键Mac键盘符号和修饰键说明⌘ Command⇧ Shift⌥ Option⌃ Control↩︎ Return/Enter⌫ Delete⌦ 向前删除键(Fn+Delete)↑ 上箭头↓ 下箭头← 左箭头→ 右箭头⇞ Page Up(Fn+↑)⇟ Page Down(Fn+↓)Home Fn + ←End Fn + →⇥ 右制表符(Tab键)⇤ 左制表符(Shift+Tab)⎋ Escape (Esc)一、Edit

2020-06-09 15:29:26 263

原创 Java高级工程师常见面试题(一)-Java基础

博主其他相关文章:《Java高级工程师常见面试题-总结》1. String类为什么是final的。多线程安全,将字符串对象保存在字符串常量池中共享效率高2. HashMap的源码,实现原理,底层结构。HashMap基于哈希表的 Map 接口的实现。允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的...

2020-06-05 11:58:36 8232 1

原创 Java高级工程师常见面试题(九)-设计模式

1. 单例模式:饱汉、饿汉。以及饿汉中的延迟加载,双重检查1)饿汉模式://饿汉模式,很饿很着急,所以类加载时即创建实例对象public class Singleton1 {private static Singleton1 singleton = new Singleton1();private Singleton1(){}public static Singlet...

2019-06-24 15:12:57 1117

原创 Java高级工程师常见面试题(八)-数据库MySql

1. MySql的存储引擎的不同存储引擎查看MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5.1,可以使用:SHOW ENGINES如果要想查看数据库默认使用哪个引擎,可以通过使用命令:SHOW VARIABLES LIKE 'storage_engine';来查看,查询结果为:在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具...

2019-06-03 14:57:11 3965

原创 详细介绍http

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。点击这里了解 http 1.0 vs 2.0 区别。特点 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不...

2018-09-29 11:05:04 293

原创 四次挥手

客户端先发送FIN,进入FIN_WAIT1状态 服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态 服务端发送FIN,进入LAST_ACK状态 客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态 TIME_WAIT的状态就是主动断开的一方(这里是客户端),发送...

2018-09-27 17:09:22 244

原创 TCP粘包和拆包

产生的原因 应用程序写入数据的字节大小大于套接字发送缓冲区的大小 进行MSS大小的TCP分段。MSS是最大报文段长度的缩写。MSS是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。所以MSS并不是TCP报文段的最大长度,而是:MSS=TCP报文段长度-TCP首部长度 以太网的payload大于MTU进行IP分片。MTU指:一种通信协议的某...

2018-09-26 14:14:31 325

原创 三次握手

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端...

2018-09-03 14:35:05 208

原创 dns使用的协议

既使用TCP又使用UDP首先了解一下TCP与UDP传送字节的长度限制:UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。区域传送时使用TCP,主要有一下两点考虑: 辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否...

2018-08-30 14:41:05 1812

原创 Java高级工程师常见面试题(七)-网络通信

1. http是无状态通信,http的请求方式有哪些,可以自己定义新的请求方式么。HTTP是无状态的,它的底层协议是由状态的TCP,但是HTTP的一次完整协议动作,里面是使用有状态的TCP协议来完成的。而每次协议动作之间没有任何关系。例如:第7次请求HTTP协议包,并不知道,这个包是为了什么?它或许是因为上次没有请求成功而重传,或许是上次的后续请求,或许是其他的,这些HTTP自身都不知道。...

2018-08-20 15:28:28 4775

原创 分布式服务架构学习(十一):实现自己的序列化工具引擎(十)-序列化JBoss Marshalling实现

JBoss Marshalling是一个Java对象序列化包,兼容Java原生的序列化机制,对Java原生序列化机制做了优化,使其在性能上有很大提升。在保持跟java.io.Serializable接口兼容的同时增加了一些可调的参数和附加特性,这些参数和附加特性,可通过工厂类进行配置,对原生Java序列化是一个很好的替代。代码如下:package ares.remoting.framew...

2018-08-08 11:29:17 693

原创 分布式服务架构学习(十):实现自己的序列化工具引擎(九)-序列化Avro实现

Avro是一个数据序列化的项目,最开始是Hadoop的子项目之一,最后加入Apache成为独立的开元项目。Avro提供的功能类似于其他的编组系统,如Thrift、protobuf等。Aro的主要不同之处在于:动态类型、无标记数据、不用手动分配字段ID。另外,Avro支持两种序列化编码方式:二进制编码和JSON编码。代码如下:package ares.remoting.framew...

2018-08-08 11:21:06 213

原创 分布式服务架构学习(九):实现自己的序列化工具引擎(八)-序列化Thrift实现

与protobuf类似,适用Thrift之前,需要编写以.thrift结尾的IDL文件,再适用Thrift提供的编译器生成对应的代码。对java而言,所生成的java bean都集成了类org.apache.thrift.TBase。代码如下:package ares.remoting.framework.serialization.serializer.impl;import ar...

2018-08-08 11:11:00 325

原创 分布式服务架构学习(八):实现自己的序列化工具引擎(七)-序列化protostuff实现

protostuff基于Google protobuf,其中,protostuff-runtime实现了无需预编译的Java Bean进行protobuf序列化/反序列化的能力。对于仅适用Java语言,且无需跨语言的适用场景,protostuff继承了Google protobuf的高性能的同事免去了编写.proto文件的麻烦,是非常值得推荐的序列化/反序列化方案。代码如下:pack...

2018-08-08 10:58:33 242

原创 分布式服务架构学习(七):实现自己的序列化工具引擎(六)-序列化protobuf实现

protobuf是Google的一种数据交换格式,它独立于语言,独立于平台。它是一个纯粹的展示层协议,可以和各种传输层协议一起使用,它的文档也非常完善。protobuf具有广泛的用户基础,空间开销小及高解析性能是其亮点,非常适合于公司内部对性能要求高的RPC调用。由于其解析性能高,序列化后数据量相对少,也适合应用层的持久化场景。它的主要问题在于需要编写.proto IDL文件,使用起来工作...

2018-08-07 19:56:10 207

原创 分布式服务架构学习(六):实现自己的序列化工具引擎(五)-序列化Hessian实现

Hession是一个支持跨语言传输的二进制序列化协议,相对于Java默认的序列化机制,Hessian具有更好的性能与易用性,而且支持多种不同的语言。其中,AbstractSerializerFactory、AbstractHessianOutput、AbstractSerializer、AbstractHessianInput、AbstractDeserializer是Hessian实现序列化和反...

2018-08-07 19:34:33 280

原创 分布式服务架构学习(五):实现自己的序列化工具引擎(四)-序列化JSON实现

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。相比XML,JSON码流更小,而且保留了XML可读性好的优势。JSON序列化常用的开元工具有如下几个:Jackson 阿里开源的fastjson Google开发的GSON相比较而言,Jackson与fastjson比GSON的性能要好。Jackson、GSON相对fastjson稳定性更好,...

2018-07-31 15:52:17 290

原创 分布式服务架构学习(四):实现自己的序列化工具引擎(三)-序列化XML实现

XML序列化反序列化我们使用XStream开源工具包,引入maven,代码如下:<!-- xml --> <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</a...

2018-07-27 11:09:51 170

原创 分布式服务架构学习(三):实现自己的序列化工具引擎(二)-序列化java实现

首先,为抽象出一个序列化/反序列化通用服务,定义接口ISerializer.java,代码如下:package ares.remoting.framework.serialization.serializer;/** * @author fuss created on 18/7/23. * @version $Id$ */public interface ISerializer ...

2018-07-24 10:19:37 221

原创 solr学习-总结

《solr学习(一)-solr 7.2.1搭建(windows系统)》《solr学习(二)-java调用solr 7.2.1》《solr学习(三)-用jetty启动调用solr 7.2.1》《solr学习(四)-solr 7.2.1 导入Mysql数据库,表数据》项目要集成solr,简单的学习了一下,如果以后遇到实际问题,还会陆续的添加,如有疏漏欢迎指正。...

2018-07-23 10:10:33 311

原创 分布式服务架构学习(二):实现自己的序列化工具引擎(一)-引擎实现

分布式项目中,也许会用到不同的序列化方式,自己整理了常见的序列化方式,手写了一个序列化引擎。引擎SerializerEngine.java代码如下:package ares.remoting.framework.serialization.engine;import ares.remoting.framework.serialization.common.SerializeType...

2018-07-23 09:54:45 477

原创 分布式服务架构学习(一):实现自己的RPC框架(采用Java Socket)

RPC实现原理图:1、Service API对应服务接口。HelloService.java代码如下:package com.shan.rpc.service;public interface HelloService { public String sayHello(String content);}2、Service Impl对应服务接口的实现:HelloSe...

2018-07-13 15:20:31 993

原创 Spring Boot特性——改变Spring开发方式

Spring Boot提供了四个主要特性,能够改变开发Spring应用程序的的方式:Spring Boot Starter:它将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或者Gradle中;自动配置:Spring Boot的自动配置特性利用了Spring4对条件化配置的支持,合理的推测应用所需的bean并自动化配置它们;命令行接口(Command-lin...

2018-07-07 12:08:06 718

原创 Java高级工程师常见面试题(六)-多线程

博主其他相关文章:《Java高级工程师常见面试题-总结》1. Java创建线程之后,直接调用start()方法和run()的区别调用run会在当前线程中执行方法,调用start会开启一条新线程来执行方法。2. 常用的线程池模式以及不同线程池的使用场景newCachedThreadPool:底层:返回ThreadPoolExecutor实例,corePoolSize为0;maxi...

2018-07-06 14:47:04 10645 1

原创 Java高级工程师常见面试题(五)-开源框架

博主其他相关文章:《Java高级工程师常见面试题-总结》1. hibernate和ibatis的区别1.ibatis非常简单易学,hibernate相对较复杂,门槛较高。2.二者都是比较优秀的开源产品3.当系统属于二次开发,无法对数据库结构做到控制和修改,那ibatis的灵活性将比hibernate更适合4.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度...

2018-06-26 15:07:04 1874

原创 Java高级工程师常见面试题(四)-JVM

博主其他相关文章:《Java高级工程师常见面试题-总结》1. Java的内存模型以及GC算法1.JVM内存模型1.1程序计数器 程序计数器是众多编程语言都共有的一部分,作用是标示下一条需要执行的指令的位置,分支、循环、跳转、异常处理、线程恢复等基础功能都是依赖程序计数器完成的。 对于Java的多线程程序而言,不同的线程都是通过轮流获得cpu的时间...

2018-06-25 19:04:09 5459 1

原创 Java高级工程师常见面试题(三)-Java Web

博主其他相关文章:《Java高级工程师常见面试题-总结》1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。cookie 和session 的区别:1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗, 考虑到安全应当使...

2018-06-25 14:09:04 2561

原创 Java高级工程师常见面试题(二)-Java IO

博主其他相关文章:《Java高级工程师常见面试题-总结》1. 讲讲IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞。基于字节的io操作:基于字符的io操作: IO常用类文件流:FileInputStream/Fil...

2018-06-25 10:52:04 5469

原创 springmvc+mybatis+shardingsphere(shardingjdbc)实现数据库(mysql)读写分离架构

在存在大量读操作的场景,可以采用数据库读写分离的机制来加快查询速度。mysql本身就支持多服务实现读写分离,而springmvc要实现可以自己写读写分离的代码实现,其基本原理就是采用aop原理,拦截特定的自定义注解方法,通过不同的参数调用不同的数据源,这个网上有很多例子。如果是已经存在的系统改造或者自己不想写代码,也可以采用已经成熟的框架,本人使用的是sharding-sphere的shardin...

2018-06-12 10:45:29 9664 7

转载 java保留两位小数4种方法

import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public class format { double f = 111231.5585; public void m1() { Big...

2018-04-17 15:15:08 468

转载 redis常用命令

一、redis启动:    本地启动:redis-cli    远程启动:redis-cli -h host -p port -a password    Redis 连接命令   AUTH password 验证密码是否正确   ECHO message 打印字符串   PING 查看服务是否运行   QUIT 关闭当前连接   SELECT index 切换到指定的数据库           ...

2018-04-09 10:01:29 157

转载 Linux: grep多个关键字“与”和“或”

1、或操作 grep -E '123|abc'filename // 找出文件(filename)中包含123或者包含abc的行 egrep '123|abc' filename // 用egrep同样可以实现 awk '/123|abc/' filename // awk 的实现方式2、与操作grep pattern1 files| grep pattern2 :显示既匹配 pat...

2018-04-08 13:17:35 7482

原创 用 maven 搭建 springmvc + dubbo + zookeeper 框架(生产者、消费者)

首先要根据《maven搭建springmvc(eclipse)》新建3个maven项目:消费者项目(dubbo-consumer)、生产者项目(dubbo-provider)、公共接口项目(dubbo-interface),如图:公共接口项目:接口文件DemoService.java代码:package com.shan.interf.service;public interface Demo...

2018-03-20 15:49:16 431

翻译 霍金在 GMIC 2017 开幕式上的主题演讲

让人工智能造福人类及其赖以生存的家园在我的一生中,我见证了社会深刻的变化。其中最深刻的,同时也是对人类影响与日俱增的变化,是人工智能的崛起。简单来说,我认为强大的人工智能的崛起,要么是人类历史上最好的事,要么是最糟的。我不得不说,是好是坏我们仍不确定。但我们应该竭尽所能,确保其未来发展对我们和我们的环境有利。我们别无选择。我认为人工智能的发展,本身是一种存在着问题的趋势,而这些问题必须在现在和将来...

2018-03-15 11:42:59 475

原创 敏捷开发-Scrum框架介绍

Scrum 使用迭代的开发方式,每一次迭代,都会经历一个“计划-实施-验证-反思”的工程。Scrum 框架包括3个角色,5个会议,3套工具。3个角色:    1、SM:Scrum Master,Scrum 过程管理者,服务于PO、团队和组织。    2、PO:Product Owner,对产品 Roadmap 和 Backlog 负责,确保产品价值最大化。    3、Dev Team:架构师、开发...

2018-03-09 10:37:19 806

原创 zookeeper 下载、安装、启动(windows)

1、下载zookeeper,地址:http://www.apache.org/dyn/closer.cgi/zookeeper/2、下载完成后解压,打开conf 目录下,找到zoo_sample.cfg文件,将其重命名成zoo.cfg,Zookeeper 在启动时会找这个文件作为默认配置文件。3、我们在Zookeeper的根目录下新建一个文件夹dataTmp,修改zoo.cfg中dataDir配置...

2018-03-07 17:54:48 2013

原创 maven搭建springmvc(eclipse)

1、新增maven项目,new->project,如图:2、选择Maven Project点击Next,如图:3、选择自己的工作空间,点击Next,如图:4、填写信息后,点击Finish,如图:图中的报错是因为找不到HttpServlet类,可通过导入Tomcat到工作目录或者通过Maven添加HttpServlet类所在的servlet-api.jar;<dependency>...

2018-03-07 14:49:08 310

commons-attributes-api.jar

commons-attributes-api.jar

2014-03-26

空空如也

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

TA关注的人

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