zoukankan      html  css  js  c++  java
  • 查漏补缺复盘10.17

    1.取整数a的十位数。

    public static void main(String[] args){
            int s=1831;
            int g = s%10;
            int sw = s/10%10;
            int b = s/100%10;
            int q = s/1000%10;
            System.out.println("个位数是:"+g+";十位数是:"+sw+";百位数是:"+b+";千位数是:"+q);
        }
    结果:个位数是:1;十位数是:3;百位数是:8;千位数是:1
    View Code

    2.多线程

      实现一个线程有哪几种方式?各有什么优缺点,比较常用的是那种,为什么

      1)      继承Thread类,需要重写run方法,无返回值

      a)        优点:可以直接调用start方法启动线程

      b)        缺点:java只能单继承,如果已经有了父类,不能用这种方法

      2)      实现Runnable接口,需要重写run()方法

      a)        优点:即使自己定义的线程类有了父类也可以实现接口,而且接口是多实现

      b)        缺点:需通过构造一个Thread把自己传进去,才能实现Thread的方法,代码复杂

      3)      实现Callable接口,需要重写call()方法

      a)        优点:可以抛出异常,有返回值

      b)        缺点:只有jdk1.5以后才支持,结合FuntureTask和Thread类一起使用,最后调用start启动线程

    一般用第二种,实现Runnable接口,比较方便,扩展性高.

      何为进程?

        进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。

        在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程

      何为线程?

        线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程

    3.同步方式

     (1)同步方法:
    即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
    (2)同步代码块
    即有synchronized关键字修饰的语句块。被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
    (3)使用特殊域变量(Volatile)实现线程同步
    a.volatile关键字为域变量的访问提供了一种免锁机制
    b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
    c.因此每次使用该域就要重新计算,而不是使用寄存器中的值
    d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
    (4)使用重入锁实现线程同步
    在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。ReentrantLock类是可重入、互斥、实现了Lock接口的锁, 它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力。
    (5)使用局部变量实现线程同步

    4.线程状态

    5.jsp和servlet的区别

    jsp和servlet的区别和联系:
    1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
    2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
    3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
    Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
    联系: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑

    6.jsp传递参数的四种方式

      1、form表单

      2、request.setAttribute();和request.getAttribute();

      3、超链接:<a herf="index.jsp"?a=a&b=b&c=c>name</a>

      4、<jsp:param>

    7.对比两个String是否相等

    String a=new String("abc"); 
    String b=new String("abc");
     a.equals(b);
    View Code

    8.n1,n2相加,用递归

    public class Main {
        public static void main(String[] args){
            System.out.println(sum(2, 5));
        }
         
        public static int sum(int n1, int n2) {
            if(n1 == n2) {
                return n1;
            }
             
            if(n1 >  n2) {
                int temp = n1;
                n1 = n2;
                n2 = temp;
            }
             
            return sum(n1, n2-1) + n2;
        }
    }
    View Code

    9.jvm加载class的顺序

    10.pagehelp 分页以及mysql的分页

      mysql主要是使用limit分页。

    11.单例,懒汉和饿汉哪个线程安全

      饿汉式单例模式是线程安全的

    12.Redis的数据类型

      string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    13.项目中验证码是如何生成,主要是唯一性以及时效性

    14.jsr303是什么 

     JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。如:@Null 限制只能为null、@NotNull 限制必须不为null

    15.md5是可逆的吗?

      MD5不可逆的原因是由于它是一种散列函数(也叫哈希函数,哈希函数又称散列函数,杂凑函数,他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程,哈希函数可以将任意长度的输入经过变化后得到固定长度的输出,这个固定长度的输出称为原消息的散列或消息映射。 理想的哈希函数可以针对不同的输入得到不同的输出,如果存在两个不同的消息得到了相同的哈希值,那我们称这是一个碰撞),使用的是hash算法,在计算过程中原文的部分信息是丢失了的。一个MD5理论上是可以对应多个原文的,因为MD5是有限多个而原文是无限多个的。

    16.list 和 set和map的区别,Redis里也有

    • List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象
    • Set(注重独一无二的性质): 不允许重复的集合。不会有多个元素引用相同的对象。
    • Map(用Key来搜索的专家): 使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

    17.java的反射机制

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

    18.一个商品,三个人同时抢,改变这个局面(多线程并发)

      不懂不懂

    19.堆排序

      https://mp.weixin.qq.com/s/3krwgrzB6EV4HU7wI0Rm4A

    20.快速排序

      https://mp.weixin.qq.com/s/3krwgrzB6EV4HU7wI0Rm4A

    21.Redis持久化有什么策略

      持久化+过期策略:https://www.cnblogs.com/wlwl/p/9842691.html

      https://blog.csdn.net/q649381130/article/details/79920277

    22.Redis雪崩

      缓存雪崩是指在我们设置缓存失效时间上时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部打到后端数据库,数据库一时请求过大,数据库cpu和IO一时负载过大,造成雪崩。

      

    解决方法

    (1)设置redis集群和DB集群的高可用,如果redis出现宕机情况,可以立即由别的机器顶替上来。这样可以防止一部分的风险。

    (2)使用互斥锁

      在缓存失效后,通过加锁或者队列来控制读和写数据库的线程数量。比如:对某个key只允许一个线程查询数据和写缓存,其他线程等待。单机的话,可以使用synchronized或者lock来解决,如果是分布式环境,可以是用redis的setnx命令来解决。

    (3)不同的key,可以设置不同的过期时间,让缓存失效的时间点不一致,尽量达到平均分布。

    (4)永远不过期

      redis中设置永久不过期,这样就保证了,不会出现热点问题,也就是物理上不过期。

    (5)资源保护

      使用netflix的hystrix,可以做各种资源的线程池隔离,从而保护主线程池。

    23.复习一下Redis和RabbitMQ的常见情景。

    24,锁

    侵删。

  • 相关阅读:
    最少说服人数(二分+贪心)
    线段树或树状数组或归并(逆序对)
    线段树(区间更新,区间询问,节点存最小值)
    【Hades】ades是一个开源库,基于JPA和Spring构建,通过减少开发工作量显著的改进了数据访问层的实现
    【hibernate】spring+ jpa + hibername 配置过程遇到的问题
    【方言】Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
    【Bean】 这才是bean,一直没仔细看
    【spring配置】 一组配置文件引出的问题
    org.springframework.web.servlet.view.InternalResourceViewResolver
    org.springframework.orm.jpa.JpaTransactionManager
  • 原文地址:https://www.cnblogs.com/fzzzjjj/p/11694430.html
Copyright © 2011-2022 走看看