面试题[1-50]

在这里插入图片描述

1. java三大特性;

//继承,封装.多态

2. 线程和进程的区别;

//进程可以包含多个线程,线程共享本进程的地址空间,进程之间是独立的地址空间;

3. ajax的优缺点;

//异步请求机制,使得页面不用刷新即可完成动态交互,减少了冗余的请求,减轻服务器的压力

缺点—暴露了与服务器的交互细节,浏览器的机制被破坏----后退和历史记录功能被打破;

4. read方法为什么返回int类型;

//读取的字节数据,如果是其他类型的容易混淆结束时的符号;

5. hashmap和hashtable的区别

//hashmap 底层是 数组 +链表+红黑树 允许一个key为null,线程不安全 扩容为 1.5倍 ,hashtable 线程安全,key与value都不允许为null, 扩容时通过rehash来确定容量;

6. 什么是orm

//对象关系映射,用于将对象和数据库之间建立联系,实现了对象和关系型数据库之间的数据交互,提高了开发效率 ;

7.int和integer的区别

//基本数据类型和包装类(引用数据类型)

8.filter的作用

//过滤器,用于筛选出一些符合条件或者不符合条件的数据;

9. mybatis属性字段和数据库列明不一致如何处理;

//起一个别名 //keyColumn xml中指定 typeAliases

10.get和post的区别

//get 发送的信息明文,且发送的数据量小,post发送的数据类型多,对用户来说不可见,

浏览器不会保存post提交的数据,

get请求可以被缓存,可以保留到浏览器历史记录中

get只允许ascii字符,post则没有限制

IO流的种类//字节流和字符流

11.如何跳出多重循环

break,内层循环想要跳出外层循环

           int i=0;
           int j=0;
           a: for(;i<10;i++){
           b:for(;j<10;j++){
           if(j==4){
                break a;  //跳出a所在的循环
           }

12.内部类种类

//静态内部类,局部内部类,匿名内部类,方法内部类

什么是动态代理?//通过反射在运行时确定对象类型,动态代理又分为接口代理和 cglib (子类代理)


    import org.junit.Test;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class ProxyDemo {
        @Test
        public void test(){
       Dinner dinner= new Person("李二狗");
       //get a proxy Instance
    //        args
           /* ClassLoader loader, ---classloader
            Class<?>[] interfaces,  --- interface
            InvocationHandler h   ----invoke method
            */
            //get classloader
            ClassLoader classLoader=dinner.getClass().getClassLoader();
            Class<?>[] interfaces = dinner.getClass().getInterfaces();
            InvocationHandler invocationHandler = new InvocationHandler() {
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    Object returnVal;
                   if(method.getName().equals("eat")){
                       System.out.println("饭钱洗手");
                       returnVal = method.invoke(dinner, args);
                       System.out.println("饭后刷碗");
                   }else{
                       returnVal= method.invoke(dinner,args);
                   }
    
                    return returnVal;
                }
            };
           Dinner dinner1 = (Dinner)Proxy.newProxyInstance(classLoader, interfaces, invocationHandler);
       dinner1.eat("米饭");
       dinner1.drink();
        }
    }
    

13.数组和list如何互转

//Arrays工具类

14.线程的生命周期

//new running terminal ,waiting

15.是否可以继承string类,为什么?

不可以,被final修饰的类不能被继承

16.@RequestMapping的作用?

//标识 http 请求地址与 Controller 类的方法之间的映射

17.jsp的内置对象

很久的知识了,一般新技术公司不会问;
//request ,session ,application,pageContext, response ,out, exception ,page,config

18.throw和throws的区别?

//throws作用在方法上,向上抛异常;throw用于向上抛异常

19.connection和connections的区别?

一个是集合的根接口,一个是集合工具接口

20.java修饰符的区别?

//public 公共访问权限 default 本包中可访问 ,protected 本包即其子类可访问 ,private只有本类可访问;

21.final关键字的作用?

//修饰类 —类不能被继承,

修饰属性----属性不能被修改,修饰引用类型时表示该引用的地址不了被修改,引用中的内容还是可以修改的;

修饰方法 ------方法不能被修改,也不能被子类继承

22.mybatis #{} 和 ${} 的区别?

“#{}是预编译,将数据作为字符串处理” "
“${}是占位符,数据替换掉占位符,容易发生sql注入攻击”

23.java集合与数组的区别?

//数组存储基本数据类型和引用数据类型,数组大小一旦确定无法被修改;

集合存储引用数据类型,大小可变

24.什么是shiro?

//是 Java 的一个安全框架 ,也提供了身份验证全系只能验证,加密.记住我等功能但是功能不如security丰富

25.TreeMap原理?

TreeMap是基于红黑树实现。根据其键的自然顺序或创建时提供的比较器进行排序,具体取决于所使用的构造函数。

26.什么是线程池?

为什么使用线程池//将线程存放到一个容器中,重用线程,减少线程的创建和销毁带来的性能个损耗

27.cookie和session的区别?

//cookie存放在客户端,生命周期短,Cookie 只能保存ASCII 字符信息,session,cookie存放的数据量小于session,

28.静态变量和实例变量的区别?

//静态变量随着类一块被加载,属于类所有,全局可访问,实例变量是在实例初始化时才被分配空间

29.String,StringBuffer,StringBuilder的区别?

String不可变字符串, StringBuffer,StringBuilder都是可变字符串,StringBuffer线程安全,StringBuilder线程不安全,性能好一些

30.java中,堆和栈的区别?

堆用于存储对象和数组,可动态分配空间大小,栈用于存储对象地址以及局部变量,方法返回值等

31.对称集群和非对称集群的区别?

集群中的服务器地位相等,没有主从之分,非对称集群是服务器的地位不相等,其中一写服务器专门用于读/写操作

32.java中,重载和重写的区别?

重载是咋同一个类中方法的重载,方法名相同,参数列表不同,对返回值是否一致没有要求,重写是父类与子类之间,方法名,方法的参数,返回值要一致;

33.@RequestBody和@ResponseBody的区别?

@ResponseBody----方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中 ;

@RequestBody读取Request请求的body部分数据

34.什么是Java容器,有哪些常用的容器?

能够保存对象的类—List—>>ArrayList,LinkedList,

Set---->>.HashSet ,cunrrentHashSet, LinkedHashset,sortedset

queue---->>>ArrayDeque ,LinkedBlokingQueue

35.处理异常的方式?

//try catch throws

36.ssm如何进行整合?

//spring springmvc mybatis分别实现Spring与SpringMVC、Spring与Mybatis的 整合 ,而实现 整合 的主要工作就是把SpringMVC、Mybatis中的对象配置到Spring容器中,交给Spring来管理

37.ioc的注入方式

setter注入 ,构造注入,p命名空间注入

38.linux常用命令

ll ls cat vi rs rz nmcli systemctl yum grep lsof tar unzip mv cp chmod chaw ln

39常用的加密算法

sha256 AES DES RSA

40.git的作用

可以有效、高速地处理从很小到非常大的项目版本管理 ;

41.分布式系统有哪些特征?

//可扩展,可伸缩,可靠性,高可用性,并发性,容错性

42.springmvc如何设置重定向和转发?

Rediect Forward

43.mybatis的一级缓存和二级缓存?

为了提高查询效率,mybatis默认开启一级缓存,一级缓存的作用范围 在同一个session中;

在相同的查询操作之间 刷新缓存,提交, 增删改操作都会使得一级缓存清空;

  public void test2() {
            ProductDao mapper = sqlSession.getMapper(ProductDao.class);
            Product product = mapper.selectProduct(1);
            System.out.println(product.getPid() + "--" + product.getPname() + "--" + product.getPrice());
    
            System.out.println("------分割线------------");
    
            Product product2 = mapper.selectProduct(1);
            System.out.println(product.getPid() + "--" + product.getPname() + "--" + product.getPrice());
           // sqlSession.close();
        }

二级缓存在mybatis配置文件上开启,同时在sqs语句中开启;二级缓存可以跨session及逆行访问,即session中的数据共享;

    <!--useCache 使得二级缓存生效  将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true。-->
        <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
        <select id="selectProduct" resultType="com.gavin.pojo.Product" parameterType="int" flushCache="false" statementType="PREPARED" useCache="false">
    select * from product where pid =#{pid}
      </select>

如果没有在sql中开启useCache 即useCache =false,那么即使在全局配置中开了二级缓存,在sql查询时也不会开启二级缓存;----即二级缓存开关要开启两个;

另一个,如果两此查询时在最后关闭了session,那么也会用两次sql查询语句;

在全局配置文件中开启二级缓存之后,还需要在相应sql中再次开启 缓存才能生效,但是这还没完全开启,需要指定缓存的类型,即用什么类型的类取处理缓存; 

44.ArrayList,LinkedList的区别

//ArrayList实现是数组 ,扩容机制 是变为原来的1.5倍,查询效率高,增加删除效率低

LinkedList是数组加链表,查询效率低,增加删除效率高;

45.什么是守护线程?

//程序运行时在后台提供的一种通用服务的线程,用于服务其他线程的,当用户线程都执行完之后守护线程会自动结束,;

46.实现线程的方式?

继承Thread

runnable接口

用lambda

实现callable接口

线程池

47.cookie的生命周期

cookie生命周期这个要看是会话cookie还是持久化的cookie,huihua cookie的生命周期在会话期间;持久化的要看设置的失效时间;

48.mybatis传多个参数的方式?

一般是将参数包装成一个类来传入

对于多个的参数使用arg0 arg1 …传入参数

使用param1 param2 …传入参数

1,参数为基本参数类型,用arg 和param都可以;

2,如果给参数起了别名.那么arg的形式传入参数会失效;

49.面向对象五大基本原则

1,单一职责原则---->>即一个类最好去实现一种功能,不要古欧复杂,以便维护;
2,闭合开放原则---->>即封装与多态(继承与实现)
3,里氏替换原则---->>子类可以替换
4,依赖倒置原则---->>子类依赖父类而不是高一层的类依赖低一层的类
5,接口分离原则—>>>一个接口定义一种规范而不是多种的集合

50.抽象类与接口的区别

抽象类是模板,模板中的抽象方法子类一定要实现,模板中的其他方法子类可以有选择的实现;

接口是一种行为标准,接口中的抽象方法子类也要实现,在jdk1.8之后接口也可以有了default定义的方法,和静态方法,子类可以实现也可以不实现;
相同点

  • 接口和抽象类都不能实例化
  • 都位于继承的顶端,用于被其他实现或继承
  • 都包含抽象方法,其子类都必须覆写这些抽象方法

单继承与多实现;
接口与抽象类的选用原则----->>

  • 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量 少用抽象类。

  • 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用 的功能。

用到老子的时候,就要用抽象类,接口更像是父类放任子类去做什么(只要符合我的标准就行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeMartain

祝:生活蒸蒸日上!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值