那些网站可以做反链,网址导航程序,小型培训机构网站开发毕业设计,wordpress 漏洞攻击前言 作者#xff1a;晓宜 个人简介#xff1a;互联网大厂Java准入职#xff0c;阿里云专家博主#xff0c;csdn后端优质创作者#xff0c;算法爱好者 一面过后面试官叫我别走#xff0c;然后就直接二面#xff0c;二面比较简短#xff0c;记录一下#xff0c;希望可以…前言 作者晓宜 个人简介互联网大厂Java准入职阿里云专家博主csdn后端优质创作者算法爱好者 一面过后面试官叫我别走然后就直接二面二面比较简短记录一下希望可以帮助到你 jvm的内存结构 1、方法区
方法区主要用于存储虚拟机加载的类信息、常量、静态变量以及编译器编译后的代码等数据。
在jdk1.7及其之前方法区是堆的一个“逻辑部分”一片连续的堆空间但为了与堆做区分方法区还有个名字叫“非堆”也有人用“永久代”HotSpot对方法区的实现方法来表示方法区。
在jdk1.8中方法区已经不存在原方法区中存储的类信息、编译后的代码数据等已经移动到了元空间MetaSpace中元空间并没有处于堆内存上而是直接占用的本地内存NativeMemory
2、程序计数器(PC寄存器)
由于在JVM中多线程是通过线程轮流切换来获得CPU执行时间的因此在任一具体时刻一个CPU的内核只会执行一条线程中的指令
因此为了能够使得每个线程都在线程切换后能够恢复在切换到之前的程序执行位置每个线程都需要有自己独立的程序计数器并且不能互相被干扰
3、java栈
Java栈中存放的是一个个的栈帧每个栈帧对应一个被调用的方法在栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、
指向当前方法所属的类的运行时常量池的引用(Reference to runtime constant pool)、
方法返回地址(Return Address)和一些额外的附加信息。当线程执行一个方法时就会随之创建一个对应的栈帧并将建立的栈帧压栈。当方法执行完毕之后便会将栈帧出栈。
4、堆内存
堆内存主要用于存放对象和数组它是JVM管理的内存中最大的一块区域堆内存和方法区都被所有线程共享在虚拟机启动时创建。在垃圾收集的层面上来看由于现在收集器基本上都采用分代收集算法因此堆还可以分为新生代YoungGeneration和老年代OldGeneration新生代还可以分为 Eden、From Survivor、To Survivor。
5、本地方法栈
本地方法栈与虚拟机栈的区别是虚拟机栈执行的是 Java 方法本地方法栈执行的是本地方法Native Method,其他基本上一致在 HotSpot 中直接把本地方法栈和虚拟机栈合二为一这里暂时不做过多叙述。
oom如何调试
可能原因
1.无法在 Java 堆中分配对象 2.应用程序保存了无法被GC回收的对象。 3.应用程序过度使用 finalizer。 注finalizer方法约定对象在被回收前需要调用会减慢对象回收的速度可能造成oom。
解决方案
1.查找关键报错信息如java.lang.OutOfMemoryError: Java heap space 2.使用内存映像分析工具如Eclipsc Memory Analyzer或者Jprofiler对Dump出来的堆储存快照进行分析分析清楚是内存泄漏还是内存溢出。 3.如果是内存泄漏可进一步通过工具查看泄漏对象到GC Roots的引用链修复应用程序中的内存泄漏。 4.如果不存在泄漏先检查代码是否有死循环递归等再考虑用 -Xmx 增加堆大小。
static的作用
static表示“全局”或者“静态”的意思用来修饰成员变量和成员方法也可以形成静态static代码块但是Java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说它不依赖类特定的实例被类的所有实例共享。
只要这个类被加载Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此static对象可以在它的任何对象创建之前访问无需引用任何对象。
简而言之static表示不要实例化就可以使用
算法题sql 表中某一用户最近几天最早登录的日期
假设有一张login表表中有三个字段iddateuser_id则答案如下
selectmin(date) date,
fromlogin
group by user_id算法题 链表中的一段进行反转
题目链接反转列表2
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val0, nextNone):
# self.val val
# self.next next
class Solution:def reverseBetween(self, head: Optional[ListNode], left: int, right: int) - Optional[ListNode]:dummy ListNode(next head)left_node,right_node,pre dummy,dummy,dummyfor i in range(left-1):pre pre.nextleft_node pre.nextfor i in range(right):right_node right_node.nextcurr right_node.nextpre.next Noneright_node.next Nonefor i in range(right-left1):next left_node.nextleft_node.next currcurr left_nodeleft_node nextpre.next right_nodereturn dummy.next