java自习室 day 4

动态规划

高效的动态规划算法
作者:Meet Zaveri
动态规划主要用于解决寻找最优解的优化问题。当问题反复出现,并且可以被分解为更小的子问题时,可以从解决更小的子问题出发,记录结果,将结果作为更大问题的原始解。
动态规划经常需要找到状态方程,例如斐波拉契数列。动态规划主要包括两种问题:优化问题组合问题
动态规划的解决方法分为两种:

  1. 自上而下(记忆存储Memoization)
    从最顶端开始分解问题,分解到最小并且问题已经解决,此时返回保存的结果。采用递归的思路。
  2. 自下而上(表格填充Tabulation)
    从解决子问题出发,获得一个比较好的解决方案。采用迭代的思路。

并发

高并发是什么
作者:hncg
并发指的是两个事件在同一时间段交替触发,在宏观上看,是同时完成的。
C/S的http请求流程:
在这里插入图片描述
网络编程流程演化史:
在这里插入图片描述

上下文:

  1. CPU上下文
    任务从哪里加载,从哪里运行。这些信息保存在CPU寄存器和操作系统的程序计数器中。
  2. 进程上下文
    虚拟内存、栈、全局变量等用户空间的资源以及内核堆栈、寄存器等内核空间的状态。
  3. 线程上下文
    父进程的资源加上线程自己的私有数据。
    同一进程的线程的切换由于资源共享,切换消耗的资源更少。

操作系统

Java与操作系统交互细节
作者:董鹏dp
代码执行需要有可执行的上下文环境(指令寄存器、数据寄存器、栈空间等内存资源),这行代码还必须作为一个执行流能够被操作系统的任务调度器识别,并分配CPU资源。java代码需要被编译器转化成java字节码。
解释执行:jvm通过类加载器加载class文件中的字节码,再通过解释器解释成汇编指令,最终转译成CPU可以识别的机器指令。
即时编译(JIT):JVM直接将某些热点代码一次全部编译成机器指令再执行。
在这里插入图片描述
进程上下文:为进程分配的内存以及CPU资源。JVM启动后也是linux上的一个普通进程。
虚拟存储
CPU采用段基址+段内偏移的方式访问内存,段基址是绝对物理地址,在程序启动时确认。虚拟存储让每个进程以为自己独占整个内存空间。
内存映射:将磁盘文件直接映射到用户的虚拟存储空间中。
在这里插入图片描述
MappedByteBuffer
java中实现内存映射的方式。访问数据页的时候,先查页表,发现还没加载就发起缺页异常。然后从磁盘中将数据加载进内存。
synchronized
声明了synchronized的代码块编译而成的字节码包含一个monitorenter和多个monitorexit。当执行monitorenter时检查目标锁对象的计数器是否为0,如果为0将锁对象的持有线程设置为自己,然后计数器加1,获取到锁。如果不为0,则检查锁对象的持有线程是不是自己,如果是自己就将计数器加1获取锁,如果不是则阻塞等待。退出的时候计数器减1,当减为0的时候清除锁对象的持有线程标记。
happen-before
描述两个操作的内存可见性。针对volatile和锁的实现就有该规则。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值