java基础+web+框架 整理

  • java.object 类下的方法?
    答: hashcode(),equals(),getClass();wait();notify()
  • string 的相关问题 == ?
@Test
    public void testString(){
        //常量找 池 ,变量找 堆
        String s1 = new String("java"); //创建2 个对象
        String s2 = "java"; //创建0 个
        String s3 = new String("java"); // 创建1 个

        System.out.println(s1 == s2);
        System.out.println(s2 == s3);
        System.out.println(s1 == s3);
        // false  false false
        
        String s4 = "spring";
        String s5 = "sp";
        String s6 = "ing";
        System.out.println(s4 == "spring");
        System.out.println(s4 == s5+s6);
        System.out.println(s4 == s5+"ing");
        //true false false
    }

在这里插入图片描述

  • mysql 和时间相关的查询,如当天 当月 等
    答:https://www.cnblogs.com/benefitworld/p/5832897.html ,使用DATE_FORMAT( 时间字段名, ‘%Y%m’ ) 进行格式化进行比较。
  • 关于classCloader的一些特点?
    答:https://mp.weixin.qq.com/s/4n59kP3RZDSircDiHzXtHQ 。接着按需加载,向上传递,三个加载类 BootstrapClassLoader 负责加载 JVM 运行时核心类;ExtensionClassLoader 负责加载 JVM 扩展类,比如 swing 系列、内置的 js 引擎、xml 解析器 等;AppClassLoader 才是直接面向我们用户的加载器,它会加载 Classpath 环境变量里定义的路径中的 jar 包和目录;Class.forName 方法来动态加载驱动类;
  • 选择排序?
//从大到小
    @Test
    public void oderNum(){
        int[] arr = {23,43,24,65,42};

        for(int i = 0; i<arr.length;i++){
             int min = i;
             //找出最小值的下表
            for(int j = i + 1 ;j<arr.length;j++){
                if(arr[j]>arr[min]){
                    min = j;
                }
            }
            // 将最小值放到未排序记录的第一个位置
            if(min > i){
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
  • 冒泡排序算法?
  //要求从小到大排序
    @Test
    public void orderNum(){
        int[] arr = {23,12,34,53,15};
        for(int i= 0;i<arr.length-1;i++){
            for(int j = 0;j<arr.length-i-1;j++){
                if(arr[j]  > arr[j+1]){ //交换位置
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    }
  • Http请求 get 与 post 的区别?
    答:详细:https://www.cnblogs.com/logsharing/p/8448446.html ,HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
    GET产生一个TCP数据包;POST产生两个TCP数据包。
    长的说:
    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

  • 以下js 代码输出什么?

function test(){
		console.log(a);
		console.log(fun());
		var a = 3;
		function fun(){
			return 4;
		}
	}
	test();

答:将会打印 undefined 4

  • 使用js 如何创建对象?
function createStudent(name,sex,grade){                                                         
    var o = new Object();
    o.name = name;
    o.sex = sex;
    o.grade = grade;

    o.sayName = function(){
        console.log(this.name);
    }
    return o;
}
var s1 = createStudent('Claiyre','famale',1);
  • spring 的@Resource和@Autowired注解有什么区别?
    答:@Autowired注解是根据类型注入,而@Resource是先根据name进行装配,name找不到再根据类型进行装配。
  • ajax 主要是用哪个对象创建的?
    答: XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信,这就是我们熟悉的AJAX。
  • linux 查端口查服务命令?
1.[root@localhost-ninl bin]# netstat -tunlp | grep 2181
tcp6       0      0 :::2181                 :::*                    LISTEN      1729/java    
2.[root@localhost-ninl bin]# ps -ef|grep zookeeper

  • 说出一些的服务的默认端口号?
    答:Tomcat 默认是8080;nginx默认是80 ;elasticsearch 默认是java 操作 9300,浏览器访问 9200 ;redis 是 6379 ; zookeeper 默认是2181
  • redis 是什么?
    答:是一种key-value型数据库,五种类型 String(字符串),Hash(哈希),List(列表),Set(集合),SortedSet(有序集合). 使用场景:用作缓存(经常查询,很少改动),减少数据库访问压力;用作计数器(原子性),解决库存溢出等问题,web集群时作为session缓存服务器。
  • redis 对象存储的方式?
    答:redis 的key 总是字符串类型,值可以是字符串对象,列表对象,哈希对象,集合对象,有序集合对象。redis的对象存储方式有 json 字符串 (需要将对象转为json字符串,当作字符串,直接使用get或set,使用比较简单)或者是字节(需要做序列化处理,就是把对象序列化成字节,使用序列化工具kyro)
127.0.0.1:6379> set str "hello world"
OK
127.0.0.1:6379> type str
string
127.0.0.1:6379> rpush listksy "hello" "world" "listKsy"
(integer) 3
127.0.0.1:6379> lrange listksy 0 -1
1) "hello"
2) "world"
3) "listKsy"
127.0.0.1:6379> type listksy
list
127.0.0.1:6379> sadd fruits apple bannana cherry
(integer) 3
127.0.0.1:6379> type fruits
set
127.0.0.1:6379> zadd price 8.5 apple 5.0 bannana 6.8 cherry
(integer) 3
127.0.0.1:6379> type price
zset
127.0.0.1:6379> zrange price 0 -1
1) "bannana"
2) "cherry"
3) "apple"
127.0.0.1:6379> zrangebyscore price 0 100
1) "bannana"
2) "cherry"
3) "apple"
127.0.0.1:6379> zrange price 0 -1 withscores
1) "bannana"
2) "5"
3) "cherry"
4) "6.7999999999999998"
5) "apple"
6) "8.5"
127.0.0.1:6379> hset profile name tom age 23 career javaProgram
(integer) 3
127.0.0.1:6379> hget profile name 
"tom"
127.0.0.1:6379> type profile
hash
  • redis的数据淘汰机制?
    答:redis的数据量上升到一定大小的时候,就会实行数据淘汰;有6中数据淘汰机制。
    volatile-lru:从已设置过期时间的数据集挑选最少使用的数据进行淘汰;
    volitile-ttl:将已过期的数据淘汰;
    从已过期的数据中选择任意数据进行淘汰;从数据中挑选最少使用的数据;从数据中挑选任意数据进行淘汰;

  • 批量添加几百万条数据?
    答:jdbc更改提交为非自动提交;变多次提交为一次,批量插入, 然后再提交;批量插入也可以使用存储过程。

  • inner join ,left join以及right join的功能特点?
    答:inner join(等值连接) 只返回两个表中联结字段相等的行
    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录

  • sleep() 和wait() 方法的区别?
    答:sleep() 方法:线程主动放弃CPU,使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。
    wait( ) :与notify()配套使用,wait()使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,当指定时间参数时对应的 notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用

  • HashSet是如何保证 添加的内容是不重复的?
    答:由源码可知,HashSet的add( key )方法 是通过Hashmap的put(key,new Object() )实现的。HashMap是允许键值为null的。

  • hashMap 的工作原理?
    答:Hashmap 存储一个键值对的时候,先对key调用hasCode()方法,如果哈希值不一样则认为该key不存在,可以添加;如果哈希值是一样的,则还需要调用newKey.equals( oldKey) 方法 进行再次判断,如果equals 方法返回true, 则认为该key 已存在,然后对值进行更新;获取key对应的值的时候,也是通过key的哈希值找到对应的节点,然后获取该节点上value;

 @Test
    public void testSet(){
        HashSet set = new HashSet();
        set.add("Hello");
        set.add("world");
        set.add("Hello");
        for (Object s:set) {
            System.out.println(s.toString());
        }
        String a = "hello";
        System.out.println(a.hashCode());
        String b = "hello";
        System.out.println(b.hashCode());
        Map<String,String> map = new HashMap();
        map.put(a,"world1");
        map.put(b,"world2");
        for (Map.Entry<String,String> entry:map.entrySet()){
            System.out.println(entry.getKey()+"-->"+entry.getValue());
        }

        System.out.println(map.get(a));

    }
  • & 和 && 的区别?
    答:一个是与操作符,一个逻辑与;& 是操作符,1001 & 1011 = 1001; && 是逻辑关系,不具有计算功能,都为真,结果才为真,如果第一个表达式的值是false,则第二个表达式将不会执行,直接返回false。
  • 用最有效率的方法计算2 乘以8 等于几?
    答:利用c语言的操作符。2 右移 3位 --> 0010(二进制)–>左移3位是0010,000 == 2的四次方 (16);
  • 1.spring开发模式的流程
    ==| springmvc 将所有的请求都提交给DispatcherServlet ->DispactcherServlet将请求目标提交到目标Controller
    DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller -> Controller进行业务逻辑处理后,会返回一个ModleAndView ->
    找到ModleAndView对象指定的视图对象 -> 视图对象负责渲染返回客户端
  • 2.int 占4个字节,每个字节是8位,占32位;
  • 3.面向对象的特征? 封装,继承,多态,抽象
  • 4.基本数据类型?int byte char boolean double float long short ; 装箱之后(成为包装类型) integer Byte … ;string 是引用类型
    1. == 和 equals() 的区别?
      答:先说清一个,再说清一个;
      == 操作符,用来判断两个变量是否相等,如果类型是基本数据类型则直接比较值是否相等,如果类型是引用变量则比较对应内存地址的首地址。
      equals() 用来比较两个对象的的某些特征是否一样,实际就是调用该对象的equals()方法。
  • 6.staring , stringBuilder , stringBuffer 的区别?
    答:都是用来操作字符串的的,String是内容不可变,使用final修饰的 不可变的字符数组 final char[] value,而StringBuilder 和 StringBuffer 是内容可变的,底层使用的可变的字符数组char[] value,没有使用final 修饰。 都可以用来拼接字符串,单线程下 StringBuiler 效率最高(不用创建多个对象),多线程下应
    使用StringBuffer,使用string的“+” 号 拼接 ,需要创建多个对象,所以效率低。
  • 7.java 中的集合?
    答: java 中的集合分为 value 和 key-value ;值 集合包括 list,set,key-value 包括map ;
    list 集合的特点: 可以重复,有序的;而set 集合是 不可重复的,无序的,通过 hashcode() 和 equals() 进行判断 是否重复,所以如果一个对象要存在set中需要重写 hashcode 和 equals 方法;
    List 的实现类有ArrayList 和 LinkedList ;
    ArrayList 底层使用数组的方式实现的,所以查询快,增删慢;而LinkedList 底层是队列实现的,所以查询慢(无索引),增删快;
  • 8.hashMap 和 hashTable 的区别?
    答: hashmap 是可以用null 作为key 和 value的,而hashtable 不可以;Hashmap 是线程不安全的,效率高,HashTable 是线程安全的,效率低。 如果想效率高,并且线程安全,可以使用CurrentHashMap,该类在jdk1.5 之后,和上面两个类包名不一样,在并发包下。
  • 9.实现拷贝文件的工具类是使用字节流 还是字符流?
    答:我们拷贝的文件不确定只包含字符流,例如包括 图片,图像 ,声音等,我们应该使用字节流 ,这样会通用;引文字符流不支支持图片等
  • 10.线程的几种实现方式?
    答啊:一种是继承Thread,另一种是实现Runable接口,还有通过 Callable 和 Future 创建线程;推荐使用实现Runable接口,因为java是单继承。
    线程的几种状态:
    新建状态:使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序 start() 这个线程。
    就绪状态:当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。
    运行状态:如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,它可以变为阻塞状态、就绪状态和死亡状态。
    阻塞状态:如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种:等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。
    同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。
    其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。
    死亡状态:一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。
class RunnableDemo implements Runnable {
   private Thread t;
   private String threadName;
   
   RunnableDemo( String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // 让线程睡眠一会
            Thread.sleep(50);
         }
      }catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}
public class TestThread {
 
   public static void main(String args[]) {
      RunnableDemo R1 = new RunnableDemo( "Thread-1");
      R1.start();
      
      RunnableDemo R2 = new RunnableDemo( "Thread-2");
      R2.start();
   }   
}

第二种方式:

class ThreadDemo extends Thread {
   private Thread t;
   private String threadName;
   
   ThreadDemo( String name) {
      threadName = name;
      System.out.println("Creating " +  threadName );
   }
   
   public void run() {
      System.out.println("Running " +  threadName );
      try {
         for(int i = 4; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
            // 让线程睡眠一会
            Thread.sleep(50);
         }
      }catch (InterruptedException e) {
         System.out.println("Thread " +  threadName + " interrupted.");
      }
      System.out.println("Thread " +  threadName + " exiting.");
   }
   
   public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
   }
}
 
public class TestThread {
 
   public static void main(String args[]) {
      ThreadDemo T1 = new ThreadDemo( "Thread-1");
      T1.start();
      
      ThreadDemo T2 = new ThreadDemo( "Thread-2");
      T2.start();
   }   
}
  • 11.有没有使用过线程并发库?
    答: 简单了解过,jdk5中引入douglea的并发库,这一引进给java 线程的管理和使用提供了强大的便利性,在java.util.current 包中提供了对线程池优化,管理的各项操作;该包提供了对线程的运行,线程池的创建,线程生命周期的控制。
    java 中通过 Executors 提供四个静态方法创建线程池,分别为 newCachedThreadPool创建一个可缓存的线程池,如果线程池长度超出处理需要,则可灵活回收空闲线程
    分别为;newFixedThreadPool创建一个定长线程池,可控制线程池最大并发数,超出的线程会在线程池中等待。
    分别为:newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务;
  • 12.线程池的作用?
    答:限定线程个数,可防止线程过多 导致系统运行缓慢;线程池不需要每次都创建和销毁节约系统资源;由于线程池不需要每次都创建,响应时间更快。 == 连接池的作用
  • 13.一些设计模式?
    答:单例模式(饱汉式,饿汉式),工厂模式(spring的IOC),代理模式(spring的AOP),包装模式
    单例模式代码
/**
 *@program: javaBase
 *@description: 单例模式
 *@author: ningl
 *@create: 2019.2.13-21.14
 */
public class SingleTn {
    private static SingleTn singleTn = new SingleTn();
    private SingleTn(){
        
    }
    
    public static SingleTn getSingleTn(){
        //饿汉式
        return singleTn; 
    }
}
/**
 *@program: javaBase
 *@description: 单例模式
 *@author: ningl
 *@create: 2019.2.13-21.46
 */
public class SingleTn2 {
    private  static  SingleTn2 singleTn2 = null;

    public synchronized static SingleTn2 getSingleTn2() {
        //饱汉式 ,多线程下不安全,需要synchronized 关键字
        if(singleTn2 == null) {
           return new SingleTn2();
        }
        return singleTn2;
    }
}
  • 14.什么是servlet? servlet的生命周期?
    答:servlet是一种服务器程序,负责和web的交互,我们可以重写doGet() 或者doPost() 或者 service()方法。生命周期:servlet启动时,开始加载servlet,实例化一个servlet,生命周期开始–>服务器启动,
    开始初始化servlet(调用init() 方法),请求到达是时运行 servce()方法,而service方法会自动匹配运行doPost或者是doGet方法,当服务器将该实例销毁的时候调用distroy()方法。
  • 15.forward() 和redirect()的区别?
    答: forward是服务器端的跳转,地址栏不变,一个请求;redirect是客户端的跳转,是两个请求,地址栏内容改变;
  • 16.cookie 和session ?
    答:都可以用来做会话跟踪,不同的是cookie是客户端,而session 存储在服务器上;
  • 17.事物的特性?
    答:是事物并发控制的单位,是用户定义的一个操作序列,要么都成功,要么失败;举例是A向B转账,A的钱减少,B的钱增加才算成功;
    事物的四大特性:原子性(表示事物内的操作不可分割),一致性(保持状态一致,失败要进行回滚),隔离性,持久性
  • 18.mysql 数据库的最大连接数?
    答:默认是100,在mysql的配置中可以修改。max_contacts = 100;
  • 19.mysql的分页和orcal的分页?
    答;mysql 使用关键字 limit offset,size,表示从offset 开始之后size 位。
    oracle的分页 使用三层嵌套查询,平时是从网上拷贝或者从以前项目拷贝。
  • 20.触发器的使用?存储过程?
    答:触发器需要触发条件,当触发条件达到时执行某个操作;存储过程只在创建时编译,存储过程 创建一次可以多次使用;
  • 21.jdbc 链接步骤?
    答:加载驱动,获取连接,设置参数,执行语句,返回结果集,释放资源。
  • 22.ajax 的介绍?什么是跨域?如何解决
    答:XMLHttpRequest对象;跨域是访问另一个服务器上的资源,解决方式:调试的时候谷歌浏览器可以设置下 或者 在服务器端配置等
  • 23.springMVC的流程或者是原理?
    答:用户向服务器发送一个请求,请求被spring前端控制器 dispactherServlet 捕获,DispatcherServlet对请求url进行解析,得到请求资源符(url),然后执行对应的
    Hadnler(controller),然后选择一个ViewResolver进行配置ModelAndView,然后渲染界面,
  • 24.过滤器与拦截器的区别?
    答:Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。
    Filter的执行由Servlet容器回调完成,而拦截器通常通过动态代理的方式来执行。
    Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。
  • 25.struts 与springmvc 的区别?
    答:struts 没有使用过但是有一些了解,springmvc是基于方法设计的 而stuts 是基于对象设计的;springmvc 的实现方式是servlet而strut是通过Filter实现的;
  • 26.spring的两大核心是什么?
    答: 控制反转(IOC,也可以称为 依赖注入DI)与 面向切面编程(AOP). 控制反转:就是说 将一些bean 现在由spring进行控制和注入。例如我的service层需要dao,则spring发现的该service
    依赖的dao,就会将该dao自动注入,核心原理是工厂模式+反射+配置文件;
    面向切面:首要核心原理 使用动态代理的方式在执行前后或者出现异常之后做相关处理;我们主要使用AOP来做事物处理,权限判断以及日志文件等。
  • 27.spring的事物传播特性
    答:
  • 28.什么是ORM?
    答: 对象关系映射。ORM框架有mybaties 以及 hibernate.是为了解决对象与关系数据库之间不匹配的状况。
  • 29.hibernate 对象映射的状态?
    答:瞬时状态(使用new 刚创建,没有被持久化,每有id),游离状态/托管状态(已经被持久化,到那时不存在session中),持久状态(已经被持久化,存在session中),
  • 30.webService 的应用场景?
    答:webService 是一个SOA(面向服务的编程),不依赖语言,不依赖平台。通过internet进行基于http 协议网络应用的交互。
  • 31.简单介绍下activity?
    答:
  • 32.关于linux?
    答:用过,linux是一个操作系统,可以用来作为服务器,我们的一些软件是没有软件包的,需要在linux上进行编译才能得到软件包,比如redis,nginx等
    常用命令:pwd 获取当前路径,cd 跳转到目录,ls 列举目录下的文件
    文件操作命令:mkdir 创建文件夹,rm-r 删除文件夹,tail 查看,
  • 33.用什么来连接linux服务器的?
    答: 使用xsheel,连接 输入用户名 主机地址 ,密码,默认端口号是22;上传文件 使用xftp,用来上传一些软件的安装包。
  • 34.有没有使用过云主机?
    答:公司是租的阿里的,云服务运营商提供的远程的服务器功能,使用xheel操作。
  • 35.mysql的优化?
    答;查找,定位慢查询,并优化;创建索引;分表(当一个表字段非常多并且很少使用时,水平分表和垂直分表);读写分离(当一台服务器不能满足需求时,采用读写读写分离的方式进行集群);进行redis ;sql 优化技巧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值