面试汇总

本文汇总了面试中常见的Java与数据库相关问题,包括单例模式、HTTPS安全机制、Oracle数据库查询技巧、Linux命令操作、字符串优化、并发控制、SQL优化、集合操作、分布式事务、Spring框架理解、数据存储、JVM、锁机制、数据库索引等知识点,旨在帮助读者掌握面试核心技能。
摘要由CSDN通过智能技术生成

面试汇总

1.两个比较完美的单例模式

答案: java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍二种:懒汉式单例、饿汉式单例、

​ 1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头

懒汉式单例
//懒汉式单例类.在第一次调用的时候实例化自己   
public class Singleton {
     
    private Singleton() {
   }  
    private static Singleton single=null;  
    //静态工厂方法   
    public static Singleton getInstance() {
     
         if (single == null) {
       
             single = new Singleton();  
         }    
        return single;  
    }  
} 

但是以上懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例,要实现线程安全,有以下三种方式,都是对getInstance这个方法改造,保证了懒汉式单例的线程安全

1、在getInstance方法上加同步

    public static synchronized Singleton getInstance() {
     
             if (single == null) {
       
                 single = new Singleton();  
             }    
            return single;  
    }  

2、静态内部类

public class Singleton {
       
    private static class LazyHolder {
       
       private static final Singleton INSTANCE = new Singleton();    
    }    
    private Singleton (){
   }    
    public static final Singleton getInstance() {
       
       return LazyHolder.INSTANCE;    
    }    
}

二、饿汉式单例

//饿汉式单例类.在类初始化时,已经自行实例化   
public class Singleton1 {
     
    private Singleton1() {
   }  
    private static final Singleton1 single = new Singleton1();  
    //静态工厂方法   
    public static Singleton1 getInstance() {
     
        return single;  
    }  
}


饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。

2.简述https是如何保证数据传输安全的

答案:

内容加密 建立一个信息安全通道,来保证数据传输的安全;

身份验证 确认网站的真实性;

数据完整性防止内容被第三方冒充或者篡改

SSL协议可分为两层:SSL记录协议(SSL Recore Protocol):它建立在可靠地传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份证、协商加密算法、交换加密密钥等。

https实际上就是在TCP层与http层之间加入了SSL/TLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。

3.【DB笔试面试105】在Oracle中,数据库中有一张如下所示的表,表名为sales。。。查询出如下所示的结果。【行转列】

答案:https://my.oschina.net/lhrbest/blog/4631881

4.为了查看不断更新的日志文件可以使用的指令是

tail -f

如何将目录abc从当前服务器当前目录拷贝到B服务器/tmp目录下

scp -r root@服务器A:/abc root@服务器B的ip地址 :/tmp/

请简要说明如下linux命令的作用ls,pwd,telnet,tar及常用参数,top,man,vmstat,du及常用参数,df,free,ps,及常用参数

ls:全拼list,功能是列出目录的内容及其内容属性信息

-a :全部的档案,连同隐藏档( 开头为 . 的档案) 一起列出来~ 
-A :全部的档案,连同隐藏档,但不包括 . 与 .. 这两个目录,一起列出来~ 
-d :仅列出目录本身,而不是列出目录内的档案数据 
-f :直接列出结果,而不进行排序 (ls 预设会以档名排序!)

pwd:全拼print working directory,其功能是显示当前工作目录的绝对路径。

-P # 显示出实际路径,而非使用连接(link)路径;pwd显示的是连接路径

telnet: telnet 命令用来远程登录操作

-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-c 不读取用户专属目录里的.telnetrc文件。
-d 启动排错模式。
-e<脱离字符> 设置脱离字符。
-E 滤除脱离字符。
-f 此参数的效果和指定"-F"参数相同。
-F 使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机。
-k<域名> 使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名。
-K 不自动登入远端主机。
-l<用户名称> 指定要登入远端主机的用户名称。
-L 允许输出8位字符资料。
-n<记录文件> 指定文件记录相关信息。

tar命令,用于压缩解压:

c :新建打包文件
-t :查看打包文件的内容含有哪些文件名
-x :解打包或解压缩的功能,可以搭配-C(大写)指定解压的目录,注意-c,-t,-x不能同时出现在同一条命令中
-j :通过bzip2的支持进行压缩/解压缩
-z :通过gzip的支持进行压缩/解压缩
-v :在压缩/解压缩过程中,将正在处理的文件名显示出来
-f filename :filename为要处理的文件
-C dir :指定压缩/解压缩的目录dir

top 命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器:

top [参数]
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i<时间> 设置间隔时间
-u<用户名> 指定用户名
-p<进程号> 指定进程
-n<次数> 循环显示的次数

free 命令用于显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer:

free [参数]
-b  以Byte为单位显示内存使用情况。 
-k  以KB为单位显示内存使用情况。 
-m  以MB为单位显示内存使用情况。
-g   以GB为单位显示内存使用情况。 
-o  不显示缓冲区调节列。 
-s<间隔秒数>  持续观察内存使用状况。 
-t  显示内存总和列。 
-V  显示版本信息。

ps 命令显示运行的进程,还会显示进程的一些信息如pid, cpu和内存使用情况等:

-A :所有的进程均显示出来
-a :不与terminal有关的所有进程
-u :有效用户的相关进程
-x :一般与a参数一起使用,可列出较完整的信息
-l :较长,较详细地将PID的信息列出
5.求1+2+3+…+n之和(剑指Offer 47)

题目

求1+2+3+...+n -- newcoder 剑指Offer 47
1

题目描述

* 求1+2+3+...+n,要求不能使用乘除法、
* for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
12

思路

思路1、利用 && 的短路特性实现递归,n<=0时,不运行后面的语句
思路2、使用公式 1+2+...+n = n*(n+1)/2 = (n^2 + n) >> 1
12

代码

package com.codinginterviews.array;

/**
* 题目:
* 求1+2+3+...+n -- newcoder 剑指Offer 
* 
*  
* 题目描述:
* 求1+2+3+...+n,要求不能使用乘除法、
* for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。  
*
*/
public class Sum_Solution {
    

	/**
	 * 思路:
	 * 1、利用 && 的短路特性实现递归,n<=0时,不运行后面的语句
	 */
   public int sum_Solution(int n) {
    
       int sum = n;
       
       boolean flag = (n > 0) &&  (sum += sum_Solution(
Java微服务面试的问题非常广泛,以下是一些可能会被问到的问题和回答: 1. 微服务是什么?为什么使用微服务架构? 微服务是一种软件架构模式,它将一个大型应用程序拆分成一组小型、相互独立的服务。每个服务都有自己的业务逻辑和数据存储,可以独立开发、部署和扩展。微服务架构具有许多优点,包括灵活性、可扩展性、模块化和团队自治。 2. 在微服务中如何处理服务之间的通信? 微服务之间的通信可以使用RESTful API或消息队列来实现。RESTful API是一种基于HTTP协议的轻量级通信机制,它可以通过GET、POST、PUT和DELETE等HTTP方法来发送和接收数据。消息队列则可以实现异步通信,并提供更高的可靠性和可伸缩性。 3. 如何保证微服务架构的可靠性和容错性? 为了保证可靠性和容错性,可以使用负载均衡、故障转移和容错机制来处理微服务的请求。负载均衡可以将请求分发到多个服务实例上,以提高性能和可伸缩性。故障转移可以在某个服务实例失败时自动切换到备用实例。容错机制可以处理网络故障和服务不可用的情况。 4. 如何测试微服务? 在测试微服务时,可以使用单元测试、集成测试和端到端测试来确保每个服务的功能和性能都达到预期。单元测试可以测试单个服务的业务逻辑。集成测试可以测试多个服务之间的协作和通信。端到端测试可以模拟真实用户场景,并测试整个系统的功能和性能。 5. 在微服务中如何处理数据一致性? 于微服务之间的数据存储是分散的,确保数据一致性可能会成为一个挑战。可以使用分布式事务或事件驱动的架构来处理数据一致性。分布式事务可以确保多个服务在进行数据更新时的一致性。事件驱动的架构则可以通过发布和订阅事件来实现数据同步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值