java基础

1.#{}和${}分别

  1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

  2.将传入的数据直接显示生成在sql中。如:orderby将传入的数据直接显示生成在sql中。如:orderbyuser_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

  3.#方式能够很大程度防止sql注入。

  4.$方式无法防止Sql注入。

  5.$方式一般用于传入数据库对象,例如传入表名.
  
  6.一般能用#的就别用$.

  MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

2.Tomcat,MySQL,Redis端口号

  8080  3306  6379

3.什么是泛型?

  把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊类型

   作用: 代码更加简洁【不用强制转换】

        程序更加健壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException异常】

        可读性和稳定性【在编写集合的时候,就限定了类型】

4.HashMap与HashTable是什么?怎么写

  HashMap允许键和值是null,而Hashtable不允许键或者值是null。

  Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。

5.项目准备好之后怎么配置Maven

6.Redis的类型

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

7.Redis基础命令

  $ redis-cli 基础语法  

  有时候会有中文乱码。要在 redis-cli 后面加上 --raw

8.Mybatis和jpa什么区别

  1. hibernate是全自动,而mybatis是半自动

  2 mybatis相比hibernate需要关心很多细节——mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多

  3 sql直接优化上,mybatis要比hibernate方便很多

9.介绍一下Spring

  Spring框架是一个开源的容器性质的轻量级框架。主要有三大特点:容器、IOC(控制反转)、AOP(面向切面编程)

10什么是SpringBoot

11.介绍jdk,jre,jvm;

  JDK=JRE+Java开发工具,jre=jvm+类包

14,怎么启动SpringBoot

  一:IDE 运行Application这个类的main方

  二:在springboot的应用的根目录下运行mvn spring-boot:run

  三:使用mvn install 生成jar后运行

      先到项目根目录
      mvn install 
      cd target
      java -jar   xxxx.jar

    jdk和jre的区别
    (1). jdk:全称Java Development Kit,java开发的类库,工具包
    (2). jre:全称Java Runtime Environment,java运行时的环境,包含了java虚拟机,java基础类库
    离开了jdk 只有jre可以运行项目吗
    JRE只有java,即解释器,而解释器只能对字节码解释执行。所以只安装了JRE,是不能执行java程序的。需先用jdk的javac编译器对源代码编译为class文件才行。
    摘自知乎:https://zhuanlan.zhihu.com/p/62504600
    所以如果java文件没有被编译成class文件则需要jdk 如果已经编译成了jdk则不需要
    final关键字
    final意为不可变的,常与static一同使用,一般分为四个场景
    (1). 修饰变量(成员变量,局部变量):只能被赋值一次且无法被改变
    (2). 修饰方法:表示方法不可被重写
    (3). 修饰方法参数:表示在变量的生存期中它的值不能被改变
    (3). 修饰类:表示类不可被继承
    Map和list的区别
    (1). List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象
    (2). Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。
    也就是说区别是,list有索引所以数据可以重复,map是k-v键值对,key是键所以不能重复但value可以
    hashMap和hashTable的区别
    (1). HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。
    Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。
    java 字符串两端有空格如何去重

//去除首位空格
str.trim()
//去除所有空格
str.replaceAll(" ","")
//去除空白字符不限于空格

 str.replaceAll("\\s*","")

    为什么要序列化
    对象的序列化技术,实现的手段是通过Object流,是将对象转换为容易传输的格式的过程
    若在网络上对象需要传输,那么就需要序列化,保证了对象的传输性和一致性,传递方序列化(序列化成流) 接收方反序列化(从该流重新构造对象)
    什么是sql注入
    SQL注入(SQLi)是一种注入攻击,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器
    样例

select * from student where name='' and pwd=''

这时pwd这一项填入
’ OR ‘1’='1后

select * from student where name='' and pwd='' OR '1'='1'

这样密码就永远是true成功登入

    如何防止sql注入
    (1). 在原生开发里可以用PreparedStatement来接sql

conn =ForumUtil.getConnection();
            String sql = "select * from student where name='' and pwd=''";

            ps =conn.prepareStatement(sql);

这中方法就是先把sql语句来编译好 先确定了sql结构 ,就不会出现注入问题
在mybatis里Like关键字也要使用CONCAT来拼接,做到防止sql注入

report_time LIKE CONCAT(#{nowTime},'%')

mybatis里字符串使用#{}非字符串使用${}

        RabbitMQ,ActiveMQ和Kafka的区别
        ActiveMQ:底层是用java写的对JMS支持最好,采用多线程并发,资源消耗比较大
        Kafka:为大数据开发的有着集群,负载均衡的支持
        RabbitMQ:受众广,AMQP协议,支持多种场景
        JMS跟ActiveMQ的关系
        JMS:全称Java Message Service 是JavaEE的消息规范
        ActiveMQ是JMS的一种落地实现
        集合
            Set:
            TreeSet:支持有序性操作。但是查找效率不高
            HashSet:支持快速查找,但不支持有序性操作。
            LinkedHashSet:具有 HashSet 的查找效率,并且内部使用双向链表维护元素的插入顺序。
            List:
            ArrayList:基于动态数组实现,支持随机访问。
            Vector:和 ArrayList 类似,但它是线程安全的。
            LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。
        spring中最重要的两个功能是什么
        IOC:依赖注入,控制反转
        AOP: 面向切面编程
        如何使用线程
        1. 实现runable接口中的run方法
        2. 实现 Callable 接口
        3. 继承 Thread 类

        什么是IOC?
        控制反转(IOC)就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。IOC容器最主要是完成了对象的创建和依赖的管理注入等。

        Spring AOP
        AOP即面向切面编程。可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。AOP技术利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

        AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

        Java设计模式

        1、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

        2,单例模式
        确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。

        3,适配器模式
        适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。

        4,代理模式
        代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些 情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可 以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值