车300面试题

这篇具有很好参考价值的文章主要介绍了车300面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

卷一

Java基础

1、java中的内存泄漏是怎么回事

答:在可达性分析法种,不可达的会被清理掉,但有些对象是无用的不会在被调用,这些对像就是java 的内存泄漏
长生命周期的对象,持有短生命周期的引用就可能会出现内存泄漏
序列已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统奔溃等严重后果。

2、equals和==区别

1、==是比较运算符,equals()是object类中的方法
2、 = =比较的是两个变量或者实例是不是指向同一个内存空间,equals比较的是内存空间内的值
3、= =比equals快,因为= =只是比较

3、实现clone和equals需要注意什么

clone
1、需要克隆的对象要实现cloeable
2、首先获得与原对象相同的内存,将原对象的二进制复制到副本称为按位赋值
3、基本数据浅克隆,引用数据深克隆
equals
1、重写equals()需要重写hascode()
在hash表中hascode相等,equals也相等,如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
2、重写 equals(),必须满足,自反性、对称性、一致性、传递性等特性
对称性(symmetric) 对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true
c.传递性(transitive) 对于任何非null的引用值x,y和z,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)返回true
d.一致性对于任何非null的引用值x和y,只要equals的比较操作在对象中所用的信息没有被修改,多次调用x.equals(y)就会一致地返回
true,或者一致地返回false
e.对于任何非null的引用值x,x.equals(null)必须返回false

4、下面方法输入为2返回值是u多少

public static int getValue(int i) {
        int result = 0;
        switch (i) {
        case 1:
            result = result + i;
        case 2:
            result = result + i * 2;
        case 3:
            result = result + i * 3;
        }
        return result;
    }

10,没有break不会跳出

5、

a.下述代码在多线程环境中是否存在问题?若有,如何修正?
b.下述代码中的volatile关键字是什么意思?如果删除对该段代码有何影响?

class Counter {
private volatile int count = 0;

public int getNext() {
  return ++count;
}
}

答:a:++count不是原子操作,
1、方法添加synchronized
每个线程有自己的私有空间,会拉取到私有空间,当再次写到方法中时候,count值可能已经产生了变化,count不能加锁,因为是基本类型,每次值得改变都会产生内存地址得变化,所以永远锁得是以前得值。
2、++量用原子类进行操作。

这是因为 count++ 是一个复合操作,包括三个部分:
读取 count 的值;
对 count 加 1;
将 count 的值写回内存;
b:使用volatile关键字确保共性变量能够准确和一致地更新关键字,保证可见性。

6、 BlockingQueue相比普通的Queue最大的区别是什么?

答:
1.阻塞队列获取元素时,如果队列为空,则会等待队列有元素,否则就阻塞队列(普通队列返回结果,无元素)
2.阻塞队列放入元素时,如果队列满,则等待队列,直到有空位置,然后插入。(普通队列,要么直接扩容,要么直接无法插入,不阻塞)
阻塞队列的最佳场景就是生产者和消费者,使用代码时无需判断直接获取并处理(普通队列得判断有没有元素,阻塞队列不用判断,无元素自身就会阻塞,直到有东西)

7、Thread.sleep() 可能抛出的 InterruptedException 代表什么?如何处理?

答:该线程被中断,取消中断状态,捕获异常

如何实现一个方法,该方法执行某项任务并设定某个时间限制,如果该任务能在限制时间内完成则返回任务执行结果,否则返回null?写出核心代码。

8、不使用SDK自带库,使用基本Java语言实现将传入的数组内容反转

public class reverse {
    public static void main(String[] args) {
        char [] data={'q','w','e','e'};
        reverse(data);
        for (int i = 0; i < data.length - 1; i++) {
            System.out.println(data[i]);
        }
    }
     public static char[] reverse(char [] data){
        if (data==null||data.length-1<1){
            return null;
        }
         for (int i = 0; i < data.length / 2; i++) {
             char temp = data[data.length - i - 1];
             data[data.length - i - 1]=data[i];
             data[i]=temp;
         }
         return data;
     }
}

10、有一个字符串List,如下代码所示。续写代码,将words中的元素再按照字符拆分,合并成一个数组,然后字符去重,最终得到[“h”, “e”, “l”, “o”, “w”, “r”, “d”]

List<String> words = new ArrayList<>();
words.add("hello");
words.add("world");

Set set=new LinkedHashSet();
for(int i=0;i<words.size();i++){
String s=words.Get(i);

String[] split=s.splir(“”);
For(String ss:split){
Set.add(ss);
}

Spring

1、 @Controller中,跳转(“redirect: url”)和转发(“forward: url”)有什么区别?

答:redict是重定向,是服务端发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.,原来页面和后来的页面不能用于共享数据,一般用于用户注销登录返回页面和跳转到其他网站,效率相对来说比较低,
Forward是转发,服务器请求资源,直接访问目标地址的URL,读取到那个URL的响应内容,然后把这些内容再转发给浏览器,地址栏还是原来的地址栏,转发页面和转发到的页面可以共享request里的数据,相对来说效率比较高。

2、 下面是HTTP请求报文:

POST /example?param1=value HTTP/1.1
Host: www.nowhere123.com
Accept: image/gif, image/jpeg, /
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Content-Type: application/json; charset=UTF-8
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
X-Auth-Token: token-xxxxx

{
“param2”: “value”
}
如何在Controller的方法中获取框中的数值?
答:通过HttpServletRequest获得到请求头的集合,遍历,通过键获取值从request域中获取集合,在通过键值对获取数据。
后端接口对比

3、 使用注解(如@Component)声明Bean,如何指定Bean加载顺序?

@Order注解不能指定bean的加载顺序,它适用于AOP的优先级,以及将多个Bean注入到集合时,这些bean在集合中的顺序
@AutoConfigureOrder指定外部依赖的AutoConfig的加载顺序(即定义在/META-INF/spring.factories文件中的配置bean优先级),在当前工程中使用这个注解并没有什么鸟用
同样的 @AutoConfigureBefore和 @AutoConfigureAfter这两个注解的适用范围和@AutoConfigureOrder一样

4、多个同类型的Bean,使用注解注入时如何指定?

答:通过使用@Qualifier注解。
使用@Primary注解
使用@Primary注解

Mybatis

1、 XML映射中,SQL语句的两种参数注入方法:#和$的区别?

#{}将传入的数据当做一个字符串,对自动传入的数据加一个双引号。是预编译可以方式sql注入。
${}将传入的数据直接生成在sql中,字符串替换。

2. XML映射中,如何使用LIKE进行模糊查询?

答:like ‘{%条件%}’

3. XML映射中,如何批量插入传入的集合(Collection)?

即,如何根据集合生成如下SQL?
INSERT INTO TABLE_NAME(a, b, c)
VALUES (a1, b1, c1), (a2, b2, c2) …
答:主要用foreach车300面试题

4. XML映射中,如何在插入的同时获取MySQL自增字段(AUTO_INCREMENT)的生成值?

答:mapper的insert节点下添加selectKey子节点的方式
车300面试题
就是有个A表的主键是mysql自动递增的序列,而这个A表的主键又是B表的外键。有时候会在同一个方法事务里先插入A表,然后插入B表,但是这时后在程序中还无法获得这个A表的自动递增的序列主键,导致插入B表的时候外键插入为空或报错。这种情况可以通过在MyBatis中配置selectKey 为mysql的LAST_INSERT_ID()函数获得插入时的自增序列值来获得。

Redis

1. 如何使key对应的值过5秒后失效?

expire key 5
设置了失效时间,redis也可能存放在redis 的内存中,redis采用的是软清理的方式,通过以一定的算法进行处理。

2. scan和keys命令的区别?

答:keys用来删除相关key的时候使用,但在有数百万数据以上的时候执行很慢,而且会足协多路复用的io主线程,是以阻塞方式运行的
Scan通过游标分布进行的不会阻塞线程,

3. 如何开启和执行事务?

答:通过multi命令开启事务,通过exec命令执行事务

4. 使用管道(Pipeline)有什么好处?

答:减少服务器压力,减少链路层中的事件消耗,将大量操作结合成少量的操作。

原生命令(mset、mget)与pipeline的对比

数据库

1. 请写出以下MySQL语句的格式 : 插入 ,更新 ,删除。

表名 students
username tel content date
张三 13801281191 大专毕业 2006-10-11
李四 13612312331 本科毕业 2006-10-15
王五 021-55665566 硕士毕业 2006-10-15

a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
答:Insert into students values(‘小王’,’ 13254748547’,’ 高中毕业’,’ 2007-05-06’)
b) 请用sql语句把张三的时间更新成为当前系统时间
答:Update students set date=date(now()) where username=’张三’
请写出删除名为张四的全部记录
答:Delete from student where username in (‘张’,’四’)
c) 请给date 字段列增加一个普通索引


**mysql** ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index[索引名](字段名)
**pg**  CREATE INDEX index_name ON table_name;
**oracle** create index 索引名 on 表名(列名);

2. 表中有 A B C 三列,用 MySQL 语句实现:当 A 列大于 B 列时选择 A 列,否则选择 B 列,当B 列大于 C 列时选择 B 列否则选择 C 列。

selectcase when a>b then a else b end,
(case when b>c else c end) 
from table_name

3. 如何处理大数据表分页?提供SQL语句即可。

答:

**mysql** Select * from table order by id limit 1000,10()
**oracle**SELECT *
  FROM (SELECT A.*, ROWNUM RN
          FROM (SELECT * FROM TABLE_NAME) A
         WHERE ROWNUM <= 40)
 WHERE RN > 20
**pg**SELECT * FROM table_name
LIMIT [pageSize] OFFSET [pageNum]
-- pageSize:每页显示条数
-- pageNum:从第几条开始查询 
select * from  class_name LIMIT 3;
  1. 表连接的左关联和右关联有什么区别?
    答:1、左连接查询以左边的表为主,左表字段全显示,右边有就显示,没有就不显示
    2、右连接以右表为主,右边表的字段全部显示,右表有就显示,没有就不显示。
    建立索引:是一种单独的、物理的堆数据库一列或多列 的值进行排序的存储结构,索引维护这这种查询树,频繁的对数据进行修改,就会影响树的每个节点变化,不停的进行IO操作对数据库有影响的,所以一般建立所有都是在数据变化不大,查询频率比较高的数据进行建立索引。

卷二

1.(小型,共100分)有如下数据库表 inf_organization:
字段名 字段类型 说明
id int 主键,自增主键
name varchar(50) 机构名称,非空
name_pinyin varchar(50) 机构名称拼音首字母,可空
create_time datetime 创建日期

要求:实现一个Java程序,利用Jdbc和第三方拼音库(自选)将name中的中文文本转为拼音首字母填入name_pinyin字段。(占35分)
加分项:

  1. 利用多线程加快执行速度,合理运用多线程的设计模式;(占35分)

  2. 合理运用Java和Jdbc的各种特性,使得代码高效;(占10分)

  3. 使用Maven或其他常见包管理;(占5分)

  4. 充分利用面向对象抽象;(占5分)

  5. 代码条理清晰,格式好。(占10分)

  6. (中型,共100分)下面是百度提供的免费接口,用以识别手机号码:
    GET http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=13888888888
    其返回如下所示:
    {
    “response”: {
    “13888888888”: {
    “detail”: {
    “area”: [
    {
    “city”: “昆明”
    }
    ],
    “province”: “云南”,
    “type”: “domestic”,
    “operator”: “移动”
    },
    “location”: “云南昆明移动”
    }
    },
    “responseHeader”: {
    “status”: 200,
    “time”: 1580896481103,
    “version”: “1.1.0”
    }
    }

要求:利用Spring Boot和Maven包管理,实现一个Web程序。该Web程序采用前后端分离技术,前端页面提供输入框输入手机号码,并发至后端查询,最终展示该手机号码的归属地和运营商信息(即以上Json中的云南/昆明和移动字样)。(占20分)
注意:对前端不做要求,可以相对简陋。
加分项:文章来源地址https://www.toymoban.com/news/detail-406054.html

  1. 采用缓存机制,加快已经查过的手机号码的查询速度。缓存可采用关系型数据库或其他存储媒介。如果用到,需提供对应的结构信息。可采用多级缓存机制,视复杂情况和流程给分,需要注意避免无谓的复杂和逻辑混乱;(占20分)
  2. 外部接口调用失败时,采用重试机制。屡次失败返回错误提示;(占10分)
  3. 实现一种时间上限的机制,当外部接口超过5s仍未返回时,返回超时错误提示;(占15分);
  4. 避免使用Java原生方法,Spring框架提供的机制要充分利用;(占10分)
  5. 充分考虑各种边界条件,异常处理合理;(占10分);
  6. 采用Restful规范实现接口,结构简单清楚明了;(占5分)
  7. 代码条理清晰,格式好。(占10分)

到了这里,关于车300面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据开发(Spark面试真题-卷一)

    Spark Streaming是 Spark提供用于实时流式数据处理和分析的库 。它 基于离散时间间隔将原始流式数据划分为小的批处理,然后将这些批次数据提供给Spark引擎进行处理 。 Spark Streaming的工作原理如下: 不断从流源接收数据,并将其划分为微批次 。 将每个微批次传递给Spark引擎 。

    2024年03月12日
    浏览(44)
  • Android之内存泄漏与内存溢出

    内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少获取多次导致内存无法正常回收时,就会导致内存

    2024年02月13日
    浏览(50)
  • 记一次项目内存优化--内存泄漏

    主要是与某个版本作基准进行对比(一般是最新版本的前一个版本作原数据),优化后,PSS有所下降,线上OOM率减少(Bugly版本对比),泄漏点减少(从捉取一些线上上传回来的内存堆栈信息分析,或本地测试后dump下hprof文件分析)。 了解什么是内存泄漏 了解虚拟机中的对象

    2024年02月12日
    浏览(77)
  • 什么是内存溢出,什么是内存泄漏?

    提示:以下是本篇文章正文内容,下面案例可供参考 假设我们 JVM 中可用的内存空间只剩下 3M,但是我们要创建一个 5M 的对象,那么,新创建的对象就放不进去了。这个时候,我们就叫做内存溢出。就好比是一个容量只有 300ml 的水杯,我们硬要往里面倒500ml 的水,这时候,

    2024年02月12日
    浏览(43)
  • iOS解决内存泄漏工具

    在iOS应用中,有一些工具和技术可以帮助识别和解决内存泄漏问题。以下是一些常用的工具,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Instruments: Instruments 是Xcode中的性能分析工具,其中包含了用于检测内存泄漏的工具

    2024年01月18日
    浏览(46)
  • 记一次内存泄漏排查

    最近某项目的服务突然告警,cpu超85%,随后就是服务宕机。交付重启服务后恢复正常但是随后不久又开始告警,特别是白天,严重影响客户业务进行。 1、分析日志 查看日志的过程中发现存在内存溢出(OOM),思考要么存在内存泄漏要么业务上触发了某个接口存在大对象,结

    2023年04月16日
    浏览(52)
  • 内存泄漏问题

            内存泄漏是一种常见的问题,它可能导致系统内存不断增加,最终耗尽可用内存。解决内存泄漏问题通常需要进行调试和分析。下面是一些可能有助于解决内存泄漏问题的步骤: 1. 监控内存使用情况: a. 使用 malloc 记录日志: 在内存分配的地方添加记录,以便跟

    2024年01月17日
    浏览(44)
  • C++内存泄漏检测工具

    在程序中增加相应的内存检测工具  #define CRTDBG MAP ALLOC #include stdlib.h #include crtdbg.h #ifdef DEBUG #ifndef DBGNEW #define DBG_NEW new (_NORMAL_BLOCK,_FILE_LINE_) #define new DBG NEW #endif #endif _CrtDumpMemoryLeaks(); 当没有释放内存时候: 增加了delete时候:  

    2024年01月25日
    浏览(87)
  • 在线排查内存泄漏的步骤

    想到内存泄漏问题的排查,很多开发会想到使用 Valgrind。使用 Valgrind 有几个局限: 需要安装 Valgrind 需要启停服务进程 影响服务进程性能 依赖于测试用例覆盖到 BUG 分支 由于这些原因,线上内存泄露问题并不适合用 Valgrind 来排查。相反,利用 top、pmap 等命令,以及 GDB(包括

    2024年02月06日
    浏览(59)
  • Android 内存泄漏

    内存泄漏:即memory leak。是指内存空间使用完毕后无法被释放的现象,虽然Java有垃圾回收机制(GC),但是对于还保持着引用, 该内存不能再被分配使用,逻辑上却已经不会再用到的对象,垃圾回收器不会回收它们。 内存溢出:即out of memory, 当你要求分配的内存超过了系统给你

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包