- 博客(28)
- 资源 (12)
- 收藏
- 关注
原创 jdk 源码分析(0) java 源码分析汇总
jdk源码分析汇总:后续会不断添加jdk 源码分析(17)java Semaphore 源码解析及与lock对比jdk 源码分析(16)java CyclicBarrier 源码解析jdk 源码分析(15)java CountDownLatch 源码解析jdk 源码分析(14)java ThreadLocaljdk 源码分析(13)java Ex
2017-08-05 13:21:51 1103
原创 深度学习笔记(五) 代价函数的梯度求解过程和方法
作为自己的笔记系列,方便自己查阅和理解。1)什么是梯度梯度本意是一个向量(矢量)当某一函数在某点处沿着该方向的方向导数取得该点处的最大值,即函数在该点处沿方向变化最快,变化率最大(为该梯度的模)。在二元函数的情形,设函数z=f(x,y)在平面区域D内具有一阶连续偏导数,则对于每一点P(x,y)∈D,都可以定出一个向量(δf/x)*i+(δf/y)*j
2017-08-31 22:30:24 25852 1
原创 深度学习笔记(四) cost function来源和证明
1)什么是代价函数WIKI的解释:Cost functionIn economics, the cost curve, expressing production costs in terms of the amount produced.In mathematical optimization, the loss function, a function
2017-08-25 22:58:06 3159
原创 深度学习笔记(三)back propagation(BP) 原理和求解过程
上一章分析基本神经网络以及怎么训练网络过程。里面有用到提到BP (反向传播的求解)1)BP 其实是一种思想首先我们看一个计算式子e=(a+b)∗(b+1)的图模型:如下左图所示, 其中,c,d表示中间结果,边的方向表示一个结点是另一个结点的输入。 假设输入变量a=2,b=1时,图中各结点的偏导计算结果如下: 利用正向微分算法,
2017-08-24 22:52:08 8378 1
原创 深度学习笔记(二)神经网络
1)发展历史因为感知器只能 处理线性问题,当Hinton在1986年发明了适用于多层感知器(MLP)的BP算法,并采用Sigmoid进行非线性映射,有效解决了非线性分类和学习的问题原理:上一个章节介绍了感知器,分析了感知器为啥不可以解决非线性问题。如果将激活函数改为sigmoid或者relu将能过够处理非线性问题。同时多层感知器出现,经证明,多层感知器能表示任何
2017-08-23 22:40:10 1266
原创 深度学习笔记(一)感知器
刚忙完一个项目,最近时间相对比较多,所以上午一般对spark的源码分析,下午研究深度学习,spark源码分析文档在公司写的,没法外传,下午深度学习没有写博客,所以想晚上写一个系列。这个系列主要是针对这对时间的对深度学习写一个备忘录,同时加深一点印象。所有的内容都是在网上,书上看到的,我只是做一些终结和看法。1)深度学习发展历史:这一章节主要分析感
2017-08-23 21:24:53 4232
原创 spark 源代码分析 (二)spark启动过程
下载spark后,调用shell脚本启动:./bin/spark-shell --master local[2]接下来将分析这个一个过程。spark-shell会启动--class org.apache.spark.repl.Main,参数--name"Spark shell""$@" ,然后会调用spark-submitcygw
2017-08-15 20:36:34 864
原创 jdk 源码分析(21)java 动态代理和反射
java动态代理用在很多地方。spring框架,RPC框架中都使用了动态代理,动态代理很重要。首先看看静态代理:相对静态代理而已,静态代理需要对每一个方法做一次处理。如下:定义一个实体列,交个代理类,然后由代理帮忙做事 public static void main(String[] args) { People people = new S
2017-08-09 23:09:40 602
原创 jdk 源码分析(20)java NIO包简单分析
优点,采用多路复用,而且因为采用buffer机制,当读写buffer时不需要阻塞。nio 也有缺点,因为nio需要很多代码去出去半包问题,而底层采用epoll也是有问题,这些问题在多并发是可能出现,因为这些问题,所以出现netty,netty能快速开发出稳定的通信框架,所以spark/kafka都有netty。
2017-08-08 22:05:16 2664 1
原创 jdk 源码分析(19)java net包简单分析
net里的网络连接是阻塞的,如果服务器端使用,一般每获取一个请求后启动一个新的线程,然后由新的线程处理数据。不再服务器接收请求的那里直接处理。当然也可以像nio那样,将一个线程专门处理接收,然后启动一个线程池,专门接收数据,然后一个线程池处理数据,一个线程池会写数据。
2017-08-05 23:45:35 1089
原创 jdk 源码分析(18)java io包分析
总结:io分为读output和写input,同时通过解码可以分为字符流Reader和字节流InputStream。通过组装DataInput可以读取int,long和float和short等。通过ObjectInputStream序列化和反射可以直接读成对象readUTF等。
2017-08-05 16:22:23 711
原创 jdk 源码分析(17)java Semaphore 源码解析及与lock对比
总结:应该可以说Semaphore 如果说是一种特殊的lock:(因为大家首先首先lock才这么说,应该是lock是一种特殊的Semaphore)1)lock 是独占,一人享用,而Semaphore是一个多人使用,lock是电影院的VIP单人间,而Semaphore是大厅。 2)lock和Semaphore都需要排队,都有两种排队方式:公平和非公平。3)lock和Semaphore都是改变state变量,只是lock争夺0变成1,而Semaphore是争一个非零的值,因此几率大很多。4)如果初始是
2017-08-05 12:38:51 486
原创 jdk 源码分析(16)java CyclicBarrier 源码解析
CyclicBarrier 的实现很简单,1)定义两个变量parties 和count,2)每次线程将count减少1,如果减少完之后count!=0,进程竟然await 。如果count==0. signalAll所有线程,同时将count置为parties,开始新的一轮3)Generation是里面的一个标准,用于中断CyclicBarrier等。所以新的一轮是会重新new 一个Generation
2017-08-05 11:38:39 453
原创 jdk 源码分析(15)java CountDownLatch 源码解析
CountDownLatch 和lock的机制很相似,(参考lock:jdk 源码分析(7)java ReentrantLock结构)相同点:1)lock需要队列保存竞争的线程,CountDownLatch需要队列(链表)保持等待的线程线程,2)都需要park和unpark。不同点:1)lock (重入锁)是争论的谁能将state 变成1,而CountDownLatch 是大家一起齐心协力将state 变成0,2)lock 是改变不了state的线程park,而CountDownLatch 是需
2017-08-05 10:51:13 503
原创 jdk 源码分析(14)java ThreadLocal
优点:各自线程维护自己的变量,能在线程里任何位置设置值,读取值,不需要通过参数在方法或对象中显示传递。
2017-08-04 23:01:15 363
原创 jdk 源码分析(13)java ExecutorService 和Executors
线程池首先判断有多少可以运行,1)如果可以运行,直接加入到workers 集合中,并且里面启动包装类worker,worker,在执行完当前线程后会去线程池中寻找下一个线程,并且执行2)如果当前执行的线程大于设定的数目,就线程放入缓存队列queue 里面。这里的线程,会在上(1)中执行后调用。
2017-08-04 22:24:05 438
原创 jdk 源码分析(12)java condition 条件锁
在分析ReentrantReadWriteLock 时知道多个线程在争论一个state,那么当时数据放在那里呢。都是放在syns里,这个类继承了AbstractQueuedSynchronizer,而里面的node(链表)就是存储数据的。所以其实所有的lock 是离不开的队列的。今天的condition 也是离不开队列,也离不开lock,所以其实现类就放在AbstractQueuedSynchro...
2017-08-03 23:11:35 455
原创 jdk 源码分析(11)java ArrayBlockingQueue 缓存队列分析
队列没有什么,如图,分为头和尾,都是FIFO(先进先出),用数组和链表都能存储数据,数组当poll 数据后,需要整体移位(当然循环数组也是可以不移位的。),链表就方便很多。插入时在头部添加一个,删除是在尾部直接删除,
2017-08-03 22:29:33 456
原创 jdk 源码分析(10)java unsafe 分析
cas大意就是先去获取一次结果,如果结果和现在不同,就直接返回,因为有其他人修改了;否则会一直尝试去修改。直到成功。
2017-08-03 21:37:35 3214
原创 jdk 源码分析(9)java ReentrantReadWriteLock分析
ReentrantReadWriteLock将分为两种情况,read/write,两种之间存在竞争关系,而且write里面竞争是你死我活,但是read则是共享社会。write 和前面的reentrantlock很类似,所以里面的规则也是一样。需要分为公平与不公平,也需要排队。
2017-08-02 23:49:38 357
原创 jdk 源码分析(8)java synchronized和锁lock对比
因为synchronized 是关键字,无法看到源代码,所以只能做一个简单的分析对比了,synchronized 能锁方法,也能锁代码块,其实也是一种重入锁(也就是自己的锁,自己可以进去),代码块或方法离开,自动释放锁。lock:lock能做synchronized能做的所有的事情,但是lock 能过在资源竞争地方,通过投票等方法让其他锁释放。而sync
2017-08-02 22:52:28 1649
原创 jdk 源码分析(7)java ReentrantLock结构
lock看上去很牛,其实真的很牛,如果你仔细研究代码发现,所以的lock都只是去争一个变量stateprivate volatile int state;如果你能将这个state从零变成1,你就可以获得资源,因为要判断是谁获得了这个state,所以需要保留这个线程的对象。因为要记录有哪些线程在争论lock,所以需要队列,既然有队列,就有队列的机制,公平机制(先到先得),非公平机制(可能存在饿死的线程,一直得不到)。这里的队列是用Node组成的链表,记录了head和tail。
2017-08-02 22:39:21 331
原创 jdk 源码分析(6)java BitSet结构
如果有一个Set 里面存放了(整数)1,3,4,5,23,23,12,65这些数,如果直接存储需要8×32位 ;如果采用位图,只需要用两个long整型串联。
2017-08-02 21:39:23 325
原创 jdk 源码分析(5)java ConcurrentSkipListMap结构
跳表结构之下往上分层,比如需要找117,首先会判断最高层,先比较21,在比较37 ,再比较37左边的,因为左边结束了,所以只能往下走,一直找到目标为止:寻找规则,从最高层开始,先右,再下,直到最后。
2017-08-02 21:02:09 362
原创 jdk 原地分析(3)java ConcurrentHashMap结构分析
1)存储结构:存储结构和hashmap相似,但是添加一个root级别的锁。链表:static class NodeK,V> implements Map.EntryK,V> { final int hash; final K key; volatile V val; volatile NodeK,V> next; Node(int hash
2017-08-01 23:50:22 402
原创 jdk 源码分析(2)java hashtable的结构及hashMap对比
首先hashtable 只有一种存储结构。线性链表,这和hashmap 不同,hashmap 当数据量大是采用二叉树,可以加快查询。
2017-08-01 23:33:38 361
原创 jdk 源码分析(1)java hashmap的结构
总而言之就是hashmap根据hash分为不同的多个链表,每个链表/树是hash相同的Node。
2017-08-01 23:01:50 552
交通灯定时控制系统实验报告 含Multisim仿真图 含555定时器引脚图
2009-12-14
交通灯定时控制系统的设计、制作 Multisim仿真图
2009-12-06
多功能数字时钟设计报告 用555定时器 160计时器 仿真图 Multisim
2009-11-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人