- 博客(18)
- 资源 (3)
- 收藏
- 关注
原创 在分包项目中的奇葩错误UnsatisfiedDependencyException的其中一种解决方案
少打字,多来图::1.这是一个看起来非常正常的分包项目架构2.这是打开后的配置文件,因为是分包,所以controller项目运行的时候,并没有配给applicationContext.xml,需要加载在pom.xml中引入的其他项目的applicationContext.xml3.到目前为止,一切正常.下面是controller分包中的web.xml配置4.看起来依旧正常.......然而使用tomcat运行的时候....5.这本是IOC加载的问题,只要配置好注解就不会有
2020-12-29 03:08:47 1399
原创 并发容器学习笔记
容器全家福:容器包含:集合、map、数组物理上存储结构:连续存储的数组Array,非连续存储的链表LinkedQueue是专门为了高并发准备的早期只有hashtable和vector,而且这两个的所有方法都完全的加了synchronize,二者已淘汰hashtablehashmapConcurrentHashmap synchronizeMap对比:hashmap有两个版本:一个是普通的hashmap,另一个是加锁版本的Collections.synchr...
2021-02-06 16:49:57 97
原创 AQS ThreadLocal 强软虚弱
AQS(CLH结构):一个共享的数据,和一堆互相抢夺的线程非公平(nonAquir):线程进入前需要检查队列公平(Aquir):所有线程都是竟态state(int):state代表什么主要看其子类实现state在ReetraintLock中获得锁就是1,没有获得就是0state在CountDownLatch中里面有多少个数字,state就是几*根据子类和实现来规定state代表什么varHandle:代表指向对象的引用,可以做原子性操作,CAS操作,用native方法使.
2021-02-06 02:29:26 187
原创 如何阅读源码
读源码很难的原因:需要理解别人的思路要有设计模式和数据结构基础,不然有些时候就卡壳了要一条线索到底,不要使用静态跟进,要用debug模式stepInto跟进读源码的时候要画泳道图来明确调用关系、调用顺序...
2021-02-06 02:29:11 185
原创 操作系统到多线程高并发3
LockSupport(锁支持):LockSupport.park():当前线程停车,阻塞.LockSupport.unpark():当前线程停止阻塞,继续运行LockSupport.unpark(t),这里的t值得是某个线程,这个命令可以唤醒某个线程LockSupport.unpark可以先于LockSupport.park调用,阻止LockSupport.park阻塞线程,比wait灵活得多LockSupport.unpark底层是C++方法,注释说用这个方法就可以不用阻塞.
2021-02-05 21:50:27 64
原创 操作系统到多线程高并发2
CountDownLatch(倒数门闩);等待线程结束后执行减一操作latch.countDown():线程执行完结束之后,数量减一.但是这是动态操作,可以减的不是1,可以调用多次latch.await():当latch.countDown()减少到0的时候继续向下执行CyclicBarrier(计数栅栏):parties:等待数到达20new Runnable:数量到达20后执行的内容barrier.await():每一个线程都执行完,parties加1,等待par..
2021-02-05 21:49:54 75
原创 操作系统到多线程高并发1
操作系统:计算机程序运行:进程:QQ.exe双机之后加载到内存,分配资源的最基本单位。运行:CPU从内存中找到程序的main函数开始的位置把指令和数据读出来,把数据放在registers,把指令用pc保存起来,读一条指令执行一条指令。多线程:进程运行的时候,程序的主线程和fork出来的子线程一起执行。线程:资源调度的基本单位。alu计算单元:保存现场到cache线程切换:单核cpu,第一个线程执行,时间片到了之后,alu会把现场存储在cache中,切换第二个线程。如...
2021-02-05 21:49:15 226
原创 从操作系统到volatile
操作系统:计算机程序运行:进程:QQ.exe双机之后加载到内存,分配资源的最基本单位。运行:CPU从内存中找到程序的main函数开始的位置把指令和数据读出来,把数据放在registers,把指令用pc保存起来,读一条指令执行一条指令。多线程:进程运行的时候,程序的主线程和fork出来的子线程一起执行。线程:资源调度的基本单位。alu计算单元:保存现场到cache线程切换:单核cpu,第一个线程执行,时间片到了之后,alu会把现场存储在cache中,切换第二个线程。如果..
2021-02-05 04:15:43 240
原创 多线程与并发编程学习笔记2
List不安全会导致并发修改异常解决List不安全的几种方法1:vector* Vector是一个线程安全的List,但是它的线程安全实现方式是对所有操作都加上了synchronized关键字,这种方式严重影响效率.所以并不推荐使用Vector2.Collections.synchronizedList3.CopyOnWriteArrayList:写入时复制(COW思想)为避免写入同一块数据的时候避免覆盖造成数据问题,写入的时候创建一个副本做写入操作,然后写.
2021-01-30 09:06:29 112 2
原创 多线程与并发编程基础学习笔记1
进程一个程序运行起来了就是一个进程线程一个进程一般有多个线程java中线程默认两个 main gc开启线程:thread runnable callablejava能开线程么:不能,核心是调用C++的native方法start0并发,并行并发:多线程操作同一个资源单核CPU交替运行目的:充分利用cpu资源并行:多线程操作不同资源多核CPU一起执行线程状态...
2021-01-30 09:04:51 121
原创 zookeeper安装运行
1.1 下载安装1、环境准备ZooKeeper服务器是用Java创建的,它运行在JVM之上。需要安装JDK 7或更高版本。2、上传将下载的ZooKeeper放到/opt/ZooKeeper目录下#上传zookeeper alt+pput f:/setup/apache-zookeeper-3.5.6-bin.tar.gz#打开 opt目录cd /opt#创建zooKeeper目录mkdir zooKeeper#将zookeeper安装包移动到 /opt/zooKeep
2021-01-14 17:23:08 269
原创 JVM学习
JVMjvm是什么是一种规范,是虚构出来的计算机,有自己的指令集、汇编语言java执行过程.java文件经过javac编译为.class文件调用的时候.class和java相关类库被ClassLoader装载到内存之后通过java解释器和JIT即时编译器(经常执行的在JIT中走,反之走解释器), 之后通过执行引擎执行,再到硬件jvm文档规范查询https://docs.oracle.com/javase/specs/jvms/se1...
2021-01-14 17:15:58 114 2
原创 Android之各生命周期
onCreate: 该方法是在Activity被创建时回调,它是生命周期第一个调用的方法,我们在创建Activity时一般都需要重写该方法,然后在该方法中做一些初始化的操作,如通过setContentView设置界面布局的资源,初始化所需要的组件信息等。onStart: 此方法被回调时表示Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,因此无法与用户进行交...
2020-12-29 02:50:27 293
原创 Android中的设计模式
(1)单例模式:简介:保证一个类仅有一个实例,并提供一个访问它的全局访问点。示例:Android中的系统级服务都是通过容器的单例模式实现方式,以单例形式存在,减少了资源消耗。比如LayoutInflater Service,将这些服务以键值对的形式存储在一个HashMap容器中,用户使用时只需要根据key来获取到对应的ServiceFetcher,然后通过ServcieFetcher对象的getS...
2018-02-22 08:57:03 165
转载 Android自定义view
对于我这样一个Android初级开发者来说,自定义View一直是一个遥不可及的东西,每次看到别人做的特别漂亮的控件,自己心里那个痒痒啊,可是又生性懒惰,自己不肯努力去看书,只能望而兴叹,每次做需求用到自定义控件,就直接去Github上找,找到合适的就用,找不到合适的,凑合也用,反正从来没想过要自己来做这样的东西,可是毕业以后到了新公司,为了自己的荣誉,这次不得不硬着头皮自己来了,一个月的紧张开发过
2018-01-09 17:08:42 201
原创 控制物体位移
transform.Translate(Vector3.left*moveSpeed*Time.deltaTime);物体如果要位移,就要使用世界坐标位移这段代码的意思是:世界坐标位移(向左侧位移*速度*帧率)
2017-09-20 15:11:20 358
原创 unity中Update和FixedUpdate区别
Update是在每次渲染新的一帧的时候才会调用FixedUpdate,是在固定的时间间隔执行,不受游戏帧率(fps)的影响FixedUpdate的时间间隔可以在项目设置中更改,Edit->Project Setting->time 找到Fixed timestep。就可以修改了
2017-09-20 14:35:53 456
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人