首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你们喜欢的 Android & Java 面试题(配图)

为什么 Java 中用 char 数组比 String 更适合存储密码 由于字符串 Java 中是不可变的,如果你将密码存储为纯文本,它将在内存中可用,直到垃圾收集器清除,并且为了可重用性,会存在...因此,字符数组中存储密码可以明显降低窃取密码的安全风险。 2....,无法判断应该使用哪个父类的变量 (2) 如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法 正因为有以上的致命缺点,所以java...不剥夺条件: 进程已获得资源,末使用完之前,不能强行剥夺。 循环等待条件: 若干进程之间形成一种头尾相接的循环等待资源关系。...线程永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在之前持续地对该同步块进行访问。

41020

c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

方法参数上的ref方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,方法中对参数所做的任何更改都将反映在在该变量中。若要使用ref参数,必须将变量作为ref参数显示传递到方法。...变量的值传递到ref参数。传递到ref参数的变量必须要先初始化。   与out参数相比,变量传递到out参数之前不必显示初始化。属性不是变量,不能作为ref参数传递。....NET 中,这些称为值类型。您可以创建值类型的实例,将它们作为参数传递,将它们存储为局部变量,或将它们存储另一值类型或对象的字段中。...尽管不能从一种值类型派生出另一种类型,但是当所用语言处理虚方法比处理非虚方法或静态方法更方便时,可以对值类型定义虚方法。   引用类型的变量又称为对象,可存储对实际数据的引用。....;   11、C#中有没有静态构造函数,如果有是做什么用的?   有。静态构造函数用于初始化类。创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

HTTP缓存和浏览器的本地存储

时的规范;的值为一个绝对时间的GMT格式的时间字符串,如Mon, 10 Jun 2015 21:31:12 GMT,如果发送请求的时间expires之前,那么本地缓存始终有效,否则就会发送请求到服务器来获取资源...需要使用协商缓存,先与服务器确认返回的响应是否更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以避免重新下载。...4.协商缓存 当没有强缓存时,会向服务端寻求帮助,也就是问一下服务端有没有更改,向接口判断是否有缓存。如果命中协商缓存则返回304状态码,并且从本地返回缓存内容。如果没有命中,则重新发起请求。...Web SQL WebSQL是前端的一个独立模块,是web存储方式的一种,我们调试的时候会经常看到,只是一般很少使用。并且,当前只有谷歌支持,ie和火狐均不支持。...3.executeSql:这个方法用于执行实际的 SQL 查询。 4.indexDB IndexedDB 就是浏览器提供的本地数据库,它可以网页脚本创建和操作。

1.5K20

面试官问:静态变量、实例变量JVM内存区域是怎么布局的?线程安全吗?

其次我们假设在多线程高并发场景下这几个变量有没有线程安全的问题? 比如静态成员变量,你认为多线程场景下对同一个静态变量值的修改,是线程安全的吗?...方法区:主要存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。...03 线程安全 什么是线程安全问题: 当多个线程对同一个对象中的资源(实例变量、静态变量)进行操作时候,会出现值更改、值不同步的情况,进而影响程序的执行流程。 1)类的实例变量线程安全吗?...实例变量:非static的变量。该变量方法之外定义。 多线程场景图如下: 我们知道对象实例是分配在堆上的,然而堆又是所有线程共享的一块内存区域。...因此,static对象可以的任何对象创建之前访问,无需引用任何对象 看下面这张静态变量示例图: 输出结果打印:线程1获取第二次number=1 ​ 上述输出结果可能会是1呢?

61610

MySQL TCL 事务控制

所以,使用事务处理的时候一定要确定所操作的表示是否支持事务处理,可以通过查看建表语句来查看有没有指定事务类型的存储引擎。当然,事务处理是为了保障表数据原子性、一致性、隔离性、持久性。...我们可以关闭,关闭之后需要commit,SQL语句才会真正生效。 由于系统变量 autocommit 分会话系统变量与全局系统变量,所以查询的时候,最好区别是会话系统变量还是全局系统变量。...关闭自动提交事务主要有两种方法一种是临时关闭,只对当前会话有效。第二种是永久关闭,对所有会话有效。 第一种:临时关闭。 关闭当前会话的自动提交事务。...这里需要注意的是,在当前会话中,我们还没有手动 COMMIT 提交事务的时候,表中的数据已经插入了,但对于其它会话,如果事务隔离级别是 READ COMMITED,那么 COMMIT 之前,查询不到新插入的记录...事务保存点可以事务内部创建,并且可以用于回滚到该保存点之前的状态,而不影响事务中的其他操作。

17010

存放数据的方式:Java集合框架

目前存放数据的方式 Java编程中,我们经常需要存储和操作一组相关的数据。下面介绍了目前常见的数据存放方式。 变量变量是最简单的数据存放方式,用于保存单个值或对象的引用。...例如,可以使用一个int类型的变量来保存一个整数值,使用一个String类型的变量来保存一个字符串。...数组: 数组是用于存储多个相同类型的数据的集合。数组具有固定长度,一旦创建,其大小不能更改。它可以通过索引来访问其中的元素,索引从0开始。但是,数组的操作不够灵活,无法自动进行动态扩容。 2....public Object[] toArray() 将集合中的元素存储到数组中。 4. 迭代器 迭代器是用于遍历集合中元素的对象,提供了一种统一的遍历方式,不依赖于集合的具体实现。...remove(); // 移除当前元素 } 迭代器的工作原理是,调用next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素。

10710

中高级前端面试题总结第一期

/inject传递数据 方法二:通过$root 毫无关系组件 方法一:vuex 方法二:pinia Vue.observable简单介绍一下 可以简单的将他理解为一个可以观察的方法...一个是首屏加载缓慢的问题,另一个是有利于seo的优化 怎么理解Es6中出现的Map和Set 都是用来做数据处理的,初始化的值不一样,map是一个二维数组,而set则是一个一维数组,两者都不允许重复数据,map的键不可以更改...,但是对应的value是可以更改的,set Key和value是同一个,set因为是唯一的,所以可以用来去重数据,因为返回的是一个类数组,所以需要Array.from进行转换为真数组,Map是键值对存在的...,而set只有一个key他的key就是他的value,具体的细节可以移步到我的博客主页看详细的介绍 谈一下闭包以及问题 闭包是一种函数写法,js中变量的函数作用域导致我们一个函数内部是无法访问另一个函数内部的成员变量的...设置marginTop的时候,他们的距离只会按照较大的那个进行设置,而不是相加的和,这个现象就叫做margin重叠 登录的时候涉及到哪些操作 登录信息的校验、记住密码的操作(提高用户体验)、登陆之前验证之前用户有没有记住密码的操作

59420

PHP的会话处理函数session

(๑•ᴗ•๑) PHP Session 变量 当运行一个应用程序时,你会打开,做些更改,然后关闭。这很像一次会话。计算机清楚你是谁。知道你何时启动应用程序,并在何时终止。...UID 存储 cookie 中,亦或通过 URL 进行传导。 1. 开始会话 把信息储存到session之前,首先要开启会话。php提供了session_start()函数来开始或者继续一个会话。...(我可是坑过) (2)无论有没有成功创建会话,session_start()函数都会返回TRUE,因此使用任何异常处理都不起作用。...2.存储或者读取会话 存储和读取session变量的正确方法是使用php的_SESSION变量。_SESSION是php提供的全局参数,专门用来存储和读取session。...(注意关联数组的键名和普通变量的命名规则一致) 存储会话时,可以对其直接赋值。

2.4K30

finalfinallyfinalize的区别

修饰的是抽象类,抽象类是用于被子类继承的,和final起相反的作用);final修饰的方法不能重写,但是子类可以用父类中final修饰的方法;final修饰的成员变量是不可变的,如果成员变量是基本数据类型...,初始化之后成员变量的值不能改变,如果成员变量是引用类型,那么只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象中的内容是允许改变的。...finalize finalize是方法名,java技术允许使用finalize()方法垃圾收集器将对象从内存中清楚出去之前做必要的清理工作。...这个方法是由垃圾收集器确定这个对象没有引用时对这个对象调用的,它是Object类中定义的,因此所有的类都继承了。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。...finalize()方法垃圾收集器删除对象之前对这个对象调用的

67140

c语言进阶(1)

任何程序在运行之前,都必须加载到内存当中。 接着让我们思考两个问题:1.为什么程序运行之前都要被加载到内存当中?快 2.程序加载到内存之前,程序在哪里?硬盘当中。 有关变量   什么是变量?...那么,是在任何地方都可以使用吗?并不是。 register 计算机里具有存储能力的硬件:CPU:寄存器,cache,内存,硬盘/ssd/flash。离CPU越近的存储单元,效率越高,单价越贵。...把硬盘的内容存到内存上,本质上就是一种缓存技术。 任何一种硬件而言,都充当着上游硬件的缓存。 CPU访问数据时,以最小的成本达到最高的效率。  ...只要是声明,可以也给extern带上(建议)。这是因为函数是定义还是声明,编译器取决于它有没有函数体,编译器如果识别到没有函数体,就被解释成了声明。变量声明必须把extern带上。...,该函数只本文件内访问,不能外部其他文件直接访问 3.static修饰局部变量更改该局部变量的生命周期(将临时变量改为全局生命周期),作用域不变 全局变量和函数一旦static修饰只能同名的自身文件内访问

6410

JavaScript 是如何工作的:JavaScript 的共享传递和按值传递

调用堆::这个区域跟踪当前正在执行的函数,执行计算并存储局部变量变量以后进先出法存储堆栈中。最后一个进来的是第一个出去的,数值数据类型存储在这里。...RV 返回值:这是可选的,函数可以返回值,也可以不返回值。 参数:将函数所需的参数推入堆栈。 局部变量:函数使用的变量推送到堆栈。...因此,可以正确地说 js 中传递参数是传入值的一份拷贝。如果调用函数更改了参数的值,它不会影响原始值,因为存储在其他地方,只处理一个副本。...sum 函数执行时,参数推送到堆栈,由 sum 函数接收。 sum 函数创建另一个对象 {number:30},存储另一个内存地址 002231 中,并将其放在堆栈的参数位置。...update 函数引用 ref 参数中的内存地址,并更改存储存储器地址中的对象的key属性。 总结 根据我们上面看到的,我们可以说原始数据类型和引用数据类型的副本作为参数传递给函数。

3.7K41

cas 原理分析

每次拿数据的时候都认为别人不会修改,所以不会上锁,但是更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量。...* 2、乐观锁的一种实现:CAS 我们都知道,java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以硬件厂商老早就在芯片中加入了大量支持并发操作的原语,从而在硬件层面提升效率。...而随着java不断的发展,Java本地方法(JNI)的出现,使得java程序越过JVM直接调用本地方法提供了一种便捷的方式,因而java并发的手段上也多了起来。...无论哪种情况,都会在 CAS 指令之前返回该 位置的值。...答案是否定的,因为CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,执行过程中不允许中断,也就是说CAS是一条CPU的原子指令

31030

为什么 Python 这么慢?

有没有改善的方法呢?...又有没有改善的方法呢?...如果你对这一系列过程感兴趣,也可以阅读一下我之前的文章: 6 分钟内修改 Python 语言[10] 。 .pyc 文件的创建是这个过程的重点。...不用必须声明类型并不是为了使 Python 运行慢,Python 的设计是让用户可以让各种东西变得动态:可以在运行时更改对象上的方法,也可以在运行时动态添加底层系统调用到值的声明上,几乎可以做到任何事。...◈ 类型比较和类型转换消耗的资源是比较多的,每次读取、写入或引用变量时都会检查变量的类型 ◈ Python 的动态程度让难以优化,因此很多 Python 的替代品能够如此快都是为了提升速度而在灵活性方面作出了妥协

1.5K20

Java学习笔记(Volatile关键字以及原子性)

Java内存模型(Java Memory Model)描述了Java程序中各种变量(线程共享变量)的访问规则,以及JVM中将变量存储到内存和从内存中读取变量这样的底层细节。...所有的共享变量存储于主内存。这里所说的变量指的是实例变量和类变量。不包含局部变量,因为局部变量是线程私有的,因此不存在竞争问题。...volatile与synchronized volatile只能修饰实例变量和类变量,而synchronized可以修饰方法,以及代码块。...1)假设此时x的值是100,线程A需要对改变量进行自增1的操作,首先需要从主内存中读取变量x的值。由于CPU的切换关系,此时CPU的执行权切换到了B线程。...CAS是从乐观的角度出发: 总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是更新的时候会判断一下在此期间别人有没有去更新这个数据。

28820

【JS】347- 理解JavaScript中的变量、范围和提升

今天的JavaScript所基于的ECMAScript 2015 (ES6)语言规范之前,只有一种方法来声明变量——使用var关键字。因此,大多数较老的代码和学习资源将只对变量使用var。...关键字 范围 变量提升 可以重新分配 可以重新定义 var 功能范围 Yes Yes Yes let 阻止范围 No Yes No const 阻止范围 No No No 您可能想知道应该在自己的程序中使用这三种方法中的哪一种...声明和初始化之后,我们可以访问或重新分配变量。 如果我们试图变量声明和初始化之前使用它,它将返回undefined。...的一种行为,其中变量和函数声明移到它们作用域的顶部。...中的一种机制,其中变量声明保存到内存中。

1.8K10

62道Java核心面试题,这次全了

Java 中,抽象类用于创建具有某些被子类实现的默认方法的类,一个抽象类可以有没有方法体的抽象方法,也可以有和普通类一样有方法体的方法。...如果一个抽象类有 main() 方法,则可以运行;但接口不能。 抽象类是对类的一种抽象,继承抽象类的类和抽象类本身是一种 is-a 的关系。...我们可以一个类中定义一个类,这个类被称为内部类。内部类可以访问外部类的所有变量方法,内部类中不能有任何静态变量。 44、什么是匿名内部类?...堆内存应用程序的所有部分使用,而栈内存仅由执行线程使用。 当我们创建对象时,始终存储堆空间上;栈仅存储该对象的引用,栈内存还可以存储局部的基本类型数据变量。...static 的,无法 static 修饰的方法重写。

62420

JVM-不同jdk版本静态变量存储位置

一个类中所有的实例都可以访问和更改静态变量,它们所有类实例共享,而不是每个实例都有一份属于自己的变量副本。 3.... Java 6 及之前的版本中,方法区本质上是一个永久代(PermGen),它又被称为静态存储区,它是 JVM 内存模型中的一个区域,负责存储类内的常量、静态变量、类的信息和方法信息等。...这个区域的生命周期与 JVM 的生命周期相同,的大小可以通过启动参数配置。静态变量存储该区域的某个位置,以供所有类实例访问。... Java 6 及之前的版本中,我们可以通过下面的代码来验证静态变量存储方法区中: public class StaticVariable {     private static int count... Java 6 之前,静态变量存储 JVM 的方法区中,而在 Java 7 之后的版本中,静态变量存储 JVM 的堆中。来自同一 JDK 版本的 JVM 实现将在存储静态变量的方式上保持一致。

30540

Ask Apple 2022 中与 Core Data 有关的问答 (下)

但是,当我主应用程序中进行更改时,我的扩展程序重新启动之前不会看到更改。...如果用户应用程序之外删除文档,例如在 Finder 中,我希望 Spotlight 中的索引与它一起被删除。所以我想如果索引可以存储包文件夹中,那就可以解决这种情况。有没有办法正确处理这种情况?...通过创建两个单独的属性,一个包含纯文本字符串,另一个包含属性字符串的 Transformable 数据是否为最好的方法?是否有另一种更好的方式可以不通过两个属性来减少存储的数据量?...此外,纯文本属性可以 Spotlight 索引,方便它们系统搜索。生成对应数据的纯文本以进行检索,是一种很常见的方式。...例如,当你创建一个带有字符串属性的新对象时,初始值( 没有默认值的情况下 )是 nil,这在对象验证之前( 通常在 save 时 )是没有问题的。

3.2K20

基础面试,为什么面试官总喜欢问String?

或者 StringBuilder,否则,由于每次操作字符串都会创建一个新的对象,而旧的对象不会有引用指向,这样我们会浪费很多垃圾回收的时间 到这里还没完,你有没有想过为什么 String 会被设置/...为什么 String 类 final 修饰 字符串池的需求 字符串池(String intern pool)是方法区域中的一个特殊存储区域。...例如,HashMap或HashSet中。不可变保证hashcode始终是相同的,这样就可以不担心更改的情况下兑现。这意味着,不需要每次使用hashcode时都计算。这样更有效率。...如果字符串不是不可变的,连接或文件将被更改,这可能导致严重的安全威胁。该方法认为连接到一台机器上,但实际上并没有。可变字符串也可能导致反射中的安全问题,因为参数是字符串。...不可变对象天生是线程安全的 由于不可变对象不能更改,所以它们可以多个线程之间自由共享。这消除了同步的需求。 总之,出于效率和安全性的考虑,String 设计为不可变的。

46110

通过 41 个 问答方式快速了解学习 Git

WIP = Work in Progress 研发中的代码想存储起来,但是又避免研发中的代码合并,开发就会创建一个WIP的分支 WIP MR WIP MR 含义是 工作过程中的合并请求,是一个我们...由于每次提交的更改都会在 rebase 期间重新应用,所以必须在冲突发生时解决它们。 这意味着提交之前就已经有了提交冲突,如果没有正确地解决,那么下面的许多提交也可能发生冲突。...有没有更好的命令来替代 git push -force ? 实际上,没有其他方法可以替代 git push—force。...有没有一种方法可以将提交拆分为更多的提交(与 fixup/squash 相反)? 可以rebase -i过程中使用 exec 命令来尝试修改工作索引并拆分更改。...git reflog 可能是众所周知的,但值得一提,因为提供了一种在出错时“撤消”命令的好方法。 41. 你能推荐一些关于Git的书籍吗 我建议至少阅读Pro Git的前三章。

1.4K20
领券