面试

Java面试之String、StringBuffer和StringBuilder的区别和原理

浪子不回头ぞ 提交于 2020-12-09 07:58:13
首先我们先来谈谈String : String 对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象,即修改了 String 的引用。 因为 String 的底层是用数组来存值的,数组长度不可改变这一特性导致了上述问题。 ‌如果我们在实际开发过程中需要对某个字符串进行频繁的修改,使用 String 就会造成内存空间的浪费,应该怎样解决这个问题呢?‌ 答案就是可以使用 StringBuffer 来解决这个问题。 下面我们就来详细谈谈​StringBuffer : ‌​StringBuffer 和 String 类似,底层也是用一个数组来存储字符串的值,并且数组的默认长度为 16,即一个空的 StringBuffer 对象,数组长度为 16。实例化一个 StringBuffer 对象即创建了一个大小为 16 个字符的字符串缓冲区。 但是​当我们调用有参构造函数创建一个 StringBuffer 对象时,数组长度就不再是 16 了,而是根据当前对象的值来决定数组的长度,数组的长度为“当前对象的值的长度+16”。 所以一个 StringBuffer 创建完成之后,有 16 个字符的空间可以对其值进行修改。如果修改的值范围超出了 16 个字符,会先检查StringBuffer 对象的原 char 数组的容量能不能装下新的字符串,如果装不下则会对 char

冷启动问题的一点尝试LCE

核能气质少年 提交于 2020-12-09 06:36:31
各位大佬好,最近我又抑郁了。比上不足,我比上不足,Life is harder. For Recommendation in Deep learning QQ Group 277356808 For Visual in deep learning QQ Group 629530787 I'm here waiting for you 不接受这个网页的私聊/私信!!! 说了多少次不接受网页的私信与私聊还是有人这样私信,我看了也不回的,您继续就好了。评论一下会死?加群详聊会见光死?老子又不是和你相亲。 有些公号的文章骂我,翻译paper谁不会,老子其实不是秀,我翻译下至少当时“假装理解”了,是不是真的懂不知道,但过后还可以自己再看下啊,不然又要重头看,那样太累了。另外至少我翻译时不会想很多杂乱的破事,至少我可以静下来,别乱指责别人,总有你不了解的事。 写在前面—— 当你迷茫、困惑时,不妨想想来时的路,那么推荐到底是为了解决什么问题呢?在信息流APP中,有视频,文章,gif,小视频等内容,推荐的任务就是将这些分发给每个用户,如果item很少(比如1000以下),这时候其实用不上推荐,过不了两天用户都走了,用户为啥走,这时的主要原因是内容少或者内容很差(没有吸引力,这时候不能怪推荐算法),那么留住用户或者装逼的说法,留存率啥的,第一条关键因素不就是好的内容相当够吗?当item数量上来后

java后端开发面经 数据库相关

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-09 04:17:25
小姐姐: 怎么理解感情中的付出和回报? 你答: 有这样一个故事,讲的是一个小男孩和一个小女孩,这个小男孩呢,用很多好玩石头,而这个小女孩呢,有好多好吃的糖果,有一天,他们相互约定:小男孩用所有的石头交互小女孩所有的糖果。到了交换的那一天,小女孩带上了所有的糖果,而小男孩自己偷偷留下了一些石头,就这样他们交换了。这天晚上啊,小女孩睡的特别踏实,而小男孩呢,总是睡不着,他总在想,小女孩是不是也留下了一些糖果呢? 感情呢,往往就是这样。但是:如果我们自己都没有真心实意的付出,那又怎么能去强求别人,揣测别人呢? 1 自我介绍 (您好(人多就说大家好),很荣幸有机会参加此次面试,希望我今天能有好的表现,现在请允许我介绍一下自己:我叫变坏,今年18岁,毕业于牛客大学软件工程专业(或者说是牛客大学软件工程专业的应届生),在大学期间专业课学习了java这门编程语言,自己在网上也学习了一些相关的技术,在校期间自己也曾和同学使用java开发过一些项目,在学校也曾考取过相关的证书,获得过一些比赛的奖,大学期间还担任过课代表,由于毕业将近,本人决定踏上社会道路,因此在牛客平台看到贵公司的招聘,在此之前也曾在网上了解过贵公司(不要去问公司业务,网上都可以查的),巴拉巴拉吹一吹。从以上简单的自我介绍里,我希望公司能给我一个展示自己能力的机会) 2 触发器的作用 (触发器是一中特殊的存储过程

Redis面试题汇总(附答案),面试突击专用

早过忘川 提交于 2020-12-09 00:58:41
本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Redis 集群方案应该怎么做?都有哪些方案? 有没有尝试进行多机redis 的部署?如何保证数据一致的? 对于大量的请求怎么样处理 Redis 常见性能问题和解决方案? 讲解下Redis线程模型 为什么Redis的操作是原子性的,怎么保证原子性的? Redis事务 Redis实现分布式锁 总结 小编在这里整理了一套大厂Redis高频面试题 需要的朋友关注公众号:程序员白楠楠 Redis 持久化机制 Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保证数据持久化。当Redis重启后通过把硬盘文件重新加载到内存,就能达到恢复数据的目的。 实现:单独创建fork()一个子进程,将当前父进程的数据库数据复制到子进程的内存中,然后由子进程写入到临时文件中,持久化的过程结束了,再用这个临时文件替换上次的快照文件,然后子进程退出,内存释放。 RDB是Redis默认的持久化方式

面试官:我问的是Java内存模型,你回答堆栈方法区干嘛?

怎甘沉沦 提交于 2020-12-09 00:41:32
听说微信搜索《Java鱼仔》会变更强哦! 本文收录于 JavaStarter ,里面有我完整的Java系列文章,学习或面试都可以看看哦 (一)概述 很多人会把Java内存区域(运行时数据区)和Java内存模型(JMM)搞混,这两者是完全不一样的东西。 Java内存区域是指JVM运行时数据分区域存储,而Java内存模型是定义了线程和主内存之间的抽象关系,了解Java内存模型是学好Java并发编程的基础。 (二)Java内存模型 Java内存模型中规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。我们来看一张图: 每个线程拥有一个自己的私有工作内存,需要变量时从主内存中拷贝一份到工作内存,如果更新过变量之后再将共享变量刷新到主内存。 但是两个线程之间,是没有办法读取对方工作内存中的变量值的。看一个例子: public class Test { private static boolean flag=false; public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { @Override public void run() { System.out.println(

javascript点击事件:EventLoop事件循环

前提是你 提交于 2020-12-08 19:59:10
同步模式异步模式 想要了解事件循环,我们首先要说明白JavaScript的同步模式和异步模式。 众所周知,目前主流的javaScript环境,都是以单线程的模式去执行的javaScript代码,那javaScript采用单线程工作的原因与他最早的设计初衷有关。 最早javaScript这门语言就是一门运行在浏览器端的脚本语言,那他的目的是为了实现页面上的动态交互。 而实现页面交互的核心就是dom操作,那这也就决定了,他必须使用单线程模型,否则就会出现很复杂的线程同步问题。 我们可以设想一下,假定我们在javaScript中同时有多个线程一起工作,那其中一个线程修改了某一个dom元素,而另外一个线程同时又删除了这个元素,那此时我们的浏览器就无法明确,改以哪一个线程的工作结果为准。 所以说为了避免这种线程同步的问题,从一开始javaScript就被设计成了单线程模式工作,那这也就成为了这门语言最为核心的特性之一。 那这里所说的单线程指的就是,在js的执行环境当中,负责执行代码的线程只有一个。 那你可以想象成,在我们的内部只有一个人按照我们的代码去执行任务。那只有一个人,他同时也就只能执行一个任务,那如果说有多个任务的话就必须要排队,然后一个一个依次去完成。 那这种模式他最大的优点就是,更安全,更简单,那缺点也同样很明显,如果说我们遇到一个特别耗时的任务,那后面的这些任务呢

【设计模式自习室】透彻理解单例模式

落爺英雄遲暮 提交于 2020-12-08 14:44:57
前言 《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有: 该模式的介绍,包括: 引子、意图(大白话解释) 类图、时序图(理论规范) 该模式的代码示例:熟悉该模式的代码长什么样子 该模式的优缺点:模式不是万金油,不可以滥用模式 该模式的实际使用案例:了解它在哪些重要的源码中被使用 该系列会逐步更新于我的博客和公众号(博客见文章底部) 也希望各位观众老爷能够关注我的个人公众号:后端技术漫谈,不会错过精彩好看的文章。 系列文章回顾 【设计模式自习室】开篇:为什么我们要用设计模式? 【设计模式自习室】建造者模式 【设计模式自习室】原型模式 创建型——单例模式 引子 《HEAD FIRST设计模式》中“单例模式”又称为“单件模式” 对于系统中的某些类来说,只有一个实例很重要。比如大家熟悉的Spring框架中,Controller和Service都默认是单例模式。 如果用生活中的例子举例,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。 如何保证一个类只有一个实例并且这个实例易于被访问呢? 答:定义一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。一个更好的解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建

国内Java面试总是问StringBuffer,StringBuilder区别是啥?档次为什么这么低?

﹥>﹥吖頭↗ 提交于 2020-12-08 14:08:13
目录 前言 StringBuffer悠久的历史 字符串 大厂面试题的开头 阿里P5-P7知识结构 最后 前言 在日常开发过程中,我们经常用到字符串,但是到具体应用的时候并不知道(String StringBuffer StringBuilder)在什么情况下会应用到;我们今天就深入浅出的说一下字符串、在什么情况下会用到。 StringBuffer悠久的历史 StringBuilder 问题档次并不低,如果仔细思考的话,这是一个历史悠久,并且至今仍在困扰很多程序员的问题。这是个字符串内存管理策略问题。几十年前 在C和Pascal的时代,就有字符串存储形式 是 \0 结尾还是 长度+内容的争论,这个问题严重影响了API的设计,内存的管理,甚至程序架构。 字符串 字符串是一种非常常用的 生命周期通常很短的对象,而且它的size是不固定的,长度为 1 或 1GB都有可能,导致内存管理非常麻烦复杂。 用长度+内容表示,每个串都要额外付出4个字节,用\0结尾吧,算长度就很麻烦,万一结尾忘了\0就要崩溃,选哪个好? 字符串的长度放哪里,放到起始指针的位置,还是起始指针的前面 如果放前面,那么字符串起始指针和内存块起始不一致怎么解决? 字符串拼接的时候把源串复制到目标串结尾,那么目标串剩余内存不够怎么办,重新分配要多一次赋值,频繁拼接性能有问题怎么办? 函数返回值如果是字符串

静态与实例变量的区别——(面试题)

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-08 14:05:29
静态变量与实例变量(方法)的区别 这道题主要考察的是我们对于static静态关键字是如何理解的( 分为以下三点 ) 一、语法区别 : 静态变量前要加static关键字,实例则不用 二、隶属区别 : 实例变量属于某个对象的属性。而静态属于类(使用静态变量的时候直接使用类名.静态变量就可以了)使用上来说是不同的。 三、运行区别(根本的区别) : 静态变量在JVM加载这个类的时候,就被创建了,而且在运行过程中,静态变量是无法被垃圾回收所释放的。实例变量则是在实例化对象的时候创建,也就是在执行new的时候他才进行创建,对于实例变量,我们不再使用的时候,它就会被我们垃圾回收掉 注意: 静态变量与实例变量存储的地方也是不同的,静态变量存储在JVM的方法区中,而实例变量则存在于对象堆的内存中。作为实际开发的时候,静态变量它的存储空间是相对比较小的,而实例变量存储的空间比较多,在我们Java面向对象编程中,我们在绝大多数场景下推荐优先使用实例变量而减少对静态变量的使用 来源: oschina 链接: https://my.oschina.net/u/4377994/blog/4780836

阿里春招实习Java后台开发面经

佐手、 提交于 2020-12-08 13:59:56
春招流程 阿里实习春招是有提前批的,提前批不走系统,不需要笔试,直接投给各个部门负责校招的人。正式的流程是笔试-> 一面 -> 二面 -> 三面 -> 交叉面。 提前批可以同时面多个部门,其实只要没走招聘系统就可以同时面,挂了也没事,机会还是挺多的。单提前批结束走正式流程的话只能选一个部门面了,如果挂了那基本就凉了,系统会有面试记录,只能等等看,有没有其他部门来捞人了。 阿里的笔试60min两道算法题,还是挺难的,不过好在笔试不刷人,只是参考(根据经验,如果算法做的还可以,后面面试很少会问算法,如果做的不好也没事,如果后面都面的很好,部门想要的话,听说有的会补个算法面或者重新做笔试的机会)。 面试一共4面,很长,很难顶。一般一面是基础面,二面一般是主管,三面大老板,四面是其他部门的人来面。提前批有的还会有简历面,就是会打电话来了解了解基本情况,我当时太傻了,以为就是随便聊聊,结果说的太谦虚了,最后连面试都没得。 面试前一般都会由面试官提前打电话约时间。面试基本都是直接打电话聊,也有的会用钉钉视频面。三月份提前批面了飞猪和钉钉都挂了,查漏补缺了一个月4月份正式批上岸。 本文分享给需要面试刷题的朋友,也祝愿大家顺利拿到自己想要的offer,这份资料主要包含了Java基础,数据结构,jvm,多线程等等,由于篇幅有限,以下只展示小部分面试题, 有需要完整版的朋友可以点一点链接跳转领取,链接