编程
令狐义卓
十年Java从业者
展开
-
Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?
面试题dubbo 支持哪些通信协议?支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?面试官心理分析上一个问题,说说 dubbo 的基本工作原理,那是你必须知道的,至少要知道 dubbo 分成哪些层,然后平时怎么发起 rpc 请求的,注册、发现、调用,这些是基本的。接着就可以针对底层进行深入的问问了,比如第一步就可以先问问序列化协议这块,就是平时 RPC 的时候怎么走的?面试题剖析序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序原创 2020-12-10 15:11:46 · 244 阅读 · 0 评论 -
大学四年自学编程,总结了这四条不外传的学习经验!
今天我主要分享的就是:我个人在自学编程过程中的得与失,简单来说就是自己的学习感悟,以及总结的编程学习经验,方法和技巧之类的。同时,我个人会不断的进行自学,掌握更多的编程知识,然后会把自己所学,所领悟到的东西整理编写成适合新手小白学习的入门教程,希望达到的目的就是帮助那些想要学习的新手小白更快更高效的入门。因为我深知自学编程的不容易,尤其是自己刚开始,什么也不懂,遇到问题无从下手,那种感觉真的很难受,所以我刚开始学习编程的时候,真的希望能有个人随时问一问,请教一下,或者有些人可以分享一些编程的学习经验,方原创 2020-12-10 10:29:46 · 459 阅读 · 0 评论 -
什么是TCP/IP?-四张图解释TCP/IP四层协议模型
什么是四层模型第一层:应用层,主要有负责web浏览器的HTTP协议, 文件传输的FTP协议,负责电子邮件的SMTP协议,负责域名系统的DNS等。第二层:传输层,主要是有可靠传输的TCP协议,特别高效的UDP协议。主要负责传输应用层的数据包。第三层:网络层,主要是IP协议。主要负责寻址(找到目标设备的位置)第四层:数据链路层,主要是负责转换数字信号和物理二进制信号。为什么是四层模型通过四层模型可以将应用层的具体数据传输给对应设备例子:我们需要发送一个index.html。两台电脑在应用层..原创 2020-12-08 17:33:29 · 9430 阅读 · 0 评论 -
Java程序员必修内功心法!(内功修炼第四层)
1. 基础1.1. 正确使用 equals 方法Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。举个例子:// 不能使用一个值为null的引用类型变量来调用非静态方法,否则会抛出异常String str = null;if (str.equals("SnailClimb")) { ...} else { ..}运行上面的程序会抛出空指针异常,但是我们把第二行的条件判断语句改为下面这样的话,就不会抛出空指针异常,else 语句块得到执原创 2020-12-08 10:37:55 · 270 阅读 · 0 评论 -
Java程序员必修内功心法!(内功修炼第三层)
Java 核心技术1.1. 反射机制JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。1.1.1.静态编译和动态编译1,静态编译: 在编译时确定类型,绑定对象2,动态编译: 运行时确定类型,绑定对象1.1.2.反射机制优缺点优点: 运行期类型的判断,动态加载类,提高代码灵活度。缺点: 1,性能瓶颈:反射相当于一系列解释操作,通知原创 2020-12-04 14:54:45 · 305 阅读 · 0 评论 -
Java程序员必修内功心法!(内功修炼第二层)
1,Java 面向对象1.1类和对象1.1.1. 面向对象和面向过程的区别1,面向过程 :面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发。但是,面向过程没有面向对象易维护、易复用、易扩展。2,面向对象 :面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是,面向对象性能比面向过程低。原创 2020-12-02 12:18:42 · 243 阅读 · 0 评论 -
转行程序员,报班?自学?你真的了解培训机构吗?
培训机构,套路满满,这些坑你不能不知道。大家好,我是令狐,很多小伙伴给我留言,希望我讲一讲IT线下培训机构,今天我就满足你们大家的心愿,跟你们聊一聊IT培训机构那些你们不知道的内幕。一提到IT培训机构呢很多人都会觉得不靠谱,感觉很坑,确实我有很多学生跟我讲过自己被坑的经历,有的一年时间就花了七八万,到最后什么也没有学会,工作也没有找到,确实是很坑人。看过我之前的文章的都知道,目前我也正是一名线上一对一培训的Java老师,我之前接触过很多培训机构,所以多多少少知道一些大家不知道的事情,今天这篇文章就给原创 2020-12-01 10:55:39 · 614 阅读 · 0 评论 -
Java程序员必修内功心法!(内功修炼第一层)
1. Java 基本功1.1. Java 入门(基础概念与常识)1.1.1. Java 语言有哪些特点?简单易学;面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性);可靠性;安全性;支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持);支持网络编程并且很方便( Java 语言诞生本身就是为简化网络编程设计的,因此 Java 语言不仅支持网络编程而且很方便);编译与解释并存;原创 2020-11-30 15:19:30 · 1115 阅读 · 0 评论 -
关于 Spring Boot 注解你了解多少?
一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration 等同于spring的XML配置文件;使用Java代码可以检查类型安全。@EnableAutoConfiguration 自动配置。@ComponentSca原创 2020-11-30 13:38:20 · 163 阅读 · 0 评论 -
原创 | 万万没想到,HashMap默认容量的选择,竟然背后有这么多思考!?
集合是Java开发日常开发中经常会使用到的,而作为一种典型的K-V结构的数据结构,HashMap对于Java开发者一定不陌生。在日常开发中,我们经常会像如下方式以下创建一个HashMap:Map<String, String> map = new HashMap<String, String>();但是,大家有没有想过,上面的代码中,我们并没有给HashMap指定容量,那么,这时候一个新创建的HashMap的默认容量是多少呢?为什么呢?本文就来分析下这个问题。什么是容量在转载 2020-11-28 15:02:27 · 344 阅读 · 0 评论 -
一道“史上最难”java面试题引发的线程安全思考
1.前言最近偶然间看见一道名为史上最难的java面试题,这个题让了我对线程安全的有了一些新的思考,给大家分享一下这个题吧:public class TestSync2 implements Runnable { int b = 100; synchronized void m1() throws InterruptedException { b = 1000; Thread.sleep(500); //6 System原创 2020-11-26 15:12:42 · 181 阅读 · 0 评论 -
无锁队列Disruptor
1.何为队列听到队列相信大家对其并不陌生,在我们现实生活中队列随处可见,去超市结账,你会看见大家都会一排排的站得好好的,等待结账,为什么要站得一排排的,你想象一下大家都没有素质,一窝蜂的上去结账,不仅让这个超市崩溃,还会容易造成各种踩踏事件,当然这些事其实在我们现实中也是会经常发生。当然在计算机世界中,队列是属于一种数据结构,队列采用的FIFO(first in firstout),新元素(等待进入队列的元素)总是被插入到尾部,而读取的时候总是从头部开始读取。在计算中队列一般用来做排队(如线程池的等待排原创 2020-11-25 16:44:29 · 624 阅读 · 0 评论 -
Java虚拟机:怎么确定对象已经死了?
怎么确定对象已经死了?怎么确定对象已经死了?怎么确定一个对象已经死了?引用计数算法给对象中添加一个引用计数器,每当有个地方引用它,计数器值就加1,引用失效,计数器减1,任何时刻计数器为0的对象就不能再应用了。很难解决对象之间的相互循环引用。引用计数收集器可以很快的执行,并且交织在程序运行中,对程序需要不被长时间打断的实时环境比较有利,但其很难解决对象之间相互循环引用的问题。如下面的程序和示意图所示,对象objA和objB之间的引用计数永远不可能为 0,那么这两个对象就永远不能被回收。publi转载 2020-11-25 13:33:42 · 121 阅读 · 0 评论 -
学员故事|土木男零基础转行Java,一年月薪翻三倍!
“所谓界限,就是到那里为止的意思。守住那界限,就是继续现在所熟悉的感觉,那意味着维持那里的世界、那里的规则和关系,那也代表着,如果不越界,就无法遇见另一个世界的规则和关系。”越界对于很多人来说,是一件艰难而又纠结的事情,或许缺乏勇气,或许缺乏魄力,或许内心深处不愿打破平衡。可对于有些人来说,越界是一件不可不为的事情,因为那意味着新的希望。我再次遇见到阿中的时候,他已经是一个意气风发的Java小组长了,当时我简直要认不出他来!因为一年前的他,胡子拉碴、不修边幅、满脸沧桑,完全不像一个正常的25岁小伙子。也原创 2020-11-24 09:37:40 · 615 阅读 · 1 评论 -
自定义注解!绝对是程序员装逼的利器!!
相信很多人对Java中的注解都很熟悉,比如我们经常会用到的一些如@Override、@Autowired、@Service等,这些都是JDK或者诸如Spring这类框架给我们提供的。在以往的面试过程中,我发现,关于注解的知识很多程序员都仅仅停留在使用的层面上,很少有人知道注解是如何实现的,更别提使用自定义注解来解决实际问题了。但是其实,我觉得一个好的程序员的标准就是懂得如何优化自己的代码,那在代码优化上面,如何精简代码,去掉重复代码就是一个至关重要的话题,在这个话题领域,自定义注解绝对可以算得上是一个大转载 2020-11-21 16:04:59 · 203 阅读 · 0 评论 -
面试官所认为的单例模式
单例模式是23种GOF模式中最简单,也是最经常出现的一种设计模式,也是面试官最常爱考的一种模式,为什么呢? 因为单例模式足够简单,编写一个单例模式代码几分钟就能搞定,所以设计模式中面试官通常会选取单例模式作为出题。 下面把单例模式分几个点,分别说说哪些地方面试官能考你?单例模式的意义通常面试官会很笼统的问你,什么是单例模式?单例模式用来解决了什么痛点?没有单例模式我们会怎么办?单例模式他有什么缺点吗?单例模式是最简单的设计模式之一,属于创建型模式,它提供了一种创建对象的方式,确保只有单个对象被创建。这原创 2020-11-20 09:37:52 · 245 阅读 · 2 评论 -
你应该知道的乐观锁-高效控制线程安全的手段
1.背景最近在修改Seata线程并发的一些问题,把其中一些经验总结给大家。先简单描述一下这个问题,在Seata这个分布式事务框架中有个全局事务的概念,在大多数情况下,全局事务的流程基本是顺序推进不会出现并发问题,但是当一些极端的情况下,会出现多线程访问导致我们全局事务处理不正确。 如下面代码所示: 在我们全局事务commit阶段,有一个如下代码: if (status == GlobalStatus.Begin) { globalSession.changeStatus(GlobalS原创 2020-11-17 15:56:15 · 493 阅读 · 0 评论 -
异步技巧之CompletableFuture
1.Future接口1.1 什么是Future?在jdk的官方的注解中写道A {@code Future} represents the result of an asynchronous * computation. Methods are provided to check if the computation is * complete, to wait for its completion, and to retrieve the result of * the computation原创 2020-11-17 11:03:15 · 427 阅读 · 0 评论 -
一个JIT激进优化引起的可见性误解
背景这篇文章最开始再我的群里面有讨论过,当时想写的这篇文章的,但是因为一些时间的关系所以便没有写。最近阅读微信文章的时候发现了一篇零度写的一篇文章《分享一道阿里Java并发面试题》,对于有关Java并发性技术的文章我一般还是挺感兴趣的,于是阅读了一下,整体来说还是挺不错的,但是其中犯了一个验证可见性的问题。由于微信文章回复不方便讨论,于是我便把之前一些和群友的讨论在这里写出来。如何测试可见性问题因为在群里面我们习惯的有每周一问,也就由我或者群友发现一些由意思的问题然后提问给大家,让大家参与讨论,当时我原创 2020-11-16 11:02:09 · 708 阅读 · 1 评论 -
聊聊ThreadlLocal和引用的那些事
1 背景某一天在某一个群里面的某个群友突然提出了一个问题:"threadlocal的key是弱引用,那么在threadlocal.get()的时候,发生GC之后,key是否是null?"屏幕前的你可以好好的想想这个问题,在这里我先卖个关子,先讲讲Java中引用和ThreadLocal的那些事。2 Java中的引用对于很多Java初学者来说,会把引用和对象给搞混淆。下面有一段代码,User zhangsan = new User("zhangsan", 24);这里先提个问题zhangsan到底是原创 2020-11-14 13:53:58 · 254 阅读 · 0 评论 -
在Java中,你真的会日期转换吗
1.什么是SimpleDateFormat在java doc对SimpleDateFormat的解释如下:SimpleDateFormat是用于以对语言环境敏感的方式格式化和解析日期的具体类。它允许格式化(日期→文本),解析(文本→日期)和规范化。SimpleDateFormat是一个用来对位置敏感的格式化和解析日期的实体类。他允许把日期格式化成文本,把文本解析成日期和规范化。1.1使用SimpleDateFormatsimpleDateFormat的使用方法比较简单:public static原创 2020-11-13 09:24:24 · 132 阅读 · 0 评论 -
为什么开发人员必须了解数据库锁
1.锁?1.1何为锁锁在现实中的意义为:封闭的器物,以钥匙或暗码开启。在计算机中的锁一般用来管理对共享资源的并发访问,比如我们java同学熟悉的Lock,synchronized等都是我们常见的锁。当然在我们的数据库中也有锁用来控制资源的并发访问,这也是数据库和文件系统的区别之一。1.2为什么要懂数据库锁?通常来说对于一般的开发人员,在使用数据库的时候一般懂点DQL(select),DML(insert,update,delete)就够了。小明是一个刚刚毕业在互联网公司工作的Java开发工程师,平转载 2020-11-12 16:04:01 · 245 阅读 · 0 评论 -
走进科学之神秘的零拷贝
前言"零拷贝"这三个字,想必大家多多少少都有听过吧,这个技术在各种开源组件中都使用了,比如kafka,rocketmq,netty,nginx等等开源框架都在其中引用了这项技术。所以今天想和大家分享一下有关于零拷贝的一些知识。计算机中数据传输在介绍零拷贝之前我想说下在计算机系统中数据传输的方式。数据传输系统的发展,为了写这一部分又祭出了我尘封多年的计算机组成原理:早期阶段:分散连接,串行工作,程序查询。 在这个阶段,CPU就像个保姆一样,需要手把手的把数据从I/O接口从读出然后再送给主存。这转载 2020-11-12 09:57:28 · 179 阅读 · 0 评论 -
java接口作用是什么
接口的最主要的作用是达到统一访问,就是在创建对象的时候用接口创建,【接口名】 【对象名】=new 【实现接口的类】,这样你像用哪个类的对象就可以new哪个对象了,不需要改原来的代码,就和你的USB接口一样,插什么读什么,就是这个原理。就像你问的,都有个method1的方法,如果我用接口,我上面就可以one.method1();是吧?那样我new a();就是用a的方法,new b()就是用b的方法这样不方便吗?这个就叫统一访问,因为你实现这个接口的类的方法名相同,但是实现内容不同我用接口来定义对象不转载 2020-11-11 15:57:39 · 421 阅读 · 0 评论 -
如何保证消息的顺序性?
面试题如何保证消息的顺序性?面试官心理分析其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。面试题剖析我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系转载 2020-11-11 09:35:45 · 133 阅读 · 0 评论 -
如果再有人问你分布式锁,这篇文章扔给他
1.背景对于锁大家肯定不会陌生,在Java中synchronized关键字和ReentrantLock可重入锁在我们的代码中是经常见的,一般我们用其在多线程环境中控制对资源的并发访问,但是随着分布式的快速发展,本地的加锁往往不能满足我们的需要,在我们的分布式环境中上面加锁的方法就会失去作用。于是人们为了在分布式环境中也能实现本地锁的效果,也是纷纷各出其招,今天让我们来聊一聊一般分布式锁实现的套路。2.分布式锁2.1为何需要分布式锁Martin Kleppmann是英国剑桥大学的分布式系统的研究员,之转载 2020-11-10 15:51:46 · 272 阅读 · 0 评论 -
如果再有人问你分布式ID,这篇文章扔给他
1.背景在我们的业务需求中通常有需要一些唯一的ID,来记录我们某个数据的标识:某个用户的ID某个订单的单号某个信息的ID通常我们会调研各种各样的生成策略,根据不同的业务,采取最合适的策略,下面我会讨论一下各种策略/算法,以及他们的一些优劣点。2.UUIDUUID是通用唯一识别码(Universally Unique Identifier)的缩写,开放软件基金会(OSF)规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素。利用这些元素来生成UUID。转载 2020-11-10 15:19:40 · 186 阅读 · 0 评论