Coder Social home page Coder Social logo

java-guide's People

Contributors

joeminty avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

java-guide's Issues

重载方法

具有不同的方法签名,相同的方法名

Java语法:方法签名 = 方法名 + 参数类型 + 参数顺序

JVM:方法签名 = 方法名 + 参数类型 + 参数顺序 + 返回值类型

互斥锁的属性

  • PTHREAD_MUTEX_THREAD_NP:这是缺省值,也就是普通锁。当一个线程加锁以后,其余请求锁的进程将会形成一个等待队列,并且在解锁后按照优先级获取到锁,这种策略可以确保资源分配的公平性。

  • PTHREAD_MUTEX_RECURSIVE_NP:嵌套锁。允许同一个线程对同一个锁成功获取多次,并且通过unlock解锁。如果是不同线程请求,则在加锁线程解锁时重新进行竞争。

  • PTHREAD_MUTEX_ERRORCHECK_NP:检错锁。如果一个线程请求同一个锁,则返回EDEADLK,否则与PTHREAD_MUTEX_THREAD_NP类型动作相同,这样就保证了当不允许多次加锁时不会出现最简单情况下的死锁。

  • PTHREAD_MUTEX_ADAPTIVE_NP:适应锁。动作最简单的锁类型,仅仅等待解锁后进行重新竞争。

To PP

kubernates:
Borg, Omega, and Kubernetes

Kubernetes Handbook

Kubernetes指南

《Kubernetes in Action》

(https://kubernetesbootcamp.github.io/kubernetes-bootcamp/)

https://github.com/veggiemonk/awesome-docker

https://github.com/ramitsurana/awesome-kubernetes

Kubernetes tips & tricks
Achieving CI/CD with Kubernetes
How to Set Up Scalable Jenkins on Top of a Kubernetes Cluster
10 Most Common Reasons Kubernetes Deployments Fail Part IPart II
How to Monitor Kubernetes ,一共有4个篇章
Logging in Kubernetes with Fluentd and Elasticsearch
Kubernetes Monitoring: Best Practices, Methods, and Existing Solutions

Kubernetes 101 - Networking
Kubernetes networking 101 - Pods
Kubernetes networking 101 - Services
Kubernetes networking 101 - (Basic) External access into the cluster
Kubernetes Networking 101 - Ingress resources
Getting started with Calico on Kubernetes

The New Stack eBook Series ,非常完整和详实的 Docker 和 Kubernetes 生态圈的所有东西。

Book 01: The Docker Container Ecosystem
Book 02: Applications & Microservices with Docker & Containers
Book 03: Automation & Orchestration with Docker & Containers
Book 04: Network, Security & Storage with Docker & Containers
Book 05: Monitoring & Management with Docker & Containers
Book 06: Use Cases for Kubernetes
Book 07: State of the Kubernetes Ecosystem
Book 08: Kubernetes Deployment & Security Patterns
Book 09: CI/CD with Kubernetes
Book 10: Kubernetes solutions Directory
Book 11: Guid to Cloud-Native Microservices

java8日期

jdk8中,考虑使用Instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat

并发编程建议

1)AQS建议补充countdownlatch
2)建议补充volatile关键字及synchronized关键字的用法及区别
3)补充CAS相关概念
4)新增atomic原子类相关内容及实例

接口Interface

不能用protected,final,private修饰,可用abstract修饰

默认的属性是public static final

默认的方法修饰是 public abstract

沙箱安全机制

java安全模型的核心就是Java沙箱(sandbox)

沙箱主要限制系统资源访问

沙箱是一个限制程序运行的环境。沙箱机制就是将Java代码限定在JVM特定的运行范围中,并且严格限制代码对本地系统资源访问,通过这样的措施来保证对代码的有效隔离,防止对本地系统造成破坏。

SQL注入

SQL注入是指原始SQL查询被恶意动态更改成一个与程序预期完全不同的查询。执行更改后的查询可能会导 致信息泄露或者数据被篡改。防止SQL注入的方式主要有以下三类:

  • 使用参数化查询
  • 对不可信数据进行白名单校验
  • 对不可信数据进行转码

参数化查询是优先考虑使用的,简单有效,还能提高访问性能。

浮点数比较

浮点数比较相等的方法是绝对值得差值要小于1E-6F

this逃逸问题

this 逃逸是指在构造函数返回之前其他线程就持有该对象的引用. 调用尚未构造完全的对象的方法可能引发令人疑惑的错误。

内存模型

硬件内存模型

硬件内存模型的目标是为了让汇编代码能够运行在一个具有一致性的内存视图上。

指令重排相关知识点

  • Store Buffer
  • Store Forwarding
  • Invalid Queue
  • 写屏障
  • 内存屏障

java内存模型

屏蔽了硬件和操作系统的内存访问差异,实现了让Java程序都能够按照预期的方式来运行。

内存读写指令

作用于主存        作用于工作线程
lock:锁定         load:载入
unlock:解锁     use:使用
read:读取        assign:赋值
write:写入       store:存储

happens-before原则

  • 程序顺序原则
  • 锁定原则
  • volatile原则
  • 线程启动原则
  • 线程结束原则
  • 中断原则
  • 终结器原则
  • 传递性原则

及时编译器代码优化

方法内联

  • 通过设置JVM参数来减小热点阈值或增加方法体阈值,以便更多的方法可以进行内联,但这种方法意味着需要占用更多地内存
  • 在编程中,避免在一个方法中写大量代码,习惯使用小方法体
  • 尽量使用final、private、static关键字修饰方法,编码方法因为继承,会需要额外的类型检查

字段访问相关优化

  • 字段读取优化
  • 字段存储优化
  • 死代码消除

即时编译器将沿着控制流缓存字段存储、读取的值,并在接下来的字段读取操作时直接使用该缓存值。这要求生成缓存值的访问以及使用缓存值的读取之间没有方法调用、内存屏障,或者其他可能存储该字段的节点。
即时编译器还会优化冗余的字段存储操作。如果一个字段的两次存储之间没有对该字段的读取操作、方法调用以及内存屏障,那么即时编译器可以将第一个冗余的存储操作给消除掉。
死代码消除的两种形式。第一种是局部变量的死存储消除以及部分死存储消除。它们可以通过转换为Sea-of-Nodes IR来完成。第二种则是不可达分支。通过消除不可达分支,即时编译器可以精简数据流,并且减少编译时间以及最终生成机器码的大小。

循环优化

  • 循环无关代码外提
  • 循环展开
  • 其他循环优化(循环判断外提、循环剥离)

向量化

向量化优化借助的是CPU的SIMD指令,即通过单条指令控制多组数据的运算。它被称为CPU指令级别的并行。

逃逸分析

即时编译器判断对象逃逸的依据有两个:一是看对象是否被存入堆中,二是看对象是否作为方法调用的调用者或者参数

https://zhuanlan.zhihu.com/p/69136675

逃逸分析必须在serer模式下才会开启,逃逸分析带来的优化点是:

  • 栈上分配 -XX: +DoEscapeAnalysis

  • 标量替换 -XX: +EliminateAllocations

  • 锁消除

无法保证逃逸分析的性能消耗一定能高于其他的消耗。逃逸分析自身需要进行一系列的复杂分析,这其实是一个相对耗时的过程。

部分逃逸分析是一种附带了控制流信息的逃逸分析。它将判断新建对象真正逃逸的分支,并且支持将新建操作推延至逃逸分支

文件操作

加密算法

禁止使用私有的加密算法,禁止使用弱加密算法。

推荐的加密算法有:

  • 对称加密算法: AES

  • 非对称加密算法:RSA

  • 数字签名算法: DSA,ECDSA

  • 安全哈希算法: SHA256,如果使用哈希算法来存储口令,则必须加入盐值,salt至少应该包含8字节且是安全随机数

异常分类

Java中所有异常,都继承自java.lang.Throwable类。Throwable有两个直接子类,Error类和Exception类。

Exception可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种。

GC调优策略

  1. 降低Minor GC频率
  2. 降低Full GC的频率
  • 减少创建大对象
  • 增大堆内存空间
  1. 选择合适的GC回收器

安全点 && 安全区域

程序执行时并非在所有地方都能停顿下来开始GC,只有在特定的位置才能停顿下来开始GC,这些位置被称为安全点(safe point)

安全区域是指在一段代码片段中,对象的引用关系不会发生变化,在这个区域的任何位置开始GC都是安全的。

隐藏、遮蔽、遮掩

  • 隐藏(hide):子类与父类间

  • 遮蔽(shadow):类内部

  • 遮掩(obscure):类内部

判断一个类型是否属于“不再被使用的类”?

  • 该类所有的实例都已经被回收,也就是Java堆中不存在该类及其任何派生子类的实例
  • 加载该类的类加载器已经被回收
  • 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法

在大量使用反射、动态代理、CGLib等字节码框架,动态生成JSP以及OSGi这类频繁自定义类加载器的场景中,通常都需要Java虚拟机具备类型卸载的能力,以保证不会对方法区造成过大的内存压力。

临界区

指的是某一块代码区域,它同一时刻只能由一个线程执行

类加载

Class.forName和ClassLoader.loadClass都能加载类,这两者在加载类时的区别?

java.lang.Process对象

java.lang.Runtime类的exec()方法与相关联的ProcessBuilder.start()方法可以被用来调用外部程序进程。

java.lang.Process对象包含一个输入流,输出流,错误流。

Thread

使用Thread对象的setUncaughtExceptionHandler 方法注册未捕获异常处理者

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.