GameTheroy
sdfasdfsadf
MCUTuTorial01
P2 命名规则 40正极,20接地。P0到3,镜像Z形。左侧上下,右侧外里。9脚复位,P0上拉。31引脚,电平决定,接高访内,接低访外。 P4–点亮一个LED灯 1)通过PCB原理图可以知道控制LED灯亮灭的是P2口的,并且接入+VCC5V即高电平1,LED灯要那个亮的话那个线,P2端要设置为0,不亮就设置为1,有电势差,即有电流流过灯亮; 2)P2=1111 1110,即第一个灯亮其他灯不亮,但是我们读取是从下面的,所有不是(P2=0111 1111)这样写; 3)用到P2口,所有要导入头文件#….鼠标右键点击就可以加进来; 4)不能识别 P2=1111 1110这样的类型,所有将它转为16进制,开头用0x表示16进制的数 P2=0xFE ; //1111 1110 转换可以网上搜索,计算器也可以直接算; 5)一个亮一个灭P2=0x55; //0101 ...
JavaTutorial13
Spring 框架基础知识什么是Spring框架? Spring模块?最主要的七大模块: Spring Core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。 Spring Beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。 Spring Context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。 Spring JDBC:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析,用于简化JDBC。 Spring AOP:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。 Spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners 进行 ioc容器初始化和针对 Web 的 ApplicationContext。 Spring...
JavaTutorial12
接下里我们将要讲的内容是JVM的垃圾回收机制。整个讲解的流程是:引用→可达性分析→垃圾回收算法→垃圾收集器。引用类型为可达性分析提供了基础信息 ,即哪些对象通过什么方式被引用着。可达性分析算法基于引用关系,确定哪些对象需要被回收。这一步骤回答了”哪些对象是垃圾”的问题,为下一步实际回收做准备。接着,垃圾回收算法决定如何高效地清理和整理内存空间,包括标记-清除,整理,复制,分代算法等等。最后,我们会讲解不同收集器如何运用算法实现垃圾回收,以及内存分配和回收策略的总结。 Java引用直接引用无论是对象的访问定位,还是对象是否可以被回收的判断等,都离不开引用。而Java中虚拟机HotSpot通过直接引用来访问Java对象的。直接引用就是说指针是直接指向对象实例的,如果想要获取到对象的类型数据信息,则需要再调用对象里维护的类型数据指针。 JVM 只规定了reference 类型是一个指向对象的引用,并没有规定这个引用怎么去实现。所以引用类型根据不同 JVM 厂商的实现不同会有差异,主要有两种: 1.直接引用2.句柄 而我们常分析的都是 HotSpot...
JavaTutorial11
JVM内存区域话不多说,先上图: 蓝框部分即为JVM,你可以发现JVM大致分为5个区域,即:堆、方法区(又称为non-heap),虚拟机栈,本地方法栈和程序计数器。但是它仍然不是最清晰的,下面给出的是两个版本JVM结构的对比: 按照线程运行的顺序,我们先从程序计数器开始讲解: 程序计数器程序计数器可以看作是当前线程所执行的字节码的行号指示器。它通过标示下一条需要执行的字节码指令完成指令切换,可以说一个线程的运行就是在该计数器的不断变化推动下一步一步完成的。关于程序计数器的几点总结: 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 在 JVM 规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期一致 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。如果当前线程正在执行的是Java 方法,程序计数器记录的是 JVM...
JavaTutorial10
CASAtomic原子类CountDownLatchawait方法的意义是阻塞当前线程,直到之前创立的所有线程都完成了任务对吧。那为什么还是会出现图二的情况呢?根据提供的两张图片,完整的代码如下: 图一代码(Main类): 1234567891011121314151617public class Main { public static void main(String[] args) throws InterruptedException { CountDownLatch cLatch = new CountDownLatch(5); for (int i = 1; i <= 5; i++) { String name = "task_"+i; new Thread(new Runnable() { @Override public void run() { ...
JavaTutorial08
Lock接口锁主要是能用来控制多个线程访问共享变量的方式,在Lock接口出现之前,Java主要是靠我们前面介绍的synchronized关键字来实现锁功能的,在Java SE 5之后,开始提供Lock接口来实现锁的功能。他有与synchronized关键字类似的同步功能,只是说有一些差别,Lock需要显式的进行加锁和解锁操作。虽然损失了一些隐式加解锁的便捷性,但是增强了可操作性。另外Lock还提供了一些特有的可中断获取锁。超时获取锁等同步特性。 Lock使用与api接口123456Lock lock = new ReentrantLock(); lock.lock(); try{ }finally{ lock.unlock(); } ·解锁过程放入finally块,确保锁能够被释放·加锁过程不要写在try里面,因为加锁过程如果发生异常,也会进入finally块导致锁无故释放 假设lock 方法放在内部,正常获取锁,finally 就会正常释放锁;但一旦异常,并没有真正拿到锁,此时执行 finally...
JavaTutorial07
Java并发线程基础什么是进程和线程?从操作系统层面理解: ·进程就是运行着的程序,它是程序在操作系统的一次执行过程,是一个程序的动态概念,进程是操作系统分配资源的基本单位。 ·线程可以理解为一个进程的执行实体,它是比进程粒度更小的执行单元,也是真正运行在cpu上的执行单元,线程是操作系统调度资源的基本单位。 进程中可以包含多个线程,需要记住进程是操作系统分配资源的基本单位,线程是操作系统调度资源的基本单位。 这时候聪明的小朋友就会问了,唉朱老师朱老师,调度和分配都是什么意思呀?个人的理解是,进程所谓的分配资源更加面向物理层,比如内存和文件句柄;线程,虽然一个进程内的多个线程可以共享该进程的内存空间和其他资源,但是每个线程有自己的执行路径和状态信息。操作系统会根据线程的优先级、等待时间等因素,决定哪个线程可以获得 CPU的使用权,从而实现并发执行。这个就是调度。 从Java程序理解...