Java知识
文章平均质量分 90
介绍Java相关的知识体系
milan-xiao-tiejiang
2015年开始Android App开发,精通Java、Kotlin、c++等Android开发语言,阅读过系统源码及多方Android主流框架,对 vue、flutter等也有一定的认知。
Java方向技术全面,熟练掌握Spring、MySQL等Java Web相关技术,掌握分布式架构体系。
2020年转向c++工程师,重新系统学习c++语法,目前从事清洁服务机器人相关领域。
tip:北京寻求Android、c++职位
展开
-
Netty 学习笔记——请求处理
Netty 批量写数据时,如果想写的都写进去了,接下来的尝试写更多(调整 maxBytesPerGatheringWrite)。Netty 待写数据太多,超过一定的水位线(writeBufferWaterMark.high()),会将可写的标志位改成。Netty 只要有数据要写,且能写的出去,则一直尝试,直到写不出去或者满 16 次(writeSpinCount)。Netty 写数据,写不进去时,会停止写,然后注册一个 OP_WRITE 事件,来通知什么时候可以写进去了再写。原创 2023-02-13 14:07:42 · 448 阅读 · 0 评论 -
Netty 学习笔记——概念篇
Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。原创 2023-02-13 13:28:54 · 497 阅读 · 0 评论 -
分布式锁的实现方式
介绍几种常用的分布式锁的实现MySql常用函数lock() 一般是阻塞式的获取锁,意思就是不获取到锁誓不罢休;tryLock() 是非阻塞获取锁,如果获取不到那么就会马上返回。适用场景Mysql分布式锁一般适用于资源不存在数据库,如果数据库存在比如订单,那么可以直接对这条数据加行锁,不需要我们上面多的繁琐的步骤,比如一个订单,那么我们可以用select * from order_table where id = ‘xxx’ for update进行加行锁,那么其他的事务就不能对其进行修改。原创 2021-06-02 18:01:37 · 104 阅读 · 0 评论 -
Linux 命令行(持续记录)
Linux 命令行(持续记录)文件管理切换目录 cd查看目录 ls打印文件到命令行 cat编辑文件 Vim进入编辑模式插入 i退出编辑模式 esc保存 : 后面输入 w退出 : 后面输入 q不保存退出 : 后面输入 q!改变文件所属用户 chown改变文件所属组 chgrp下载文件 wget搜索文件 grep部分显示 more、less运行程序命令行运行运行 ./filename退出 ctrl+c后台运行运行 nohup command >out.file 2>&1 &退出 ps原创 2021-10-11 10:29:32 · 365 阅读 · 0 评论 -
代理、适配器、桥接、装饰,这四个模式的区别
代理模式在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类附加功能。代理模式的原理与实现在不改变原始类(或叫被代理类)的情况下,通过引入代理类来给原始类附加功能。一般情况下,我们让代理类和原始类实现同样的接口。但是,如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的。在这种情况下,我们可以通过让代理类继承原始类的方法来实现代理模式。动态代理的原理与实现静态代理需要针对每个类都创建一个代理类,并且每个代理类中的代码都有点像模板式的“重复”代码,增加了维护成本和开原创 2020-10-23 22:54:36 · 266 阅读 · 0 评论 -
服务器搭建常见指令
MySql相关启动systemctl start mysqld.service 停止systemctl stop mysqld.service 登录mysql -u root 重启service mysqld restart 切换数据库至mysqluse mysql; 清空密码update user set authentication_string='' where user='ro...原创 2020-06-23 00:34:54 · 414 阅读 · 0 评论 -
Java中IO相关知识
同步或异步:步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系。阻塞与非阻塞:在进行阻塞操作时,当前线程会处于阻塞状态,无法从事其他任务,只有当条件就绪才能继续。而非阻塞则是不管 IO 操作是否结束,直接返回,相应操作在后台继续处理。IO 不仅仅是对...原创 2020-04-06 12:18:39 · 117 阅读 · 0 评论 -
android源码中的反射、代理的应用
1、反射反射机制是 Java 语言提供的一种基础功能,通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。java.lang 或 java.lang.reflect 包下的相关抽象,就会有一个很直观的印象了。Class、Field、Method、Constructor 等,可以操作类和对象。反射提供的 A...原创 2020-03-28 15:17:43 · 386 阅读 · 0 评论 -
Java内存区域的划分
首先,程序计数器(PC,Program Counter Register)。为保证程序能够连续的执行下去,处理器必须具有某些手段来确定下一条指令的地址,而程序计数器正式起到着这种作用。在 JVM 规范中,每个线程都有它自己的程序计数器,并且任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正在执行的 Java 方法的 JVM 指令地址;或者,如果是在执行本地(...原创 2020-03-26 13:38:49 · 132 阅读 · 0 评论 -
Java垃圾回收
垃圾收集机制是 Java 的招牌能力,现在写出来未免有些老生常谈了。一、垃圾标记算法引用计数算法每个对象都有一个引用计数器,当对象在某处被引用时,它的计数器就加1,引用失效减1。当计数器变为0时,该对象不能被使用。缺点是没有办法解决对象的循环引用。可达性分析(根搜索算法)将对象及其引用关系看作一个图,选定一些活动的对象作为GC Roots,并组成根对象集合,然后以这些GC ...原创 2020-03-26 11:27:51 · 151 阅读 · 0 评论 -
Java中引用类型
强引用我们平常典型编码Object obj = new Object()中的obj就是强引用。通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应...原创 2020-03-26 10:25:17 · 89 阅读 · 0 评论 -
深入理解Lru缓存
基于基础结构实现LRU缓存淘汰策略1)什么是缓存?缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。2)为什么使用缓存?即缓存的特点缓存的大小是有限的,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?就需要用到缓存淘汰策略。3)什么是缓存淘汰策略?指的是当缓存被用满时清理数据的优先顺序。...原创 2020-03-25 19:55:35 · 423 阅读 · 0 评论 -
Java并发相关知识总结
Java并发的一些总结Java并发包也就是 java.util.concurrent 及其子包,集中了 Java 并发的各种基础工具类,具体主要包括几个方面:提供了比 synchronized 更加高级的各种同步结构,包括 CountDownLatch、CyclicBarrier、Semaphore 等,可以实现更加丰富的多线程操作,比如利用 Semaphore 作为资源控制器,限制同时进...原创 2020-03-23 10:28:45 · 153 阅读 · 0 评论 -
HashMap源码解析
一、定义散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。散列函数,它是一个函数。我们可以把它定义成 hash(key),其中 key 表示元素的键值,hash(key) 的值表示经过散列函数计算得到的散列值。开放寻址法,我们往散列表中插入数据时,如果某个数据经过散列函数散列之后,存储位置已经被占用了...原创 2020-03-21 17:05:08 · 135 阅读 · 0 评论 -
ArrayList、LinkedList 源码解析
一、标准答案吧ArrayList是基于动态数组实现的,可以根据需要调整容量,扩容增加 50%。其内部元素以数组形式顺序存储的,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一个元素,需要移动后续所有元素。LinkedList是双向链表结构,所以它不需要像上面两种那样调整容量。它进行节点插入、删除却要高效得多,但是随机访问性能则要比动态数组慢。...原创 2020-03-18 21:42:32 · 120 阅读 · 0 评论 -
理解String、StringBuffer、StringBuilder
一、较官方解释String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。StringBuffer 是为解决...原创 2020-03-18 20:09:09 · 116 阅读 · 0 评论 -
从 int 和 Integer 看 java 的包装类
一、概念int 是我们常说的整形数字,是 Java 的 8 个原始数据类型(boolean、byte 、short、char、int、float、double、long)之一。Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unbox...原创 2020-03-18 20:36:09 · 423 阅读 · 0 评论