Java
文章平均质量分 72
hans774882968
这个作者很懒,什么都没留下…
展开
-
Java MIDI 音乐编程入门 + 基础乐理知识 for programmers
基础乐理知识简谱阅读入门下面以《上学歌》为例讲解简谱的阅读方式和相关的乐理知识。上学歌简谱上图只有高音部分,因此还需要参考链接1补充低音部分。左上角的分数是拍号(节拍符号),分母表示多少个音节为一拍,分子表示一小节多少拍。左上角的🎶 = 112表示一分钟112拍,对应代码里的bpm(beats per minute)。据此可以计算出每个音符的演奏时间,不过实际演奏中并不需要这么做。左上角的1 = C表示这首歌的调式为C自然大调。调式确定了歌曲的音域范围。在钢琴键盘中,音名C3被称为原创 2023-12-13 02:22:04 · 461 阅读 · 0 评论 -
【Java】Spring框架是如何解决Bean创建过程中的循环依赖问题的
本文主要梳理了Spring框架Bean创建过程中应对循环依赖问题的相关源码。我在[手写super-mini-webpack](https://www.52pojie.cn/thread-1682010-1-1.html)的时候也介绍过解决循环依赖的算法:Map+记忆化搜索。可以猜测这段源码也实现了这个算法,所以在看这段源码的时候,我们可以先找到**递归点**,再去分析调用栈涉及的那些函数,顺便找出其用到的Map数据结构。另外,在不了解Spring框架的情况下可以用一个动态调试技巧快速找到递归点。原创 2023-07-29 16:09:32 · 700 阅读 · 0 评论 -
注解和反射的demo
showPrivateField、callPrivateMethod分别展示如何获取私有属性和调用私有方法。showMethods展示如何得到一个类的所有成员方法。showAnno展示如何得到一个类的所有注解。checkClassesThatHasAnno展示如何获取具有某个特定注解的所有类。代码import java.lang.annotation.Annotation;import java.lang.annotation.Retention;import java.lang.reflec原创 2021-12-20 00:26:11 · 202 阅读 · 0 评论 -
【进程调度算法】时间片轮转调度算法、多级反馈队列调度算法(Java实现)
时间片轮转调度算法(RR)是十分简单的进程调度算法。进程在执行时的情况在该时间片内进程执行完毕,这种情况调度程序将立即把该进程弹出队列,并把CPU分配给新的队首进程在该时间片内进程未执行完毕,调度程序将立即中断该进程执行,把该进程加入队尾,并将CPU分配给新的队首进程该时间片未结束时有一个新的进程到达,就把新进程放到队尾,并继续执行该时间片(自己的理解,不一定对~)第3种情况,在实现时的简单做法就是:直接把运行时间加到该时间片结束或进程执行完毕,接着while循环把所有时间已到达的进程从pr原创 2021-12-19 23:38:20 · 6209 阅读 · 0 评论 -
【Java设计模式】创建型模式:单例模式
枚举类单例(推荐)Effective Java书推荐使用这种单例模式。因为它足够简单,线程安全,且天然可以防止多实例化,即使是在面对反序列化和反射攻击时。package singleton;import java.lang.reflect.Method;enum Singleton { instance; Singleton() { System.out.println("正在实例化,对象地址:" + hashCode()); } privat原创 2021-12-19 02:26:52 · 333 阅读 · 0 评论 -
【Java设计模式】行为型模式:状态模式
场景假设一个论坛有若干功能:发帖、发评论、看帖、看评论……每个功能都需要进行权限控制,区分当前用户是哪一级权限(角色)。最自然的做法我们都会,就是每个功能写一大堆if-else。它的问题是:可扩展性弱。假如新增一个权限(角色),需要把所有功能的代码都改一遍。解决方案设计一个interface,叫做“状态”,所有功能各对应状态的一个抽象方法,等待子类实现。子类implements interface,每个子类表示一个权限(角色)。用户有一个属性state,表示它的角色。你把功能想象成行,角色想原创 2021-12-19 01:53:54 · 75 阅读 · 0 评论