当前位置: 首页 > news >正文

运行时数据区-虚拟机栈

文章目录

  • 谈谈你对虚拟机栈的理解
  • 栈帧
    • 什么是栈帧(Stack Frame)
    • 当前栈帧
  • 栈帧的内部结构
    • 局部变量表
      • Slot
    • 操作数栈Operand Stack
    • 动态链接
    • 方法返回地址
    • 一些附加信息
  • 虚方法和非虚方法
    • 方法的调用:虚方法表
  • 面试题
    • 方法中定义的局部变量是否线程安全?
    • 运行时数据区哪些存在Error和GC?
  • 补充
    • 栈顶缓存技术Top Of Stack Cashing
    • 字节码中方法内部结构剖析

谈谈你对虚拟机栈的理解

是什么?
Java虚拟机栈(Java Virtual Machine Stack)是线程私有的。每个线程拥有一个虚拟机栈,其内部保存一个一个的栈帧(Stack Frame),对应着一次一次的Java方法调用,即一个方法对应一个栈帧。

作用
主管Java程序的运行,它保存方法中的局部变量、部分结果,并参与方法的调用和返回。

栈的生命周期
栈的生命周期和线程一致,当线程结束了,该虚拟机栈也就销毁了。

和堆对比
栈是运行时的单位,而堆是存储的单位
栈解决程序的运行问题,即程序如何执行,如何处理数据。
堆解决的是数据存储的问题,即数据怎么放,放哪里

可能存在的异常问题
对于栈来说不存在垃圾回收问题,因为出栈即相当于回收,但是存在栈溢出的情况

Java栈的大小
分动态或固定不变两种

  • 如果大小固定
    那每一个线程的Java虚拟机栈容量可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机将会抛出一个StackoverflowError 异常。

  • 如果大小动态变化
    在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那Java虚拟机将会抛出一个 outofMemoryError 异常。

Java的指令根据栈来设计
由于跨平台性的设计,不同平台CPU架构不同,不适合设计成基于寄存器,所以Java的指令都是根据栈来设计的。
优点是跨平台,指令集小,编译器容易实现,
缺点是性能下降,实现同样的功能需要更多的指令。

栈帧

什么是栈帧(Stack Frame)

栈帧是栈的基本存储单位,栈中的数据都是以栈帧的格式存在。一个方法对应一个栈帧。

栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。

不同线程的栈帧不允许相互引用
即不可能在一个线程的栈帧之中引用另外一个线程的栈帧。

当前栈帧

在一个线程中,同一时间只会有一个活动的栈帧。即只有当前正在执行的方法的栈帧是有效的
这个栈帧被称为当前栈帧(Current Frame)
与当前栈帧相对应的方法就是当前方法(Current Method)
定义这个方法的类就是当前类(Current Class)

执行引擎运行的所有字节码指令只针对当前栈帧进行操作。

如果在当前方法中调用了新的方法,对应的新的栈帧会被创建出来,放在栈的顶端,成为新的当前帧。
例如:如果当前方法A调用了其他方法B,则B成为当前方法,方法B返回之际,当前栈帧B会传回此方法的执行结果给前一个栈帧A,接着,虚拟机会丢弃当前栈帧B,使得前一个栈帧A重新成为当前栈帧
图示:
在这里插入图片描述

栈帧的内部结构

每个栈帧中包括:

  • 局部变量表(Local Variables,本地变量表)
  • 操作数栈(operand Stack,表达式栈)
  • 动态链接(DynamicLinking,指向运行时常量池的方法引用)
  • 方法返回地址(Return Address,方法正常退出或者异常退出的定义)
  • 一些附加信息

栈帧的大小主要由局部变量表 和 操作数栈 共同决定的

图示:
在这里插入图片描述
下面一一详细介绍这些内部结构

局部变量表

是什么?
主要用于存储方法参数定义在方法体内的局部变量(包括8种基本数据类型、对象引用(reference),以及return Address类型)
在方法执行时,虚拟机使用局部变量表来完成方法参数和局部变量的传递。

特点
1、由于局部变量表是栈帧的内部结构,所以是线程的私有数据,因此不存在数据安全问题

2、局部变量表的大小在编译期就确定下来了,在方法运行期间不会改变。

3、方法嵌套调用的次数由栈的大小和方法含有的数据量共同决定。
一般来说,栈越大,方法嵌套调用次数越多。
方法包含的参数和局部变量越多,栈帧就越大,嵌套调用次数越少。

4、局部变量表中的变量只在当前方法调用中有效

5、在栈帧中,与性能调优关系最为密切的部分就是局部变量表

6、局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。

7、局部变量表的生命周期
和栈帧一致

Slot

什么是Slot?
Slot(变量槽)是局部变量表最基本的存储单元,一个局部变量表由N个slot组成
在局部变量表里,32位以内的类型(char,int)只占用一个slot,64位的类型(long和double)占用两个slot

栈——栈帧——局部变量表——Slot

slot的工作原理:
JVM会为局部变量表中的每一个Slot都分配一个访问索引,通过这个索引即可成功访问到局部变量表中指定的局部变量值
index=0,也就是第一个索引处放对象引用this。当一个实例方法被调用的时候,它的方法参数和方法体内部定义的局部变量将会按照顺序依次被复制到局部变量表中的每一个slot上。

Slot的重复利用
局部变量表中的slot槽位是可以重用的
举例:
下面方法localVar2中的局部变量a出了代码块,也就过了其作用域之后,就会被销毁,但是其槽位不会销毁,那么在其作用域之后申明的新的局部变量b就很有可能会复用过期局部变量a的槽位,从而达到节省资源的目的。

在这里插入图片描述

操作数栈Operand Stack

作用:
主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间

工作机理:
操作数栈在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)和 出栈(pop)
某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用它们后再把结果压入栈,比如:执行复制、交换、求和等操作
在这里插入图片描述

动态链接

是什么?

  • 早期绑定–静态链接
    当一个字节码文件被装载进JVM内部时,如果被调用的目标方法编译期即可确定,且运行期保持不变时,这种情况下将调用方法的符号引用转换为直接引用过程称之为静态链接

  • 晚期绑定–动态链接
    如果被调用的方法在编译期无法被确定下来,也就是说,只能够在程序运行期将调用的方法的符号引用转换为直接引用,由于这种引用转换过程具备动态性,因此也被称之为动态链接

在这里插入图片描述

为什么需要运行时常量池?直接将方法存放在栈中不行吗?何必多此一举?———为了节约内存空间

运行时常量池中存储一份数据(张三本人),每次栈中的方法需要张三时就用“张三”指向运行时常量池来获取张三本人

否则每个栈中的方法都要存一份张三本人,太浪费空间了。

方法返回地址

一个方法的结束,有两种方式:
1、正常执行完成并退出
2、出现未处理的异常时非正常退出

无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置,即方法返回地址

一些附加信息

栈帧中还允许携带与Java虚拟机实现相关的一些附加信息。例如:对程序调试提供支持的信息。

虚方法和非虚方法

如果方法在编译期就确定了具体的调用版本,这个版本在运行时是不可变的,这样的方法称为非虚方法——静态
要等到运行期才能确定版本的为虚方法——动态

非虚方法包括:静态方法、私有方法、final方法、实例构造器、父类方法
其他方法称为虚方法

方法的调用:虚方法表

为了提高性能,JVM采用在类的方法区建立一个虚方法表
表中存放虚方法的调用版本。
非虚方法不会出现在表中,因为非虚方法在编译时就能确定其调用版本。

每个类中都有一个虚方法表,表中存放着各个方法的实际入口

虚方法表是什么时候被创建的呢?

虚方法表会在类加载的链接阶段被创建并开始初始化,类的变量初始值准备完成之后,JVM会把该类的虚方法表也初始化完毕。
在这里插入图片描述
如上图所示:如果类中重写了方法,那么调用的时候,就会直接在自己的虚方法表中去找。否则将会直接连接到Object的方法中。

面试题

调整栈大小,就能保证不出现溢出么?
不能保证不溢出。只能延长

分配的栈内存越大越好么?
不是,内存大确实可以降低OOM概率,但是会挤占其它的线程空间,因为整个空间是有限的。

垃圾回收是否涉及到虚拟机栈?
没有

方法中定义的局部变量是否线程安全?

下面举例说明是否安全(认真看)


public class StringBuilderTest {// s1的声明方式是线程安全的public static void method01() {// 线程内部创建的,属于局部变量StringBuilder s1 = new StringBuilder();s1.append("a");s1.append("b");}// 这个是线程不安全的,因为有返回值,有可能被其它的程序所调用public static StringBuilder method04() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("a");stringBuilder.append("b");return stringBuilder;}// stringBuilder 是线程不安全的,操作的是共享数据public static void method02(StringBuilder stringBuilder) {stringBuilder.append("a");stringBuilder.append("b");}//同时并发的执行,会出现线程不安全的问题public static void method03() {StringBuilder stringBuilder = new StringBuilder();new Thread(() -> {stringBuilder.append("a");stringBuilder.append("b");}, "t1").start();method02(stringBuilder);}// StringBuilder是线程安全的,但是String也可能线程不安全的public static String method05() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("a");stringBuilder.append("b");return stringBuilder.toString();}
}

总结:如果对象是在内部产生,并在内部消亡,没有返回到外部,那么它就是线程安全的,反之则是线程不安全的。

运行时数据区哪些存在Error和GC?

运行时数据区是否存在Error是否存在GC
程序计数器
虚拟机栈
本地方法栈
方法区是(OOM)

补充

栈顶缓存技术Top Of Stack Cashing

基于栈式架构的虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然需要使用更多的入栈和出栈指令,这同时也就意味着将需要更多的指令分派次数和内存读/写次数。由于操作数是存储在内存中的,因此更多的指令分派次数和内存读/写次数必然会影响执行速度。

为了解决这个问题,HotSpot JVM的设计者们提出了栈顶缓存技术将栈顶元素全部缓存在物理CPU的寄存器中,以此降低对内存的读/写次数,提升执行引擎的执行效率。

字节码中方法内部结构剖析

main方法:

在这里插入图片描述
可以看到下图中

Name: main

Desciptor: Ljava/lang/String 中开头的L表示引用类型变量,总共表示一维的String数组。

Access flags:访问标识(public static)

一共就完整描述了 public static void(String[] args)

在这里插入图片描述

下面就是code的介绍:
在这里插入图片描述

下面是LineNumberTable的介绍:

在这里插入图片描述
在这里插入图片描述

下面是对LocalVariableTable的描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

2021年Java开发爆款推荐!docker部署tomcat

一.java基础面试知识点 java中和equals和hashCode的区别 int、char、long各占多少字节数 int与integer的区别 探探对java多态的理解 String、StringBuffer、StringBuilder区别 什么是内部类?内部类的作用 抽象类和接口区别 抽象类的意义 抽象类与接口的应用…...

阿里P8大牛亲自讲解!java静态变量和实例变量

Redis主从复制 概念 Redis的主从复制概念和MySQL的主从复制大概类似。一台主机master,一台从机slaver。master主机数据更新后根据配置和策略,自动同步到slaver从机,Master以写为主,Slave以读为主。 主要用途 读写分离&#xff1…...

品牌应该如何把握抖音电商的红利:深度拆解花西子如何通过抖音电商一年销售1亿+

最近抖音电商正在逐渐起势,前一阵子老赵去参加了抖音的电商大会和千川大会,从这两个会的火爆程度我们就可以看出,越来越多的品牌正在涌向抖音电商平台,并且越来越重视这个平台。抖音电商将是品牌们的新战场,这个平台让…...

Layui快速入门(2021.06.15)

第一步&#xff1a;下载layui文件 第二步&#xff1a;新建项目&#xff0c;导入下载的文件夹 第三步&#xff1a;参考文档开发 1.layui入门html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>la…...

Mysql异常之Communications link failure

前天线上出现数据数据抖动&#xff0c;收到大量异常告警&#xff0c;都要疯了&#xff0c;数据库出现大量异常&#xff0c;肯定第一件事就是看下数据库监控数据&#xff0c;发现有一个从分片执行时间有一个50多秒的操作&#xff0c;这里肯定有问题了&#xff0c;第一时间找了db…...

储备未完待续

储备 如何精准熬一人份的粥 如何快速晾凉一碗粥 3M手套和钢铁侠 洗手盆三件套 三种门锁、两个门锁 制作书签的一种方法 摩托车和汽车的排气筒 变形金刚和巴巴爸爸 横向冲击和纵向冲击 我和图书馆 影响我的三本书 曲黎敏、亨利我们会追上你的、穷理查历书...

如何成为一个成功的 Java 开发人员?

【此文章转自乐字节】 如果你是一名成功的Java程序员&#xff0c;那么在任何公司中的Java开发人员中&#xff0c;你都有机会获取一席之地。 前言 在当今时代&#xff0c;有很多编程语言可能会塑造我们的未来。然而&#xff0c;当我们开始学习编程时&#xff0c;我们总是从C语…...

代理和负载均衡的详细说明是什么

对客户端提供的代理服务&#xff0c;在客户端无法直接访问服务端的情况下&#xff0c;星池StarPool通过配置代理服务器的方式访问服务端。在整个过程中&#xff0c;客户端请求首先发送到代理服务器&#xff0c;代理服务器再将请求发送到服务端后将结果返回给客户端。从服务端角…...

使用DNSObserver检测DNS安全漏洞

关于DNSObserver DNSObserver是个功能强大的DNS服务&#xff0c;该工具使用Go语言开发&#xff0c;可以帮助广大研究人员轻松检测各种类型的盲注漏洞。它可以监控渗透测试人员所搭建服务器的带外DNS交互信息&#xff0c;并通过Slack发送查询通知。DNSObserver可以帮助我们寻找的…...

整理了 34 个 Python 自动化办公库

本次内容涵盖了Excel、Word、PPT、ODF、PDF、邮件、微信、文件处理等所有能在办公场景实现自动化的库,希望能够对大家有所帮助。 Python Excel自动化库 // 1.xlwings 库 官网: https://www.xlwings.org/ 特点:xlwings 是开源且免费的,预装了 Anaconda 和 WinPython,可…...

为什么自己干了这么多活,最后功劳都是别人的?

【本文只针对IT行业技术岗】 一、粉丝留言 自己每天加班到10点&#xff0c;有时候都到凌晨&#xff0c;周6基本全勤&#xff0c;公司项目忙的时候周日还去加班&#xff0c; 做过的项目无数&#xff0c;很多项目都给公司带来了丰厚的利润。 年底年终奖比别人少了一个月&…...

pytest(10)-参数化详解

先看如下情况&#xff0c;即为了测试一个函数&#xff0c;列举了三个测试用例&#xff0c;每个用例其实就是参数不同而已 在test_example.py 文件中编写如下代码&#xff1a; def add(a,b):return (ab)def test_1():assert add(3,5)8def test_2():assert add(2,4)7def test_3(…...

防(反)浏览器指纹技术之指纹浏览器揭秘

什么是指纹浏览器? 首先&#xff0c;这个指纹并不是上班打卡的指纹&#xff0c;也不是你家指纹锁的指纹&#xff01; 这里指的浏览器指纹是指通过浏览器的各种信息&#xff0c;如系统字体、屏幕分辨率、浏览器语言、时区等等&#xff0c;无需 cookie 等技术&#xff0c;就能…...

2021全球暑期量子学习日程汇总,谷歌量子夏季研讨会正在报名中

今日小暑&#xff0c;虽酷热&#xff0c;但学习热忱不减&#xff0c;尤其是在各个科技巨头和高等院校接连发布了量子暑期班的招募通告后&#xff0c;大家可以妥善安排&#xff0c;“错峰出行”。 近日&#xff0c;谷歌也发布了暑期会议相关通告&#xff0c;其量子夏季研讨会 (…...

STM32使用STM32CubeMX配置引脚中断

前言 嵌入式系统中&#xff0c;外部中断&#xff0c;是一个比较常见的功能。中断的灵活使用&#xff0c;大大增强了系统的实时性。使用STM32 最新的HAL库&#xff0c;如何配置一个引脚中断呢&#xff1f; 配置中断 可以借助STM32提供的可视化软件&#xff1a;STM32CubeMX&#…...

最新出炉,头条三面技术四面HR,看我如何一步一步攻克面试官?

最开始面的头条游戏中台&#xff0c;当时是第一次面试&#xff0c;没有经验&#xff0c;导致算法题虽然有思路&#xff0c;但是没有写出最优解&#xff0c;直接挂了。后来又被捞起来&#xff0c;因为此时已有阿里的offer&#xff0c;所以胆子也大起来了&#xff0c;收拾心情开始…...

Linux基本命令

文章目录第一章Linux基础一、基本命令1.ls命令2.cd命令3.文件操作二、用户解读1.用户权限三、linux的基本操作1.软件介绍2.用户操作3.组3.1权限控制4.文件权限控制4.1权限设置5.vim的使用——一开始是命令模式6.寄存器7.find命令格式8.管道符—— |xargs9.grep命令第一章Linux基…...

docker+k8s 报错

dockerk8s报错 问题点&#xff1a;docker容器中或者k8s的pod中执行systemctl相关后台服务 报错信息&#xff1a;Failed to get D-Bus connection: Operation not permitted解决办法 docker&#xff1a;运行容器添加参数–privilegedtrue /sbin/init docker run -tid --name…...

51单片机入门之按键

对于单片机&#xff0c;单片机上电后默认为高电平&#xff0c;所以对于按键&#xff0c;按下去之后变为低电平&#xff08;因为按键接地了&#xff09;&#xff0c;未按下去则为高电平&#xff0c;而因为单片机不仅可以改变引脚电平&#xff0c;也可以读取引脚电平&#xff0c;…...

秃头程序员必备Java面试手册!带你跳槽涨薪走上人生巅峰,迎娶白富美

都说程序员工资高、待遇好&#xff0c;改变无数程序员职业生涯的金九银十快来了&#xff0c;你的小目标是什么 30K、40K&#xff0c;还是 16 新的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的奖励 Offer 并不算…...

双亲委派模型

从Java 虚拟机的角度来讲&#xff0c;只存在两种不同的类加载器&#xff1a;一种是启动类加载器&#xff08;BootstrapClassLoader&#xff09;&#xff0c;这个类加载器使用C语言实现&#xff0c;是虚拟机自身的一部分&#xff1b;另一种就是所有其他的类加载器&#xff0c;这…...

【报告分享】2021中国住宿业市场网络口碑报告-中国饭店协会众荟(附下载)

摘要:通过语义分析进一步了解酒店住宿业在不同服务维度的表现与变化趋势。点评是消费者对酒店服务最真实的反馈&#xff0c;不同服务的观点数&#xff0c;一方面反映消费者对该项服务的关注度&#xff0c;另一方面也反映酒店在营销中的 “有形展示” 是否做得到位&#xff0c;酒…...

Java学习笔记--13.网络编程

Java学习笔记–13 第十章 网络编程 目录Java学习笔记--13前言网络编程1.定义2.TCP通信(1).ServerSocket(2).Socket3.UDP通信(1).发送方(2).接收方前言 21世纪&#xff0c;走进了信息时代&#xff0c;各种各样的软件层出不穷&#xff0c;但是总离不开程序开发&#xff0c;离不…...

JavaScript-DOM、BOM对象

DOM对象 功能&#xff1a;控制html文档的内容 1、获取页面标签(元素)对象&#xff1a;Element 方法&#xff1a;document.getElementById(“id值”)&#xff1a;通过元素id获取元素对象、 2、操作Element对象&#xff1a; 1&#xff09;. 修改属性值&#xff1a; 明确获取的对…...

[高维随机矩阵-2]

本系列主要按照《Introduction to random matrices theory and practice》进行&#xff0c;后续不再一一声明。每次使用新资料&#xff0c;都会在第一次使用时声明&#xff0c;后续也不再一一生明。 1. 本书目标读者是绝对的零基础人员。 2.随机矩阵理论random matirx theory…...

目前最简多模态transformer:ViLT

facebook的文章&#xff0c;一句话概括&#xff1a;图像patch和文本embedding concat在一起过transformer&#xff0c;做图像-文本匹配任务 相比之前的多模态transformer&#xff0c;创新点在用Vit的patch方案作为visual embedding而不是先过CNN提取特征&#xff0c;或者更繁琐…...

Vue相关:

目录 1,说一下vue最大特点是什么或者说vue核心是什么 2,说一下vue常用基本指令有哪些 3,Vue常用的修饰符...

BUUCTF 逆向工程(reverse)之Java逆向解密

程序员小张不小心弄丢了加密文件用的秘钥&#xff0c;已知还好小张曾经编写了一个秘钥验证算法&#xff0c;聪明的你能帮小张找到秘钥吗&#xff1f; 注意&#xff1a;得到的 flag 请包上 flag{} 提交 下载好题目后&#xff0c;发现它是个以.class为后缀的。所以用JD-GUI打开这…...

整理了 34 个 Python 自动化办公库

本次内容涵盖了Excel、Word、PPT、ODF、PDF、邮件、微信、文件处理等所有能在办公场景实现自动化的库,希望能够对大家有所帮助。 Python Excel自动化库 // 1.xlwings 库 官网: https://www.xlwings.org/ 特点:xlwings 是开源且免费的,预装了 Anaconda 和 WinPython,可…...

FOXIT PDF SDK 8.1 ALL Crack

Foxit PDF SDK&#xff08;Windows版&#xff09; 提供三种库&#xff1a;C库、C#&#xff08;.NET&#xff09;库、和Java库&#xff0c;Ω578867473在客户端和服务端环境下均可运行&#xff08;32位和64位系统&#xff09;。 查看PDF 我们的核心API针对桌面和移动平台进行了优…...

dbc2000 注册机|dbc2000 注册码注册机下载

点击下载来源&#xff1a;dbc2000 注册机 dbc2000 注册机是同名源程序软件的注册机软件&#xff0c;该源程序软件是一款应用于数据库搭建以及数据写入的数据库架设工具&#xff0c;它拥有强大的数据写入功能&#xff0c;在作为应用程序使用时&#xff0c;它不仅可以充当数据属性…...

秋招面经第八弹:网易二面-数据开发工程师

秋招第八弹&#xff1a;网易二面-数据开发工程师 写在最前&#xff1a;秋招以来一直在冲&#xff0c;因为事情比较多&#xff0c;对于笔试面试一直没有复盘&#xff0c;现在靠仅存的记忆把面试的一些问题记录下来&#xff0c;尽可能记录出能回忆到的问题&#xff0c;但可能记的…...

安卓课程格子APP

https://download.csdn.net/download/weixin_57836618/73810452 功能演示&#xff1a; 查看所有课程 点击主页面空白处即可添加课程 添加课程之后查看课程 查看双周课程 查看单周课程 6.查看课程详情...

强化学习——格子世界

强化学习——格子世界 项目源码地址&#xff1a;https://gitee.com/infiniteStars/machine-learning-experiment 1. 实验内容 2. 实验代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.table import Table from xml.dom.minidom import Document #手…...

华为机试 - 跳格子游戏

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 地上共有N个格子&#xff0c;你需要跳完地上所有的格子&#xff0c;但是格子间是有强依赖关系的&#xff0c;跳完前一个格子后&#xff0c;后续的格子才会被开启&#xff0c;格子间的依赖关系由多组st…...

php 爬课程表信息,Ruby爬取教务系统生成课程表

我为什么要虐自己最近觉得课程格子广告越来越多&#xff0c;乱七八糟的东西越来越多&#xff0c;完全失去了一开始的存在价值&#xff0c;并且没有电脑端app&#xff0c;想查看课程必须拿出手机&#xff0c;而我使用电脑频率要比手机高&#xff0c;所以才有了折腾的动力。于是我…...

android 课程表 ui,UICollectionViewLayout实现课程表布局

因为项目中有课程表的相关模块&#xff0c;第一时间想到用UICollectionView。然而后期的需求越来越复杂&#xff0c;每个格子需要展示的内容越来越多&#xff0c;所以不得不寻找合适的解决方案。最后发现自定义UICollectionViewLayout可以实现我的需求。先放效果图&#xff1a;…...

Android自定义View课程表,Android 自定义View课程表表格

自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数 和节数大概的布局三这样的根据上面的看来觉得总体布局我分了两个 上面的星期是…...

java课程设计设计_java课程设计

1. 团队课程设计博客链接https://www.cnblogs.com/choco1ate/p/12172223.html2.本组课题及本人任务本组课题&#xff1a;泡泡堂(炸弹人)游戏本人任务&#xff1a;Box类(游戏地图中的每个方格)Bomb类(游戏过程中的)游戏玩家输赢信息的文件储存3.需求分析Box类&#xff1a;该类为…...

《课程格子》的一个笔试题目

题目如下&#xff0c;感觉很适合喜欢琢磨的程序员&#xff0c;也是考验你编码风格的时候。 Lets make a tower defense game&#xff08;塔防游戏):1. You have 1 tower, with H health and D dps(damage per second).2. There are n attackers, each with h_i health and d_i …...

Android仿照超级课程表 or 课程格子 一键提取课表功能(方正系统)

参考文章http://blog.csdn.net/sbsujjbcy ,本文仿照‘ 安卓弟 提供的android 项目实战——打造超级课程表一键提取课表功能文章&#xff0c;对他的代码进行了修改和补充&#xff0c;为什么要修改呢&#xff1f;原因是安卓弟的那个源码版本过于老旧&#xff0c;很多方法已经过…...

如何把安静的程序员逼成话唠

来自&#xff1a;程序员最幽默&#xff08;ID&#xff1a;humor1024&#xff09;图片来自&#xff1a;网络0、如何把安静的程序员逼成话唠&#xff08;图自&#xff1a;微博神奇的甲方&#xff09;1、编码和调试2、将伪代码更改为python代码的方法3、命中注定是个程序员4、我们…...

SPI通讯--宋雪松

CPOL: Clock Polarity&#xff0c;就是时钟的极性。时钟的极性是什么概念呢&#xff1f;通信的整个过程分为空闲时刻和通信时刻&#xff0c; 如果 SCLK 在数据发送之前和之后的空闲状态是高电平&#xff0c; 那么就是CPOL1&#xff0c;如果空闲状态 SCLK 是低电平&#xff0c;那…...

java教程分享-我赢职场2018年 曹雪松老师java零基础最佳入门视频教程

要论编程语言哪家强&#xff0c;还属我们的java&#xff0c;尽管现在人工智能很火&#xff0c;从而带动了python语言的火热&#xff0c;但论跨平台能力还是首选java&#xff0c;其中javase&#xff0c;javaee&#xff0c;javame强大的功能即可以满足桌面应用的开发&#xff0c;…...

近距离触摸Mango

本书深入浅出地讲解了微软的Windows Phone Mango开发技术&#xff0c;每章均以实例的形式讲解&#xff0c;注重动手实践能力的培养。全书共分为3篇&#xff1a;基础篇、Silverlight交互篇和XNA游戏篇。 基础篇重点讲解了Silverlight和XNA的基本技术、多点触控、传感器和服务等。…...

按下高质量发展快捷键 集团一站式解决方案助你摆脱业务杂、乱、难

近几年&#xff0c;有学者声称&#xff0c;多元化集团企业模式快“不行”了。 特别是当国际企业巨头拆分逐渐成为潮流&#xff0c;比如昔日“美国第一企业”的多元化工业巨头通用电气进行重大重组拆分&#xff1b;还有在国内&#xff0c;恒大集团在多元化背景下发展到如今面临…...

Query理解在美团搜索中的应用

分享嘉宾&#xff1a;刘亮 美团 资深算法工程师编辑整理&#xff1a;吴雪松出品社区&#xff1a;DataFunTalk导读&#xff1a;在过去的20年中&#xff0c;搜索过程中处理查询的方式以及向用户显示结果的方式已完全改变。该过程已经从仅基于文本匹配的检索发展到现阶段——尝试基…...

Machine Learning Algorithms Study Notes(2)--Supervised Learning

Machine Learning Algorithms Study Notes 高雪松 雪松Cedro Microsoft MVP 本系列文章是Andrew Ng 在斯坦福的机器学习课程 CS 229 的学习笔记。 Machine Learning Algorithms Study Notes 系列文章介绍 2 Supervised Learning 3 2.1 Perceptron Learning Algor…...

Machine Learning Algorithms Study Notes(1)--Introduction

Machine Learning Algorithms Study Notes 高雪松 雪松Cedro Microsoft MVP 目 录 1 Introduction 1 1.1 What is Machine Learning 1 1.2 学习心得和笔记的框架 1 2 Supervised Learning 3 2.1 Perceptron Learning Algorithm (PLA) 3 2.1…...

广义多目标算法探索实践

分享嘉宾&#xff1a;周建斌 58同城 算法高级架构师编辑整理&#xff1a;吴雪松 小米出品平台&#xff1a;DataFunTalk导读&#xff1a;58部落是面向58同城同镇用户的内容社区&#xff0c;主要产品形态为PGC、UGC的信息流&#xff0c;样式丰富。基于业务和背景&#xff0c;如何…...