首页 文章 精选 留言 我的

精选列表

搜索[面试],共4912篇文章
优秀的个人博客,低调大师

Java面试题目汇总之一

一、JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网、云计算、智能手机(Android)等领域。由于Java主要用于服务器端的开发,因此Java应用的部署环境有很多为Linux。 Windows操作系统的目录结构,是以盘符为单位,C盘、D盘、E盘等等,数据存储在各个盘符之下,而Linux操作系统最顶层只有一个根目录root,所有文件都存储在这一个根目录之下。 Linux不像Windows的图形操作界面,是通过命令的方式进行操作,常用命令有: a . pwd:用于显示当前工作目录; b . ls:用于查看当前工作目录内容; c . cd:用于改变当前工作目录。 2.什么是Java虚拟机?为什么Java被称作是“平

优秀的个人博客,低调大师

69 个经典 Spring 面试题和答案

Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约2MB。 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 容器:Spring 包含并管理应用中对象的生命周期和配置。 MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。 事务管理:Spring

优秀的个人博客,低调大师

Android面试题库 - Service(一) - 基础

Service应用场景、与Thread的区别 Service是什么 Service是一个一种在后台长时间执行操作而有没有用户界面的应用组件。 Service与Thread的区别 Thread 最小的运行单元,可以用来执行耗时操作 Service 运行在主线程,不能做耗时操作 ANR 时间20s Service的两种启动方式 两种启动方式说明 启动 当应用组件(如 Activity)通过调用 startService() 启动服务时,服务即处于“启动”状态。一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响。 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。例如,它可能通过网络下载或上传文件。 操作完成后,服务会自行停止运行。 绑定 当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至是利用进程间通信 (IPC) 跨进程执行这些操作。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。虽然本文档是分开概括讨论这两种服务,但是您的服务可以同时以这两种方式运行,也就是说,它既可以是启动服务(以无限期运行),也允许绑定。问题只是在于您是否实现了一组回调方法:onStartCommand()(允许组件启动服务)和 onBind()(允许绑定服务)。 两种启动方式的生命周期走向 服务的生命周期 startService生命周期走向: onCreate onStartCommand onStop onDestory bindService生命周期走向: onCreate onBind unBindService onUnBind onDestory 服务保活 无法保证,只能尽量保活 Manifest中设置级别(优先级),process 提升为前台服务 监听系统广播进行唤醒 监听其他APP的广播 将 Service 设置为 START_STICKY,利用系统机制在 Service 挂掉后自动拉活(5次)

优秀的个人博客,低调大师

Android面试题库 - Fragment(一) - 基础

Fragment为什么成为第五大组件 Fragment为什么成为第五大组件 四大组件:Activity、Service、Broadcast Receiver、Content Provider Fragment具有生命周期,使用广泛 Fragment加载到Activity的两种方式 xml通过fragment标签引入的方式 code中动态添加 FragmentPagerAdapter和FragmentStatePagerAdapter FragmentPagerAdapter的destroyItem的时候并没有直接销毁item,只是分离了UI FragmentStatePagerAdapter是直接销毁了Fragment Fragment多的时候选择FragmentStatePagerAdapter,少的时候选择FragmentPagerAdapter Fragment的生命周期 Fragment生命周期 Activity生命周期对Fragment生命周期的影响 Framgnet之间的通信 Fragment通过getActivity获取到Activity Fragment实现接口,Activity通过接口来管理 两个Fragment之间通过广播来传输数据 使用事件总线传递数据 Framgnt管理器:FragmentManger 如何获取FragmentManger Activity 中通过getSupportFragmentManager获取 Fragment中通过getChildFragmentManager获取 常用方法 add 添加一个Fragment实例 remove 移除一个Fragment实例 replace 替换一个Fragment实例 ViewPager加载Fragment如何实现页面可见再加载数据 ViewPager是默认缓存1的pager,也就是默认加载隔壁的Fragment。而mOffscreenPageLimit这是默认为1的,且setOffscreenPageLimit传入的数据小于1也会默认赋值为1。以下是两种实现方式: 从ViewPaer 重写整个ViewPager,将mOffscreenPageLimit赋值为0 通过反射获取mOffscreenPageLimit的值,然后进行赋值 从Fragment 定义isCreate变量默认为false 在onCreate方法中赋值为true 重写setUserVisibleHint方法,代码如下 override fun setUserVisibleHint(isVisibleToUser: Boolean) { super.setUserVisibleHint(isVisibleToUser) if (isVisibleToUser && isCreate) { isCreate = false // todo you something } } ViewPager的mOffscreenPageLimit设置为mFragments的大小 需要注意:第0个Framgnet不能使用上面的方法,需要特殊处理,onCreate中判断Fragment的下标赋值isCreate的值 如何获得Fragment的实例 保留空构造方法,否则会在某些情况下抛出错误:make sure class name exists, is public, and has an empty constructor that is public 不要直接不要直接通过new的方式获取,应该使用:newInstance方式来获取,以下是kotlin示例: companion object { /** * 获取PartyBillHandledFragment的实例 */ fun newInstance(): PartyBillHandledFragment { val args = Bundle() val fragment = PartyBillHandledFragment() fragment.arguments = args return fragment } } startActivityForResult之坑 在Fragment中请勿使用getActivity().startActivityForResult(),这样Framgnet中的onActivityResult是接收不到回调,而是回调Activity的onActivityResult。 正确的应该是直接使用startActivityForResult()方法 requestCode请勿传-1

优秀的个人博客,低调大师

Android面试题库 - Activity(一) - 基础

Activity生命周期 什么是Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 Activity的4种状态 名称 解释 running Activity处于前台,与用户有交互的情况下,此时Activity不会被回收 paused Activity被一个透明的Activity遮罩住,此时处于paused状态,如果内存紧张,会被回收 stopped Activity被另外一个Activity完全覆盖,就会处于stopped状态,内存紧张的情况下会被虚拟机回收 killed Activity已经被系统回收了 Activity的生命周期 Activty的生命周期 Activity生命周期详解 Activity的四种启动场景 Activity 启动:Activity启动 -> onCreate ->onStart->onResume 返回桌面:onPause->onStop 桌面重新打开:onRestart->onStart->onResume 退出Activity :onPuase->onStop->onDestroy Activity的进程优先级 前台 处于与前台和用户有交互的,比如和Activity绑定的Service 可见 可见不可操作, 服务 service 后台 按Home返回桌面,进程切换至后台进程,根据内存情况回收 空 Android任务栈 后进先出 Activity启动模式 onNewIntent方法的调用时机 名称 解释 standard 标准模式 singleTop 栈顶复用 singleTask 任务栈单例 singleInstance 单任务栈模式 四种模式详讲 standard 标准模式,即每start一个Activity都会创建一个实例,也是平常最常使用的一种模式。 singleTop 栈顶复用模式,即start的Activity已经是在栈顶了,就会直接进行复用实例,此时在intent中传递的数据会在onNewIntent方法中回调。如果目标Activity不在栈顶,即创建一个新的实例。 其应用场景为一般的推送消息详情:即受到推送通知,用户进行点击的时候的目标Activity会设置为singleTop模式,方便复用。 singleTask 任务栈单例模式,即一个任务栈中只会存在一个这样的实例。当start目标实例时候,不存在改实例即创建一个新的实例,如果存在,则会移除掉该实例上面所有的实例,让自己处于栈顶,且回调onNewIntent方法。 其应用场景为少数情况下销毁Activity:设置MainActivity为singleTask模式,当重新启动时候,他会销毁在他之前的所有Activity实例。 singleInstance 单任务栈模式,即该Activity独享一个Activity,且只有一个实例。如果已经启动该实例,再次启动将会回调onNewIntent方法。 App的入口 既然Android是基于Java语言的,而Java有main方法,那么Android有吗?Android的主入口在哪里? 答案: 有Main方法,main方法在ActivityThread类中的第 6041行 main(String[] args) Scheme跳转协议 什么是Scheme跳转协议 scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便的跳转到app的各个页面; 通过scheme协议,服务器可以定制化告诉app应该调换到哪个页面,可以冲通知栏消息定制化跳转页面,可以通过h5页面跳转到其他页面等。

优秀的个人博客,低调大师

面试系列-String,StringBuffer,StringBuilder三者区别

String,StringBuffer以及StringBuilder三者的区别主要是在两个方面,即运行速度和线程安全这两方面。 运行速度 从快到慢顺序:StringBuilder > StringBuffer > StringString最慢的原因; String为字符串常量,而StringBuffer和StringBuilder均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。 例:1 1 String str="abc"; 2 System.out.println(str); 3 str=str+"de"; 4 System.out.println(str); 如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。 而StringBuffer和StringBuilder的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。 例:2 1 String str="abc"+"de"; 2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de"); 3 System.out.println(str); 4 System.out.println(stringBuilder.toString()); 这样输出结果也是“abcde”和“abcde”,但是String的速度却比StringBuilder的反应速度要快很多,这是因为第1行中的操作和String str="abcde"是完全一样的,所以会很快,而如果写成下面这种形式: 1 String str1="abc"; 2 String str2="de"; 3 String str=str1+str2; 那么JVM就会像上面说的那样,不断的创建、回收对象来进行这个操作了。速度就会很慢。 原文发布时间为:2018-07-12本文作者:酥风本文来自云栖社区合作伙伴“ Java架构师之路”,了解相关信息可以关注“ Java架构师之路”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。