Giter Site home page Giter Site logo

cu-cafes's People

Contributors

dependabot[bot] avatar fxleyu avatar

Stargazers

 avatar

Watchers

 avatar  avatar

cu-cafes's Issues

[阅读笔记] Thread 和 Runnable

Java 虚拟机给每条线程分配独立的 JVM 栈空间以免彼此干扰。独立的栈使得线程可以追踪它们自己下一条要执行的指令,这些指令会依线程不同而有所区别。栈空间也为每条线程单独准备了一份方法参数、局部变量以及返回值的拷贝。

导读

  • ThreadRunnable
  • 操作更高级的线程任务
  • 练习
  • 小结

[问题] 多 if 分支优化

业务代码中大量这类似于如下的代码

if (shouldDoSomething()) {
    sirector.start(event);
    do = true;
}

[总结] 排序归类

简单集中排序

  • 冒泡排序 (无序区,有序区)。从无序区通过交换找出最大元素放到有序区前端。
  • 选择排序 (有序区,无序区)。在无序区里找一个最小的元素跟在有序区的后面。对数组:比较得多,换得少。
  • 插入排序 (有序区,无序区)。把无序区的第一个元素插入到有序区的合适的位置。对数组:比较得少,换得多。
  • 堆排序 (最大堆,有序区)。从堆顶把根卸出来放在有序区之前,再恢复堆。
  • 归并排序 把数据分为两段,从两段中逐个选最小的元素移入新数据段的末尾。可从上到下或从下到上进行。
  • 快速排序 (小数,基准元素,大数)。在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。
  • 希尔排序 每一轮按照事先决定的间隔进行插入排序,间隔会依次缩小,最后一次一定要是1。

[Guava] HashBiMap实现原理

背景知识

Guava实现了一种特殊的数据结构BiMap,可以成为双向map,这种特殊的map既实现了key到value的映射,同时实现了value到key的映射。

[概念] SOA基础知识简介

SOA 是一种体系架构方法,用于定义、链接和集成具有清晰边界且功能方面自包含的可重用业务服务。在这种类型的体系架构中,您可以对业务流程中的业务服务进行协调。

SOA is an architecture approach for defining, linking, and integrating reusable business services that have clear boundaries and are self-contained with their own functionalities.

参考

https://www.ibm.com/developerworks/cn/education/webservices/ws-soa-ibmcertified/index.html

[博文] 10 个绝妙的 Java 编码最佳实践

10 个绝妙的 Java 编码最佳实践

内容

  • 牢记 C++ 的析构函数
  • 不要相信你早期的 SPI 演进判断
  • 避免返回匿名、本地或内部类
  • 现在就开始编写 SAM!
  • 避免让方法返回 null
  • 设计 API 时永远不要返回 null 数组或列表
  • 避免状态,使用函数
  • 短路式 equals()
  • 避免方法 (T... all) 签名

额外知识

  • SPI 的全名为Service Provider Interface
  • SAM "single abstract method", "SAM-type" refers to interfaces like Runnable, Callable, etc. 1

[扩展] java.util.Locale对象中的语言码和国家码

在处理多语言下的项目时(尤其是移动端),有时需要根据系统语言环境做特殊化定制。

所以,就需要使用到 java.util.Locale 类的实例对象。

而该对象中主要使用其语言码国家码

但对于语言码国家码集合不太了解,这里希望对其有一个深入的感官。

[阅读笔记][Effective Java] 并发

第 10 章 并发

线程(Thread)机制允许同时进行多个活动。
本章阐述的建议可以帮助你编写出清晰、正确、文档组织良好的并发程序。

建议

  • 第 66 条:同步访问共享的可变数据
  • 第 67 条:避免多度同步
  • 第 68 条:executor 和 task 优先于线程
  • 第 69 条:并发工具优先于 wait 和 notify
  • 第 70 条:线程安全性的文档化
  • 第 71 条:慎用延迟初始化
  • 第 72 条:不要依赖于线程调度器
  • 第 73 条:避免使用线程组

[JMS] Java消息服务(JMS)概述

Java Message Service

JMS的API是一个Java面向消息中间件(Message-oriented middleware, MOM)的,为了在两个或多个Client之间发送消息的API。它是一个处理生产者-消费者问题( Producer-consumer problem)的实现。JMS是Java EE平台的一部分。JMS也是一个在JCP(Java Community Process)开发的一种规范,被称为JSR 914。它是一个允许应用组件间基于Java EE去创建、发送、接收和阅读消息。JMS允许分布式应用程序的不同组件之间的通信是松耦合的、可靠的和异步的。

其中MOM是面向消息中间件,是用于以分布式应用或系统中的异步、松耦合、可靠、可扩展和安全通讯的一类软件。MOM的总体**是它作为消息的发送器和消息接收器之间的消息中介,这种中介提供了一个全新水平的松耦合。

组成部分

  • JMS Provider 一个实现JMS接口的面向消息中间件(MOM)。Provider既可以是一个Java JMS实现也可以是一个非Java MOM的适配器。
  • JMS Client 一个去产生或接收Message的应用或进程。
  • JMS producer/publisher 一个创建、发送Message的JMS Client。
  • JMS consumer/subscriber 一个接收Message的JMS Client。
  • JMS message 一个包含在JMS Client间传输数据的对象。
  • JMS queue 一个包含Message的中转区。这个Message已经被发送,正在等待被一个consumer读。不同于队列这个名称所暗示的,Message不必按照它们发送的顺序来接收。JMS队列只保证每个消息只处理一次。
  • JMS topic 一个用于发布传递给多个订阅服务器的消息的分发机制。

模式

JMS API 提供了两种模式:

  • 点对点
  • 发布和订阅

参考

[阅读笔记] 同步

导读

  • 线程中的问题
  • 同步临界区的访问
  • 谨防活跃性问题
  • volatile 和 final 变量
  • 练习
  • 小结

[博文] Web服务器的工作原理

Web服务器的工作原理

Web服务器的工作原理

文章章节

  • 什么是web服务器、应用服务器、web容器
  • 什么是Servlet?他们有什么作用?
  • 什么是ServletContext?它由谁创建?
  • ServletRequest和ServletResponse从哪里进入生命周期?
  • 如何管理Session?知道cookie吗?
  • 如何确保线程安全?

参考文献

[知识点] 使用LinkedHashMap实现LRU缓存

Least Recently Used (LRU)

Discards the least recently used items first. This algorithm requires keeping track of what was used when, which is expensive if one wants to make sure the algorithm always discards the least recently used item. General implementations of this technique require keeping "age bits" for cache-lines and track the "Least Recently Used" cache-line based on age-bits.

在JDK中有一个实现,它就是 LinkedHashMap ,它使用链表和HashMap来实现了。

[基础] Java 教程之异常

异常

Java 编程语言使用异常去处理错误或者异常事件。

  • 什么是异常?
  • 捕获或特殊需求
  • 如何抛异常
  • try-with-resource 预计
  • 未检查异常(unchecked exceptions)论战
  • 异常的优势
  • 总结
  • 练习

[基础] Java教程之并发

并发 Concurrency

Java 平台在设计之初就支持并发编程。

相关内容

  • 进程与线程 Processes and Threads
  • 线程对象 Thread Objects
  • 同步 Synchronization
  • 活性 Liveness
  • 保护块 Guarded Blocks
  • 不可变对象 Immutable Objects
  • 高级并发对象 High Level Concurrency Objects
  • 扩展阅读 For Further Reading
  • 问题与联系 Questions and Exercises

[学习] 业务规则

背景

等同与 #44

在最近的迭代需求过程中,组内出现了很多问题。先是,上线后引起线上故障导致回滚;后是,需求未在迭代周期内上线,导致上线延迟。为此,部门 Leader 要求所有需求必须要有 Use Case 编写。此外还涉及到业务规则、流程图、异常流等。

学习材料

[知识点] 并发相关

目录

  • volatile 关键字
  • 提升(hoisting)
  • 活性失败(liveness failure)
  • 安全性失败(safety failure)

[学习] Servlet工作原理解析

学习目录

  • 从Servlet容器说起
  • 自建Servlet实例
  • Servlet体系结构
  • Servlet如何工作
  • Servlet中的Listener
  • Filter如何工作
  • Servlet中的url-pattern
  • 总结

[任务] 使用Maven进行管理

情景

  • 项目中引用了很多jar。
  • 更换电脑或者换一个编译环境时,项目由于缺少jar各种报错。

需求

  • 解决项目的编译难度问题。

方案

  • 使用Maven进行该项目的管理。

[问题] OpenJDK相对于官方JDK有什么不同?

今天Review代码时,发现Android代码一个奇怪的现象。
就是在匿名内部类中直接调用外部类的实例方法。

在我的印象中,调用一个方法等同于在这个方法前直接加this,而这个this是内部类的实例。
按这个逻辑,在匿名内部类中直接调用外部类的实例方法在编译时是直接报错的。

但实际编译这个模块,并没有出问题。看运行时log一切正常。

故,写了一个简单的Demo来验证之前的观念是错误的。代码如下:

public class InnerClass {
	public static void main(String[] args) {
		new InnerClass().process();
	}

    public void process() {
        new Thread() {
            @Override
            public void run() {
                System.out.println(toString("test"));
            }
        }.start();
    }

    public String toString(String string) {
        return string;
    }
}

但实际结果证实了我的观念在官方JDK中是没有问题的,但在OpenJDK中就有了问题。
在官方JDK中没有问题,所以上述代码编译失败,结果如下:
image

在OpenJDK中,我的观念就有问题了,上述代码直接编译成功了,结果如下:
image

那么问题来了,OpenJDK相对于官方JDK有什么不同?
我可以在哪里找到文档来查看这些不同?
我努力过,但没有得到明确的答案。

P.S.
image

[博文] 避免Java应用中NullPointerException的技巧和最佳实践

阅读地址

最佳实践方式

  • 从已知的String对象中调用equals()和equalsIgnoreCase()方法,而非未知对象;
  • 当valueOf()和toString()返回相同的结果时,宁愿使用前者;
  • 使用null安全的方法和库(例如Apache commons 中的StringUtils);
  • 避免从方法中返回空指针,而是返回空collection或者空数组;
  • 使用annotation@NotNull@Nullable
  • 避免你的代码中不必要的自动包装和自动解包;
  • 遵从Contract并定义合理的默认值;
  • 定义数据库中的字段是否可为空;
  • 使用空对象模式(Null Object Pattern)。

[博文] 10个有关String的面试问题

10个有关String的面试问题

  1. == vs. equals(var)
    同一对象 vs 判等

  2. char[] vs String
    char[] 更好。可以在使用之后动态更改数据。

  3. 字符串是否使用switch条件语句?
    JDK 7.0 及以上可以

  4. 如何将字符串转化为 int
    int n = Integer.parseInt("10")

  5. 使用空白字符分割字符
    String[] strArray = aString.split("\\s+");

  6. substring() 方法

  7. String vs StringBuilder vs StringBuffer

  8. 重复一个字符串

String str = "123";
String repeated = StringUtils.repeat(str, 3);
  1. 将字符串转换为时间
String str = "Sep 17, 2013";
Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);
  1. 计算字符串某个字符出现的次数
int n = StringUtils.countMatches("1111222", "1");

[学习] 为什么两个1927年的时间相减得到一个奇怪的结果?

代码如下:

public static void main(String[] args) throws ParseException {
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    String str3 = "1927-12-31 23:54:07";  
    String str4 = "1927-12-31 23:54:08";  
    Date sDt3 = sf.parse(str3);  
    Date sDt4 = sf.parse(str4);  
    long ld3 = sDt3.getTime() /1000;  
    long ld4 = sDt4.getTime() /1000;
    System.out.println(ld4-ld3);
}

输出结果如下

353

版本信息:

java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Dynamic Code Evolution Client VM (build 0.2-b02-internal, 19.0-b04-internal, mixed mode)

Timezone(`TimeZone.getDefault()`):

sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
offset=28800000,dstSavings=0,
useDaylight=false,
transitions=19,
lastRule=null]

Locale(Locale.getDefault()): zh_CN

https://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result

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.