• java基础


    1.==和equals,输出结果为false

            String a = "ab";
            String b = "a" + new String("b");
            System.out.println(a==b);

      ==比较的是2个对象的地址,而equals比较的是2个对象的内容

    2.多线程,输出结果为ba

            new Thread(()-> System.out.println("a")).start();
            System.out.println("b");

      线程创建后处于可执行状态,主线程执行过程中并不会等待子线程,而是继续执行后面的代码打印出b,主线程执行完毕后,子线程被唤醒执行打印出a

    3.类型转换,结果为double

            byte x=1;
            double y=2;
            System.out.println((short)x/y*2);

      数字类型进行运算时,会将范围小的转换为范围大的类型

    4.jvm,下面创建了2个对象

    String a=new String("a");

      "a"为第一个对象,创建在堆中;new String()的参数为第二个对象,也在堆中

    5.抽象类和接口的区别

    参数 抽象类 接口
    默认的方法实现 它可以有默认的方法实现 它可以有默认的方法实现(jdk8+)
    实现 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现
    构造器 抽象类可以有构造器 接口不能有构造器
    与正常Java类的区别 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 接口是完全不同的类型
    访问修饰符 抽象方法可以有publicprotecteddefault这些修饰符 接口方法默认修饰符是publicdefault(jdk8+)可以使用
    main方法 抽象方法可以有main方法并且我们可以运行它 接口没有main方法,因此我们不能运行它。
    多继承 抽象方法可以继承一个类和实现多个接口 接口只可以继承一个或多个其它接口
    速度 它比接口速度要快 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
    添加新方法 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 如果你往接口中添加非默认方法,那么你必须改变实现该接口的类。默认方法则不需要

    6.netty中server端的socket连接流程以及pipeline和Channel的作用

      流程:1创建工作组,2创建引导服务器,3设置NIO传输,4将处理程序添加到通道管道

      ChannelPipeline:责任链模式的核心组件,ChannelHandler的容器,按顺序组织各个ChannelHandler,并在它们之间转发事件

      Channel:封装了jdk原生的channel,提供统一的API,作为其它各个功能组件的容器

    7.若try中有return语句,finally会执行吗?在return之前还是之后呢?

      会执行,在方法return动作之前,return语句执行之后,若finally中再有return语句,则此方法以finally的return作为最终返回,若finally中无return语句,则此方法以try的return作为最终返回。

    8.什么是IOC,SpringIOC有哪些方式

      IOC是依赖注入

      接口注入:接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限

      setter方法注入:对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。
      构造器注入:在构造期间完成一个完整的、合法的对象。所有依赖关系在构造函数中集中呈现。依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。

    9.java反射机制的概念和原理及其应用

      概念:反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

      原理:通过字节码文件找到某一个类、类中的方法以及属性

      应用:生成动态代理,面向切片编程

    10.关系型数据库和非关系型数据库的区别

       关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

      非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决

    数据库类型     

    特性 优点 缺点
    关系型数据库
    Oracle、mysql

    1、关系型数据库,是指采用了关系模型来组织数据的数据库;

    2、关系型数据库的最大特点就是事务的一致性;
    3、简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

    1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;
    2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;
    3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;
    4、支持SQL,可用于复杂的查询。
    1、为了维护一致性所付出的巨大代价就是其读写性能比较差;
    2、固定的表结构;
    3、高并发读写需求;
    4、海量数据的高效率读写;
    非关系型数据库
    MongoDb、redis
    1、使用键值对存储数据;
    2、分布式;
    3、一般不支持ACID特性;
    4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
    1、无需经过sql层的解析,读写性能很高;
    2、基于键值对,数据没有耦合性,容易扩展;
    3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。
    1、不提供sql支持,学习和使用成本较高;
    2、无事务处理,附加功能bi和报表等支持也不好;

    11.mysql储存引擎

      InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎

      MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物

      MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问 

      如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择

      如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率

      如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果

      如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive

     12.多线程数据同步方案

      信号量 Semaphore   应用场景:用于流量控制,限流

      同步屏障 CyclicBarrier   应用场景:用于多线程计算数据,最后合并计算结果,例如多个老师打分,最后合并算平均分

      Exchanger 两个线程之间进行数据交换   应用场景:用于两个线程之间交换数据,例如校对工作

      ConutDownLatch 倒计时器   应用场景:可以用于模拟高并发

      ConutDownLatch 一般用于某个线程A等待若干个其他线程执行完任务之后,它才能执行
      CyclicBarrier 一般用于一组线程互相等待到某个状态,然后这一组线程在同时执行
      ConutDownLatch 是不能重用的,CyclicBarrier 可以重复使用

      https://blog.csdn.net/yz2015/article/details/79436123

    13.serverlet生命周期

      响应时创建,服务器关闭时销毁

    14.常用第三方包

      log4j:一个非常常用的log日志jar包。

      apache commons:包含了大量组件,很多实用小工具。

      maven:项目管理的;

      gson:Google 的Json解析库;

      JUnit:java单元测试;

      jsoup:html解析;

    15.常用正则表达式

      https://www.cnblogs.com/coder-wzr/p/7838527.html

    16.Linux常用指令

      https://www.cnblogs.com/javastack/p/8796178.html

    17.数据库连接池及其实现方案

      DBCP数据源、C3P0数据源

      连接池初始化、连接池销毁、取连接、关闭连接、删除连接、维护连接池大小、定时器事件处理

      https://www.cnblogs.com/joshul/p/6224680.html

    18.有两个不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?

      一根香点燃一端,另一根香同时点燃两端,这样点两端的香烧完是半小时,点燃一端的香还剩下半小时。这时,把点燃一端香的另外一端也点燃,从这时起这根香烧完的时间就是15分钟。

    19.一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?

      第一次时,若有人没看到黑帽子,就知道是自己了,就会自打耳光;但是没有人打自己耳光,说明每个人都看到黑帽子了。因此,可以推断至少有两顶黑帽子。
      第二次时,若有人看到只有一个黑帽子,就知道是他和自己两个人戴了黑帽子,就会自打耳光;但是没有人打自己耳光,说明每个人都看到两顶黑帽子了。因此,可以推断至少有三顶黑帽子。
      第三次时,自然是三个人都只看到了两顶,因此判断自己头上戴的必定是黑帽子。因此,到了关灯时就自打耳光了。
      其实以次类推,到了第几次动手,就可以知道有几个戴了黑帽子。

    20.解决死锁

      1.按顺序访问2.加锁时限3.设置随机优先级,优先级低的线程进行回退3.信号量获取对象4.阻塞队列5.使用线程安全的类进行无锁编程

  • 相关阅读:
    数据量过大时数据库操作的处理
    VC中回调函数的用法
    基于BindingSource的WinForm开发
    VC获取各类指针
    GetSystemMetrics()函数的用法
    samba建立个人专享网盘
    Windows 7下用Windows照片查看器打开图片速度变慢的解决方案
    这是一个模板
    QT中编译和使用OPENCV
    MFC日志(2011.4.9)
  • 原文地址:https://www.cnblogs.com/plxz/p/9783378.html
Copyright © 2020-2023  润新知