1.比左边的数都小,比右边的数都大
public class Test3 {
/**
* 从左往右找当前位置往左最小的
* 从右往左遍历找当前位置往右最大的
* 比较
* @param args
*/
public static void main(String[] args) {
// int[] arr = new int[]{9,8,7,3,4,2,1};
int[] arr = new int[]{3,3,1};
int[] a = new int[arr.length];
int[] b= new int[arr.length];
findMiddle(arr,a,b);
int index=0;
for (int i : arr) {
if(index==0&&i>b[index]){
System.out.print(i+" ");
index++;
continue;
}
if(i<a[index]&&i>b[index]){
System.out.print(i+" ");
}
index++;
}
}
static void findMiddle(int[] arr,int[] a,int[] b) {
int min=arr[0]; int max=arr[arr.length-1];
for (int i=1;i<arr.length;i++){
if(min<arr[i-1]){
a[i]=min;
}else {
a[i]=arr[i-1];
min=arr[i-1];
}
}
System.out.println(Arrays.toString(a));
for (int i=arr.length-2;i>=0;i--){
if(max<arr[i+1]){
max=arr[i+1];
b[i]=arr[i+1];
}else{
b[i]=max;
}
}
System.out.println(Arrays.toString(b));
}
}
2.关闭一个网页,关闭了还能判断在线状态
关闭浏览器后再打开浏览器,cookie仍然记住了之前的session id,就可以自动登录。可以在后端设置session过期时间。
3.hash查找最坏时间复杂度是多少
在JDK1.8之前hashmap采用的是数组+链表的形式,查找效率是O(n)。jdk1.8开始采用数组+红黑树,查找效率是O(logn),链表长度大于8转成红黑树,红黑树节点个数小于6转成链表。
3.进程和线程、协程的区别?
- 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
- 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
- 调度和切换:线程上下文切换比进程上下文切换要快得多。
- 协程就是用户级线程,一个线程中的多个函数并发执行
4.僵尸进程、孤儿进程是什么意思?
僵尸进程:子进程运行完毕,父进程本应该回收父进程的资源,但是由于某些原因没有回收,这个时候就造成了僵尸进程。
孤儿进程:一个父进程结束,子进程还在运行,将子进程交给init进程。
6.mybatis常见的标签
where:在动态拼接时,去掉1==1的拼接,不然为null情况下,就不能判断sql加不加and了。
if:判断条件。select查询、parameterType映射的实体类,resulttype:sql返回结果映射的实体类
<select id="findByWhere" parameterType="com.qcbyjy.domain.User" resultType="com.qcbyjy.domain.User">
select * from user where 1 = 1
<if test="username != null and username != ''">
and username like #{username}
</if>
<if test="sex != null and sex != ''">
and sex = #{sex}
</if>
</select>
foreach标签:拼接or或者in ()语句
7.mybatis比直接写sql的好处?
- 相对灵活,将sql编写和Java程序分开,降低耦合度。
- 不需要手动控制开关连接,减少了代码复杂度。
- 使用xml动态编写sql可以重用。