山东青岛电脑学校 专业软件工程师培训,软件人才就业实训中心0532-85025005

java中volatile关键字的含义

 

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。

Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。

 

synchronized 

同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 41

十分钟写个RPC框架

 摘要:    互联网时代,各种RPC框架盛行,细看各种框架,应用层面有各种变化,但是万变不离其宗,RPC最核心的部分基本都是一致的。那就是跟远程的服务器进行通信,像调用本地服务一样调用远程服务。然后在这些基础上可能会附加一些诸如,服务自动注册和发现,负载均衡,就近路由,调用链路记录,远程mock等等功能。今天想给大家分享的是,如果不考虑性能,API易用性,服务发现,负载均衡,环境隔离等其他因素,其实做一个基本功

            互联网时代,各种RPC框架盛行,细看各种框架,应用层面有各种变化,但是万变不离其宗,RPC最核心的部分基本都是一致的。
那就是跟远程的服务器进行通信,像调用本地服务一样调用远程服务。
然后在这些基础上可能会附加一些诸如,服务自动注册和发现,负载均衡,就近路由,调用链路记录,远程mock等等功能。
今天想给大家分享的是,如果不考虑性能,API易用性,服务发现,负载均衡,环境隔离等其他因素,其实做一个基本功能的RPC框架,几分钟就能搞定。
个人认为RPC功能的基石有下面几个 一、序列化协议 二、远程通信报文协议 三、协议报文处理实现。
序列化协议JDK为我们提供了一套自带的序列化协议,虽然不能跨语言,压缩率不高,不过我们只为展示RPC技术,没有考虑其他,如果觉得不好可以使用Hessian ,protobuf,甚至是诸如fastjson这些json序列化的开源框架。
远程通信JDK有一套socket和输入输出流,虽然是同步的,性能不怎么样,但是只为展示RPC技术原理,不考虑其他,为了性能和吞吐量我们可以选择netty进行改造。
通信协议,我只做了一个简单的 MAGIC_NUM+两个字节报文长+序列化对象字节流 的协议,协议上可以增加很多东西,比如版本号,心跳包,状态码,可扩展的报文头等等,不过同样的,这里只为展示RPC原理,不考虑其他的。
协议报文处理部分只是通过报文体里面携带的 类名 方法名,方法参数,做了个简单的反射处理,这部分其实可以扩展的部分很多,比如预先做方法缓存,方法签名使用短命名注册等等,或者想更快还能通过字节码注入的方式自动生成一些模板代码的方式,将反射变成直接的方法调用。

下面直接展示代码吧
首先是传输的对象都是java可序列化对象:
public class RpcCommand implements Serializable{    String className ;    String methodName ;    String[] argumetsType ;    Object[] params ;    public String getClassName() {        return className;    }    public void setClassName(String className) {        this.className = className;    }    public String getMethodName() {        return methodName;    }    public void setMethodName(String methodName) {        this.methodName = methodName;    }    public String[] getArgumetsType() {        return argumetsType;    }    public void setArgumetsType(String[] argumetsType) {        this.argumetsType = argumetsType;    }    public Object[] getParams() {        return params;    }    public void setParams(Object[] params) {        this.params = params;    }}public class RpcResponse implements Serializable{    boolean isException;    Object result ;    Exception exception;    public boolean isException() {        return isException;    }    public void setException(boolean exception) {        isException = exception;    }    public Object getResult() {        return result;    }    public void setResult(Object result) {        this.result = result;    }    public Exception getException() {        return exception;    }    public void setException(Exception exception) {        this.exception = exception;    }}

 

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 20

从 Hello World 说程序运行机制

 

开篇

学习任何一门编程语言,都会从Hello World 开始。对于一门从未接触过的语言,在短时间内我们都能用这种语言写出它的hello world。然而,对于hello world 这个简单程序的内部运行机制,我相信还有很多人都不是很清楚。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 12

Android动态加载技术 简单易懂的介绍方式

 

我们很早开始就在Android项目中采用了动态加载技术,主要目的是为了达到让用户不用重新安装APK就能升级应用的功能,这样一来不但可以大大提高应用新版本的覆盖率,也减少了服务器对旧版本接口兼容的压力,同时如果也可以快速修复一些线上的BUG。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 24

SpringBoot第一讲概览

 

在使用了一段时间的springboot之后,今天决定开始弄一套完整的springboot的教程,说实话在学习springboot之前,个人已经开始厌倦了代码的编写和视频教程的录制,因为每次录制视频教程那怕一个简单的hello world都不得不面对大量的配置文件,一个helloworld测试程序,业务逻辑只是几秒钟的事情,但是却要花上十多分钟来进行配置。现在有了springboot之后,一切都变得简单了,这部分我们会使用几种方式让大家看到springboot是如何让一个项目变得如此简单的。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 27

全栈必备MySQL性能调优

 

对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库……林林总总,但是第一必备技能还应该是MySQL。从LAMP的兴起,到Mariadb的出现,甚至PG的到来,熟练的MySQL技能都是大有用武之地的。

MySQL数据库技术的方方面面也是很多,这里只涉及必备的性能调优,推崇从下向上的性能调优,主要包括运行环境,配置参数,SQL性能,和系统架构设计调优。

运行环境调优

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 19

设计模式中的撩妹神技--下篇

 

开篇前言

 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(*∩_∩*)′,是否想在双十一摆脱单身,和亲爱的ta牵手漫步,在寒风中紧紧相拥,都说艺术来源于生活,却高于生活,作为人类智慧的结晶设计模式,她蕴藏着丰富的撩妹技术,今天这篇博文,小编主要介绍状态模式中的撩妹神技。


       什么是状态模式

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 18

堆排序以及最大优先队列

 堆排序(heapsort)是一种比较快速的排序方式,它的时间复杂度为O(nlgn),而且堆排序具有空间原址性:即任何时候只需要有限(常数个)的空间来存储临时数据。而且堆排序还被应用在构造优先级队列中,本文将会用Java实现一个最大堆,并利用最大堆实现优先级队列。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 22

为什么有些程序员宁愿降薪也要离开创业公司?

 

本文共分为四个部分:

案例:4人招聘团队,1个月,0入职

趋势:资本寒冬带来的市场异动

现状:创业公司的招聘窘境

干货:初创企业找人的正确姿势

 

案例:4人招聘团队,1个月,0入职

先说一个小道消息吧,现在互联网人才市场上最紧俏的两个岗位,一个是程序员,一个新媒体。新媒体难到什么程度,我不清楚,但招一个好的程序员多难,我是有概念的。

前段时间调研了一家创业公司,他们要招3名后端开发的程序员。这家公司已经Pre-A轮了,暂时不差钱那种,需要扩充研发团队,他们当时投入了4个行政实习生,花了一个月,从各个渠道(包括猎头)找到了500份简历,筛出了大概100份符合要求的,但最后成功约面只有30人左右,发出了1个offer,但这个唯一的offer被求职者拒绝了。

Tags:

发布: 青软IT学院 分类: 未分类 评论: 0 浏览: 24