java

Maven:

Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过pom.xml文件的配置获取jar包,而不用手动去添加jar包,而这里pom.xml文件对于学了一点maven的人来说,就有些熟悉了,怎么通过pom.xml的配置就可以获取到jar包呢?pom.xml配置文件从何而来?等等类似问题我们需要搞清楚,如果需要使用pom.xml来获取jar包,那么首先该项目就必须为maven项目,maven项目可以这样去想,就是在java项目和web项目的上面包裹了一层maven,本质上java项目还是java项目,web项目还是web项目,但是包裹了maven之后,就可以使用maven提供的一些功能了(通过pom.xml添加jar包)

Artifact id:唯一标识符号。

Group id:

这样就可以简单轻松的管理jar包了

<description>项目描述</discription>  对项目做出描述.

<display-name>项目名称</display-name> 定义项目的名称.

Servlet:

servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL.

<servlet-name>Servlet的名称</servlet-name> 定义Servlet的名称.

    <url-pattern>Servlet URL</url-pattern> 定义Servlet所对应的RUL.例如:<url-pattern>/Servlet/Hello</url-pattern>

创建url可以连接到浏览器:

在src文件夹下New一个servlet就可以创建一个可以通过例如post/get可以访问到的url

然后在eclipse下面创建一个serlvet,右键new一个serlvet然后输入对应的项目名/类名即可得到

 

Tomcat:

Tomcat是把Servlet包括起来的,其是比Servlet更外围的一层

JDCB:

Java独有的数据连接方式,数据库连接API,将代码翻译成SQL访问的方式去访问数据库,使得java可以在更多的平台上进行运行。

客户端->JDBC->数据库服务器

Spring-boot:

Application是核心配置,如果想要调用其他配置,那么是需要加一个

可以调用application-test的配置用这么一条命令

spring.profiles.active = test

每次对Spring-boot的内容进行更改的时候需要重新启动tomcat会显得异常麻烦,此时我们可以通过热部署的方式使得其在修改代码后的几秒钟重新启动一些部分,使得新代码的结果得以生效

热部署引入这么一个依赖,然后重新run即可热部署成功:

<dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-devtools</artifactId>

        <optional>true</optional>

</dependency>

常见注解:

Mybatis:

mybatis对纯jdbc做了封装,使程序员能够以面向对象的思想操作数据库。

Mybatis的使用:

首先要先定义一个接口来给程序调用,

然后写一个xml文件,表示这次连接的配置(如账号密码,数据库等)

此时要调用另外一个xml文件,里面是sql语句。

这里的xml文件需要放在resource文件下面。

然后建立一个controller,这么去查询

Reader reader = Resources.getResourceAsReader("mybatisconfig.xml");

             SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new

             SqlSessionFactoryBuilder();

             SqlSessionFactory sqlSessionFactory =

             sqlSessionFactoryBuilder.build(reader);

             SqlSession session = sqlSessionFactory.openSession();

            // /**

            // * 映射sql的标识字符串org.guus.mapping.userMapper.getUser

            // * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

            // */

             String statement = "userMapper.getUser";//映射sql的标识字符串

             //执行查询返回一个唯一user对象的sql

             user = session.selectOne(statement,3);

             System.out.println(user);

 

Jsp:

JSP 与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言而动态生成 HTML、XML 或其他格式文档的Web网页的技术标准

它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束
jsp的优点:

jsp性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。

服务器调用的是已经编译好的JSP文件,而不像CGI/Perl那样必须先载入解释器和目标脚本。

WebContent下new一个jsp文件,然后在其中输入<%%>的java文件,然后打开serlvet就能看到输出的结果,只不过结果是在eclipse上显示出来

web.xml下配置如

<?xml version="1.0" encoding="UTF-8"?> 

<web-app version="2.5"  

    xmlns="http://java.sun.com/xml/ns/javaee"   

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 

  <servlet> 

     <!-- 类名 --> 

    <servlet-name>HelloServlet</servlet-name> 

    <!-- 所在的包 --> 

    <servlet-class>com.lanyoung.servlet.HelloServlet</servlet-class> 

  </servlet> 

  <servlet-mapping> 

    <servlet-name>HelloServlet</servlet-name> 

    <!-- 访问的网址 –项目名字/类名字> 

    <url-pattern>/Servlet/HelloServlet</url-pattern> 

    </servlet-mapping> 

</web-app> 

当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

如果是通过postman去获取,那么获取的应该为项目名/jsp名字(此时jsp位置在WebContent目录下

多态详细理解:

我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过  Animal a = new Cat();的方式去定义

它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。

所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;

  同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;

  对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

父类的引用:

Animal a = new Cat();

可以调用所有父类的属性与方法,而对于子类定义父类中没有的方法,无可奈何。父类在其子类没有重写的方法可以直接调用,但是对于重写后的代码,其调用的为子类的属性与方法(重写后。

多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。

再举个比较形象的例子:
比如有一个函数是叫某个人来吃饭,函数要求传递的参数是人的对象,可是来了一个美国人,你看到的可能是用刀和叉子在吃饭,而来了一个中国人你看到的可能是用筷子在吃饭,这就体现出了同样是一个方法,可以却产生了不同的形态,这就是多态!

Web服务器:

使用HTTP协议来传输数据。最简单的一种情况是,用户在浏览器(客户端,client)中输入一个URL(如,www.programcreek.com/static.html),然后就能获取网页进行阅览。因此,服务器完成的工作就是发送网页至客户端。传输过程遵循HTTP协议,它指明了请求(request)消息和响应(response)消息的格式。

HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求

Servlet容器:

在这里,我们发现,用户/客户端只能向服务器请求静态网页。如果用户想要根据自己的输入来读取网页,这种方式就不能满足用户的要求。Servlet容器的基本思想是在(服务器端)使用Java来动态生成网页。因此,Servlet容器是Web服务器和servlet进行交互的必不可少的组件。

Servlet是在javax.serlvet包中定义的一个接口。它声明了servlet生命周期中必不可少的三个方法-init()、service()和destroy()。每个servlet(无论是在SDK中定义的,或是自定义的)都必须实现这三个方法,而且由服务器在特定的时刻调用。

    1. init()方法在servlet生命周期的初始化阶段被调用。它传递一个实现了javax.servlet.ServletConfig接口的对象,使得servlet能够从web application中获取初始化参数。

    2. servlet初始化收,每接收一个请求,就会调用service()方法。每个请求的处理都在独立的线程中进行。Web服务器对每个请求都会调用一次service()方法。service()方法判断请求的类型,并把它转发给相应的方法进行处理。

    3. 当需要销毁servlet对象时,就要调用destroy()方法。该方法释放被占用的资源。

    和所有的Java程序一样,servlet运行在JVM中。引入servlet容器是为了处理复杂的HTTP请求。Servlet容器负责servlet的创建、执行和销毁。

Servlet容器和Web服务器如何处理一个请求?

 1. Web服务器接收到HTTP请求

    2. Web服务器将请求转发给servlet容器

    3. 如果容器中不存在所需的servlet,容器就会检索servlet,并将其加载到容器的地址空间中

    4. 容器调用servlet的init()方法对servlet进行初始化(该方法只会在servlet第一次被载入时调用)

    5. 容器调用servlet的service()方法来处理HTTP请求,即,读取请求中的数据,创建一个响应。servlet会被保留在容器的地址空间中,继续处理其他的HTTP请求

6. Web服务器将动态生成的结果返回到正确的地址。

DNS服务器:

第一步,浏览器会查找是否有缓存这个域名对应的ip

第二步,如果没有再查找系统缓存是否有对应的dns解析结构。

第三步,请求LDNS服务器是否有这个域名(大部分域名到这里就结束了。

第四步,请求域名服务器进行解析nslookup

TCP连接:

需要创建TCP链接,必须知道对方的IP和一个未被使用的端口号

TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据

 

线程与进程的区别:

线程共用一套数据,而线程不行,创建与销毁线程的开销远远小于进程。线程是有顺序的运行,只不过其有个优先级的考虑。

线程的两种死亡方式:

1:run方法自然死亡。

2:因为一个没有捕获的异常结束。

线程的优先级:

一个线程继承其父亲的线程优先级

JAVA的锁概念:

锁结构使得,任何时刻只有一个线程进入临界区。一旦一个线程封锁了对象,其他任何线程都方无法通过lock语句,当其他线程调用lock时,他们将被阻塞。

用try{}finally{}中的finally释放锁是非常重要的,如果代码在临界区抛出异常而不解锁,那么其他线程将永远无法工作。

有可能某个方法的锁被2个线程同时使用,此时它们将会以串行的方式运行。

当一个线程需要等待其他线程的某个条件满足后才能继续运行下去时,它可以创建await,然后进入await等待集等待满足的条件激活这个线程,此时会出现一种情况,没有其他线程来重新激活等待的线程,那么这个线程将一直无法运行,这样就造成了死锁(互相等待)。

那么这里有一种解决方法:

对某些转账使用signalAll使得在等待的进程检查条件,来判断其是否可以获得重生!  

Mysql的一些内容:

Mysql的字符集:utf8

Mysql的排序规则:

utf8_general_ci 不区分大小写,utf8_general_cs 区分大小写 

JPA:

JPA解析方法:https://blog.csdn.net/qq_16511223/article/details/78890394

JPA 的根据解析方法名称自动对接口进行实现的方法能节省大量的资源

方法解析:(findByPriceOutAndSkuSkuCode)

  1. 首先去掉前缀,如find、findBy、read、readBy、get、getBy,剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询

优点:统一API,使用JPA不用关注底层使用什么数据库,统一访问orm框架的规范

Orm的意思是对象关系映

JPA全程使用注解

JPA(Java persistence API)用于管理java环境的持久化,以及对象、关系映射的JAVA API

类必须要有注解,

实体类必须有一个无参数的构造函数。

有唯一对象标识符,例如ID

ONETOMANY,一对多

Entitymanager接口:

定于持久性上下文进行交互的方法。

查找一个(实体类,ID)就有结果了

java的几种对象(PO,VO,DAO,BO,POJO)解释  
   一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作

   二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),web上传递

   三、DAO:data access object 数据访问对象,此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作

   四、BO:business object 业务对象,封装业务逻辑的java对象,过调用DAO方法,结合PO,VO进行业务操作

   五、POJO:plain old java object 简单无规则java对象,我个人觉得它和其他不是一个层面上的东西,VOPO应该都属于它.

Thymeleaf:

这是一个类似jsp的格式的前端工具,其准确来说是一个模板引擎

Thymeleaf的优点:

Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示

th标签经常使用,通过attribute的方式传递到前端的内容不再需要jquery去使用,而是可以直接通过th调用
elasticsearch(全文搜索引擎

Elastic 本质上是一个分布式数据库,允许多台服务器协同工

Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引

Document 可以分

Elasticsearch需要打开,在ES文件下bin/下的elasticsearch.bat打开,运行在9300端口

Log4j:

<!-- 日志 -->

            <dependency>

                  <groupId>org.slf4j</groupId>

                  <artifactId>slf4j-log4j12</artifactId>

            </dependency>

先安装依赖包,这里没有定义版本

然后在class中

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

创建记录器

Logger logger = LoggerFactory.getLogger(getClass());

logger.trace("这是trace 日志");

前端知识串讲:

Ajax是一个不用刷新整个网页就能服务器进行一个请求的技术组合。

Jquery是解决了如前端中图片左右滑动,前端判断账号密码是否正确,的高兼容性库。

Jquery是一种 jQuery是一个轻量级的"写的少,做的多"JavaScript库。

AJAX 是一种与服务器交换数据的技术,可以在不重新载入整个页面的情况下更新网页的一部分

Javabean:

简单的讲就是实体类,用来封装对象,这个类里面全部都是属性值,和get,set方法,是model层。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值