专注开发,架构知识
暂时未有相关通用技术能力~
阿里云技能认证
详细说明昨天没有写007的文章,今天主要在写程序,我在写程序的时候脑袋里对生活方面想的就少一些,反应也迟钝了些。能想的比较深的是昨天的一次失误,希望能吸取教训,同时引以为戒。
一位前辈发给我的原题为: 评测题目: 2个线程,一个线程输出1-100这个范围内的所有奇数,一个输出1-100内所有的偶数。要求这些数据最终按照 1.2.3.4....48,49,51,50,53,52,55,54,.....98,97,100,99 这个顺序输出。
LinkedHashMap和HashMap经常会一同问到,不过看了LinkedHashMap内部的源码相对比较简单,如果事先看过HashMap的源码的话。
现在互联网公司没有不用分布式的,看看招聘岗位都要求着Dubbo,Spring Cloud等等。 关于Dubbo,不好意思去说,我所在的公司比较小,架构相对没有那么复杂,服务也没那么多,就没在生产环境用Dubbo,面试官问我用过Dubbo的时候,我心里好纠结啊,我只在本地做过Demo,不过不管有没有用过,能回答上有关Dubbo的问题,就能证明你懂这个。
项目部署上线之后,线上项目是不能轻易修改的,定位问题的难度也会变大。因此监控是非常重要的一个环节,有了监控,我们才能更好的定位系统中的问题,从而排查。监控的工具有很多种, 但是java自带的命令行监控工具,是必须要掌握的。
Java虚拟机加载类的全过程包括,加载,验证,准备,解析和初始化。 image.png 在加载阶段,虚拟机需要完成以下三件事: 通过类的全限名获取此类的二进制字节流。
2018年已经过半,年初的目标实现了吗?若目标只实现了一小部分,没关系,下半年很快就会过去。 自我介绍 年初的时候,参加了再厉害一点社群,希望18年能厉害一点,进去半年了,有厉害吗?虽然在群里混的时间不多,但大致能感受到: 社群让你更认识自己,相互介绍之前,看到大家的标签,要知道往自己身上贴什么标签。
Sring AOP通过PointCut来指定在那些类的那些方法上织入横切逻辑,通过Advice来指定在切点上具体做什么事情。如方法前做什么,方法后做什么,抛出异常做什么。
Java语言的“编译期”,可能指的是一个前端编译期,把*.java文件转变为 *.class文件的过程;也可能是虚拟机的后端运行期编译器(JIT)把字节码转变为机器码的过程,还可能是指使用静态编译器(AOT编译器,Ahead Of Time Compiler)直接把 java文件编译成本地机器码的过程。
一段时间没有回顾多线程相关知识了,虽然工作中会用到一些多线程的内容,但都偏向于基础,今天重读多线程相关内容,发现有些东西还是需要注意下。这些一般是面试高频问题奥。
如果不时常的提醒督促一下自己,我会很容易在一段时间后懈怠。走偏掉。所以要经常的反思自己。 最近投了阿里的简历,收到了邮件通知要面试,经历了一面,一面直接就让我意识到了自己的不足,过段时间也需要下功夫学习的地方。
一位前辈发给我一道算法题,这里整理一下自己的解题思路。 请设计一种处理算法能高效的检查出字符串中第一次出现的重复字符。给定的字符串长度小于等于500个字符,包含字母、数字、英文符号。
堆排序 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。 性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树 堆图 堆支持的操作: build:建立一个空堆; insert:向堆中插入一个新元素; update:将新元素提升使其符合堆的性质; get:获取当前堆顶元素的值; delete:删除堆顶元素; heapify:使删除堆顶元素的堆再次成为堆。
Spring的核心有两部分,IOC和AOP,那么AOP的重要性可想而知,今天一块来了解下Spring AOP相关的内容。 AOP概念 AOP(Aspect-Oriented Programming)是面向切面编程的简称,定义如下: 计算机科学中,AOP是一种编程范式,通过分离横切关注点点来增加模块性。
慢慢感到自己越来越大,想起往事,不仅唏嘘。想起多年以前的一件事情。 我小时候父母在外面打工,过年的时候会回家,过年父母在家的时候,我肯定很想和父母多待一段时间,毕竟一年见不了多次。
随机化优化 上面提到了最常规的排序,排序,然而在面对完全有序的数组时,快速排序的效率明显降低到了O(n^2)。快速排序划分的子数组越不平衡,快排就会降低。
最近母校又毕业了一批学生,知道自己又老了一岁,光阴荏苒,时间总是过得那么快。 毕业一年,我觉得没有刚毕业时候的那股嚣张劲了,外面时间厉害的人物很多很多,看到自己这么久做的还是那么微不足道的东西,感到人与人之间的差距慢慢的在拉开。
快速排序据说是21世纪伟大的发明之一,其思想也应用广泛。 核心 当前版本的快速排序,核心: 首先从数组中寻找一个元素,把所有比该元素小的元素放到该元素的左边(从小到大),所有比当前元素大的元素放到右边。
Java系统提供的Arrays.sort函数。对于基础类型,底层使用快速排序。对于非基础类型,底层使用归并排序。请问是为什么? 答:这是考虑到排序算法的稳定性。
上篇总结了常见的垃圾收集算法,这里回顾下常见的垃圾收集器。 image.png 上图展示了7种不同分代的垃圾收集器,如果两个收集器之间存在连线,说明他们之间可以搭配使用。
当需要排查各种内存溢出,内存泄漏等问题时,当垃圾收集成为系统达到更高并发的瓶颈时,我们有必要深入GC的原理。 image.png 常见垃圾回收算法 在查看垃圾回收具体过程的时候,运行程序加上:-XX:+PrintGCDetails打印详细的垃圾回收过程。
Java中有三种移位运算符 : 右移运算符,num >> 1,相当于num除以2 >>> : 无符号右移,忽略符号位,空位都以0补齐 image.
做Java开发的,起码要知道类的初始化顺序,因为这样你才知道编写的代码运行到了那里。 与文无关 一段代码 public class BaseTest { private String baseName = "baseName"; static { System.
想去名企锻炼自己的技术本领,梳理一下技术的要求,做好准备,希望能达成自己的目标。 Java基础扎实,理解IO,多线程,集合等基础框架,对JVM有一定的了解。
Druid是Java语言中最好的数据库连接池。Druid相比于其他的数据库连接池,有两大特性: 监控数据库,有利于分析线上数据库问题 更容易扩展,同时也很高效。
Spring校验器,参数校验从此简单。 image.png 应用在执行业务逻辑之前,必须通过校验保证接受到的输入数据是合法正确的,但很多时候同样的校验出现了多次,在不同的层,不同的方法上,导致代码冗余,浪费时间,违反DRY原则。
Kubernetes是一个针对容器应用,进行自动部署,弹性伸缩,和管理的开源系统。主要功能是生产环境的容器编排。 image.png Kubernetes名字太长了,叫起来有点麻烦,而Kubernetes首字母与结尾字母之间有8个字母,因此被称作K8S。
在深圳玩了两天,也见了一些东西,不像当初那样,未去过一个地点之前,或多或少会对某个地方有些幻想。真正见识一些心中就有些大概。 腾讯大厦 好不容易来一次,记录下来才不至于遗忘。
也许Ansible能给你的便捷部署带来一些灵感。 image.png 有时,我们的基础设施并不是那么的完善,也许不想搭建Gitlab,Jenkins,就是想写一个项目,然后部署到服务器,需要简单,快速,那么Ansible基本就足够了。
上周六骑单车骑了100多公里,20公里的持续上坡山路。早上8点出发,晚上8点半回来。非专业骑行,一路上,有些要说的。 太阳 人生活的层次越高,接触的领域越不一样,平时输入的内容质量越高,写的东西也显得有干货。
MapDB可以直接将Java的数据类型存储至直接内存而非JVM的堆中,也可以将数据持久化到磁盘。 与文无关 今天和大家介绍一个Java的第三方库,MapDB,它是用Kotlin写的,据说代码质量还不错,有兴趣的可以阅读其源码。
如果没遇到过OME错误,都不好意思说自己是做Java开发的。 JVM 最近更新文章的速度很慢,懒,另外我对时间的分配不太擅长,事情一旦多起来,就很容易焦头烂额,效率也变低,看起来一天忙忙碌碌,最后发现处理的事情并不多。
如何经营好企业,人生?《经营者养成笔记》应该能带给你一些启发。 摘抄 做企业之前,进行如下两个步骤: 第一、你解决的矛盾是什么,你解决的需求是什么? 第二、思考自己做的事在社会中存在的意义和使命。
我们知道Spring的最重要的核心是Ioc,有时候也被称为DI(Dependency Injection,依赖注入),那么关于Dependency,你了解多少呢? 注入 之前我们有提到IOC和DI的关系与概念,我是把它们区分开了,所以才有了这篇文章。
Spring Bean管理 Spring的核心在于Ioc,我们上一篇已经提到了Ioc的概念,把对象的控制权较给容器来管理。在Spring中,凡是被Spring创建和管理的对象都叫做Bean。
Ioc概念 很多初学者在刚听到Ioc和DI等概念的时候,往往一头雾水,用了很久才理解它们的意思,这里我说一下我对它们的理解。 image.png IOC(Inversion Of Control,反转控制)一般也被理解为DI(Dependency Injection,依赖注入),实际上两者还是略微有些区别,虽然它们经常性的出现在一起。
再早些的时候,自己过得太安逸了,像朝九晚五,吃饱就睡,虽然也学到了一些东西,但是太过于封闭了。 想出去透透气,想检验一下自己,学一下左耳朵耗子,左耳朵耗子说他在杭州工作的那一年,基本上把杭州的小公司面试了一遍,我上周也去试了一下,读万卷书不如行万里路,行万里路不如阅人无数,出去几次后确实比一直一个人待在屋子里好多了,遇到几个人有温和的,有不错的,当然也有直接批判的,我自己觉得每次都有一些感触。
Redis与Memcache与什么区别? 只说特点,不说谁好谁坏: Redis是单线程的,支持多种数据类型,定制订阅/发布模式,支持Lua脚本,事务,包括持久化存储。
前天听了樊登读书会的《终身成长》,书中提到了成长型思维与固定型思维,比较受用,在这里分享给大家。 生长 两种思维的特点 固定型思维模式: 认为大部分事情是不会变化的,考虑事情目光短浅 更看重结果,把发生的事情当做衡量能力和价值的直接标尺 把他人当成审判者而不是同伴 不屑于努力,不注重学习方法 更看重自身的能力,团队配合意识差 害怕冒险 成长型思维模式: 认清自己的不足与优势,客观的看待自己,努力改善自己的状况。
最近的状态 这个星期,没怎么记录工作中的状态,凭记忆记起做了什么。 记得两周之前,要做一个有关公众号的小项目,项目做完了吗。如果单纯给自己用,还是有不足的地方,应该是我觉得自己人抱有一些幻想吧。
去年搬到厦门来的时候,不知道光猫还有机顶盒是电信临时放在我们这里的,弄丢了要赔钱的,结果第一次搬家就把光猫机顶盒等等的东西全部都落下了。 想起来第一次搬家丢了很多东西,新买的桌子椅子,光猫,机顶盒,床单被子,厨具,健身卡等等全部都放在了租房子哪里。
能愿意花时间停下来思考,需要感谢007。没有像007这样的外力促使自己写作,自己就一直处于拖延的状态,拖延的原因也许在于自己还没想清楚,自己在做什么?又准备做什么。
看到题目的时候,你掌握这个知识点了吗? 图片来源与网络 常见面试问题如下: 接口和抽象类的区别,什么时候使用? 抽象类和接口的相同点和不同点? 总之就是经常问到的问题了。
Java语言规格文档与JVM规格文档不一致... surprice Java是一种强类型语言,它语言规范中定义了Java的数据类型分为,基本数据类型和引用数据类型。
Java并发包中主要基于两个基础来构建的,一个是锁,一个是CAS操作。 与文无关 原子变量提供了与volatile类型变量相同的内存语义,此外还支持原子性操作。
“工欲善其事必先利其器”,有了这些并发工具,多线程控制变得So easy。 与文无关 JDK中已经给我们内置了很多并发工具,都属于应用类型,知道具体如何使用就好,主要讲以下几个类: CountDownLatch CyclicBarrier Semaphore LockSupport BlockingQueue 这次的几个案例都需要实际运行,看运行效果才明白怎么回事,代码可以直接复制粘贴。
Java中线程池是运用最多的并发框架,几乎所有并发的程序都可以使用线程池来完成。阿里巴巴Java开发手册中明确指出: 线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。
并发编程中最常出现的情形就是多个线程共享一个资源,这些共享的资源很可能导致错误或者数据不一致的情形,需要想办法来解决这种问题。 锁 临界区(critical section):最多只能有一个线程执行的代码块来访问某些共享资源。
大多数人都想提高自己的生活品质,也都在尝试着这样做,那怎么样才能做到呢? 钓鱼 按李笑来的意思,要把日常中用到的各种概念理的很清楚,如果你想的足够明白,那么你越明智,苦恼就少很多。
Java多线程虽然知识点众多,但抓住了基础,也不难解决。 接着上一篇并发基础,再说一些额外的知识点。上篇文章我们说了线程的状态,还有线程的一些属性。这次我们再说一些Thread类的用法,再说下线程组的概念。