java每日提升

1.String s = new String(“xyz”);创建了几个StringObject对象?
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s
2.前端控制器 DispatcherServlet,处理器映射器 HandlerMapping,处理器执行链 HandlerExecutionChain,处理器适配器 HandlerAdapter,视图解析器ViewResolver

        1、客户端请求到前端控制器(dispatcherServlet)
		2、前端控制器(dispatcherServlet)请求处理器映射器(HandlerMapping),
		3、处理器映射器(HandlerMapping)根据url查找相应的处理器(Handler),返回处理器执行链(HandlerExecutionChain)给前端控制器(DispatcherServlet)
		4、前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter),
		5、处理器适配器(HandlerAdapter)执行处理器(Handler),生成ModelAndView,返回ModelAndView给前端控制器(DispatcherServlet)
		6、前端控制器(DispatcherServlet)请求视图解析器(ViewResolver)
		7、视图解析器(ViewResovler)返回视图对象给前端控制器(DispatcherServlet)
		8、最后渲染视图

3.java中数组复制效率最高的是System.arraycopy()
4.一个类中可以包含多个main方法(方法重载)

public class Test {
  public static void main(){
  System.out.println("main(void)");
 }
 public static void main(String[] args) {
  System.out.println("main");
  main();
 }
}

5.String s = “a” ;String b = “a” ;
s和b的地址值是一样的
6.遍历set集合

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetFor {

	public static void main(String[] args) {

		Set<String> set = new HashSet<>();
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		
		getSet1(set);
		getSet2(set);
		getSet3(set);
		getSet4(set);
	}

	
	// 1. Set集合的遍历: toArray()-----> Object[]
	public static void getSet1(Set<String> set) {
		
		Object[] obj = set.toArray();
		for (int i = 0; i < obj.length; i++) {
			Object ob = obj[i];
//			System.out.println(ob);
			//多态向下转型
			String s = (String)ob;
			System.out.println("111111---"+s);
		}
	}
	
	
	// 2. Set集合的第二种遍历方式: toArray(T[] t)
	public static void getSet2(Set<String> set) {
		// 需要参数T[],先创建一个数组,因为set中时String类型的元素,创建String[],
		// 数组大小设置为set集合中的元素的大小
		
		String[] s1 = new String[set.size()];
		String[] s2 = set.toArray(s1);
		
		for (int i = 0; i < s2.length; i++) {
			String s3 = s2[i];
			System.out.println("222---"+s3);
		}
		
	}
	
	
	// 3. 迭代器遍历方式
	public static void getSet3(Set<String> set) {
		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			String string = (String) it.next();
			System.out.println("3333----"+string);
		}
	}
	
	// 4. 增强for进行set集合的遍历
	public static void getSet4(Set<String> set) {
		for (String string : set) {
			System.out.println("4444---"+string);
		}
		
	//5.(此方式与3一样,不过是for循环的另外一种使用方式)
	for (Iterator iterator = set.iterator(); iterator.hasNext();) {
		String string = (String) iterator.next();
		System.out.println("555----"+string);
	}
		
	}
}

6.map集合的遍历

1.通过Map.keySet遍历key和value
map.keySet()返回的是所有key的值
map.get(in)得到每个key对应value的值
2.通过Map.entrySet使用iterator遍历key和value
3.通过Map.entrySet遍历key和value
map.entrySet() 返回此映射中包含的映射关系的 Set视图。
4.通过Map.values()遍历所有的value,但不能遍历key
public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "a");
        map.put(2, "b");
        map.put(3, "ab");
        map.put(4, "ab");
        map.put(4, "ab");// 和上面相同 , 会自己筛选
        System.out.println(map.size());

        System.out.println("第一种:通过Map.keySet遍历key和value:");
        for (Integer in : map.keySet()) {
            //map.keySet()返回的是所有key的值
            String str = map.get(in);//得到每个key多对用value的值
            System.out.println(in + "     " + str);
        }


        System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
        Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Integer, String> entry = it.next();
            System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
        }

        // 第三种:推荐,尤其是容量大时
        System.out.println("第三种:通过Map.entrySet遍历key和value");
        for (Map.Entry<Integer, String> entry : map.entrySet()) {
            //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
            //entry.getKey() ;entry.getValue(); entry.setValue();
            //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
            System.out.println("key= " + entry.getKey() + " and value= "
                    + entry.getValue());
        }

        System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
        for (String v : map.values()) {
            System.out.println("value= " + v);
        }

    }

7.开启线程的3种方式
<1>继承Thread类重写run()方法
<2>实现Runnable接口重写run方法 new Thread(myRunnable, "线程名字").start();
<3>重写Callable接口重写call方法
8.Thread的sleep(毫秒值)方法 Object的wait()方法

1、sleep是线程中的方法,但是wait是Object中的方法。
2、sleep方法不会释放lock,但是wait会释放,而且会加入到等待队列中。
3、sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字。
4、sleep不需要被唤醒(休眠之后推出阻塞),但是wait需要(不指定时间需要被别人中断)。

8.函数式接口&Stream流
9.在这里插入图片描述

10.二维码生成网站
11.applicationContext.xml

<!-- 使用annotation自动注册bean, 并保证@Required/@Autowired的属性被注入 -->
	 <context:component-scan base-package="com.xunfang.comm,com.xunfang.zhsx">
		 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />  
	</context:component-scan>

	
	<!-- MyBatis配置 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:/mybatis/config.xml" />
		 <!--  <property name="mapperLocations" value="classpath:com/xunfang/zhsx/employee/dao/**.xml"></property> -->
	</bean>

	<bean id="sqlSession" class="com.xunfang.comm.orm.mybatis.SimpleSqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
		<constructor-arg index="1" value="SIMPLE" />
	</bean>

	<!-- 事务管理器配置, JDBC事务配置 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- end -->

	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager"
		proxy-target-class="true" />

	<!-- 定义aspectj -->
	<aop:aspectj-autoproxy proxy-target-class="true" /> 
   
	<!-- 开发环境 -->
	<context:property-placeholder
		ignore-resource-not-found="true" location="classpath:application.properties,classpath:redis.properties" />

	<!-- 数据源配置, 使用应用内的DBCP数据库连接池 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<!-- Connection Info -->
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="defaultAutoCommit" value="false" />

		<!-- Connection Pooling Parameter -->
		<property name="timeBetweenEvictionRunsMillis" value="3600000" />
		<property name="minEvictableIdleTimeMillis" value="3600000" />
		<property name="testWhileIdle" value="true" />
		<property name="numTestsPerEvictionRun" value="100" />
		<!-- 初始化连接大小 -->
		<property name="initialSize" value="${jdbc.initialSize}"></property>
		<!-- 连接池最大数量 -->
		<property name="maxActive" value="${jdbc.maxActive}"></property>
		<!-- 连接池最大空闲 -->
		<property name="maxIdle" value="${jdbc.maxIdle}"></property>
		<!-- 连接池最小空闲 -->
		<property name="minIdle" value="${jdbc.minIdle}"></property>
		<!-- 获取连接最大等待时间 -->
		<property name="maxWait" value="${jdbc.maxWait}"></property>
	</bean>


	<bean id="templateManger"  class="com.xunfang.zhsx.employee.service.equipment.TemplateManger" lazy-init="false" init-method="loadTemplate"></bean>
	<bean id="equipmentStatusManger" class="com.xunfang.zhsx.employee.service.laboratory.EquipmentStatusManger" lazy-init="false" />	
	<import resource="spring-redis.xml" />
  1. IOC:把对象的创建、初始化、销毁交给 spring 来管理,而不是由开发者控制,实现控制反转。
  2. 自动扫描:<content:component-scan base-package = "com.team">
  3. 使用 @Autowired 注解来自动装配指定的 bean<context:annotation-config />也可以通过在配置文件中配置 AutowiredAnnotationBeanPostProcessor 达到相同的效果
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
  4. 怎么样把 ModelMap 里面的数据放入 Session 里面?
    答:可以在类上面加上@SessionAttributes 注解,里面包含的字符串就是要放入 session 里面的 key
  5. 当一个方法向 AJAX 返回特殊对象,譬如 Object,List 等,需要做什么处理?
    答:要加上@ResponseBody 注解

x = y++
(1)先用y,即x = y,
(2)后y = y + 1
x = ++y
(1)y = y + 1
(2)x = y
18. heap 和 stack 有什么区别?
Java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入一个方法
时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,
当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使
用 new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。方法中的局部
变量使用 final 修饰后,放在堆中,而不是栈中
19.遍历链表 O(n),遍历红黑树 O(logN)
20.集合框架在这里插入图片描述
ArrayList (数组)
ArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数
组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数
组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进
行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。
Vector ( 数组实现、 线程同步)
Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一
个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,
访问它比访问 ArrayList 慢。
LinkList (链表)
LinkedList 是用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较
慢。另外,他还提供了 List 接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆
栈、队列和双向队列使用。

HashSet (Hash 表 )
哈希表边存放的是哈希值。HashSet 存储元素的顺序并不是按照存入时的顺序(和 List 显然不
同) 而是按照哈希值来存的所以取数据也是按照哈希值取得。元素的哈希值是通过元素的
hashcode 方法来获取的, HashSet 首先判断两个元素的哈希值,如果哈希值一样,接着会比较
equals 方法 如果 equls 结果为 true ,HashSet 就视为同一个元素。如果 equals 为 false 就不是
同一个元素。
哈希值相同 equals 为 false 的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相
同的元素放在一个哈希桶中)。也就是哈希一样的存一列HashSet 通过 hashCode 值来确定元素在内存中的位置。一个 hashCode 位置上可以存放多个元

TreeSet (二叉树)

  1. TreeSet()是使用二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增
    加一个对象都会进行排序,将对象插入的二叉树指定的位置。
  2. Integer 和 String 对象都可以进行默认的 TreeSet 排序,而自定义类的对象是不可以的,自
    己定义的类必须实现 Comparable 接口,并且覆写相应的 compareTo()函数,才可以正常使
    用。
  3. 在覆写 compare()函数时,要返回相应的值才能使 TreeSet 按照一定的规则来排序
  4. 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整
    数、零或正整数
    LinkHashSet ( HashSet+LinkedHashMap )
    对于 LinkedHashSet 而言,它继承与 HashSet、又基于 LinkedHashMap 来实现的。
    LinkedHashSet 底层使用 LinkedHashMap 来保存所有元素,它继承与 HashSet,其所有的方法
    操作上又与 HashSet 相同,因此 LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并
    通过传递一个标识参数,调用父类的构造器,底层构造一个 LinkedHashMap 来实现,在相关操
    作上与父类 HashSet 的操作相同,直接调用父类 HashSet 的方法即可

HashMap (数组+ 链表+ 红黑树)
HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快
的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null,允许多条记
录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导
致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使
HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。我们用下面这张图来介绍
HashMap 的结构。
21.在这里插入图片描述
22.
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

表格中文字对齐:
valign 的值 top(顶对齐) Middle(垂直居中) bottom(底对齐)

 <td valign="top"></td>

24.postgresql创建表时添加备注

CREATE TABLE 表名 (
	ID serial not null,-- 自增,循环
	router_ip VARCHAR (20),
	port VARCHAR (100),
	run_status VARCHAR (10),
	speed NUMERIC (20, 2),-- 总20位,保留两位小数
	manage_status VARCHAR (10)
);
comment on table 表名 is '表备注';
comment on column  表名.字段名 is '字段备注'

25.HTTP知多少——Content-disposition(文件下载)

String fileFullName = CommonParam.OSS_LINUX_FILE_PATH + fileName;
        File f = new File(fileFullName);
        // 设置下载文件名称,以下两种方式均可
        // String fileName = new String(image.getOldname().getBytes("UTF-8"), "iso-8859-1");
        String fName = URLEncoder.encode(f.getName(), "utf-8");

        HttpHeaders httpHeaders = new HttpHeaders();
        // 通知浏览器以下载文件方式打开
        ContentDisposition contentDisposition = ContentDisposition.builder("attachment").filename(fName).build();
        httpHeaders.setContentDisposition(contentDisposition);
        // application/octet_stream设置MIME为任意二进制数据
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        // 使用apache commons-io 里边的 FileUtils工具类
        // return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File(image.getLocation())),
        // httpHeaders, HttpStatus.OK);
        // 使用spring自带的工具类也可以 FileCopyUtils

26.for in 和 for of
`for in遍历的是数组的索引(即键名),而for of遍历的是数组元素值。
for-in总是得到对象的key或数组、字符串的下标。
for-of总是得到对象的value或数组、字符串的值,另外还可以用于遍历Map和Set。
27.字符串的值一旦被创建,就不能改变指的是字符串的内容不能发生改变。而不是字符串的引用不能发生改变。

 String str = "123";
 str = "234";
System.out.println(str);// 234
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值