本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 个人简介:微信公众号关注:SteveCode。为您分享更多的知识学术。生于忧患死于安乐
- 专注Java技术干货分享,Java基础技术、数据结构、相关工具、Spring全家桶、intellij idea......
select (case when a>b when a else b end) as 列名,(case when b>c whenb b else b end) as 列名 form 表名 ;
第一次面试:
“==” 判断的是地址值,equals()方法判断的是内容。
1. 如果两个对象equals相等,那么这两个对象的HashCode一定也相同
2. 如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置
基本数据类型: byte,short,char,int,long,float,double,boolean,比较他们的值
String类中被复写的equals()方法其实是比较两个字符串的内容
String s = "hello"; String s1 = "hello"; System.out.println(s==s1);//true 指向同一常量池
l ==:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
l equals():比较的是两个字符串的内容,属于内容比较。
当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的
值相同的对象,如果有就把它赋给当前引用。String 的 equals方法比较的是对象的值。
for(int i =0;i<list.size;i++){ sout(list.get(i)) } 先定义一个变量i ,i<list的大小,i++
for(类型 变量 : 需要遍历的集合){ sout(变量) }
例如: Iterator iterator = list.iterator(); while(iterator.hsahNext()){ sout(iterator.next()); }
public class MyList { public static void main(String[] args) { List list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("-------------------"); for (Integer i : list) { System.out.println(i); } System.out.println("--------------------"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }
public static class MyMapFor { public static void main(String[] args) { Map<Integer, String> map = new HashMap<>(); map.put(1, "song"); map.put(2, "xian"); map.put(3, "yang"); for (Integer integer : map.keySet()) { System.out.println(map.get(integer)); } for (Map.Entry<Integer, String> entry : map.entrySet()) { System.out.println(entry.getKey()+"值"+entry.getValue()); } Set<Map.Entry<Integer, String>> entries = map.entrySet(); Iterator<Map.Entry<Integer, String>> iterator = entries.iterator(); while (iterator.hasNext()) { Map.Entry<Integer, String> next = iterator.next(); System.out.println(next.getKey()+"value==="+next.getValue()); } for (Integer i : map.keySet()) { System.out.println(i); } for ( String s: map.values() ) { System.out.println(s); } } } 输出: song xian yang 1值song 2值xian 3值yang 1value===song 2value===xian 3value===yang 1 2 3 song xian yang
5、有一张表表名叫table 有abc三列,当a>b的时候选择a否则选择b,当b>c的选择b否则选择C用sql来实现
select (case when id > age then id else age end) as i, (case when age > number then age else number end) as o from t_values;
6、使用Spring boot中与mybatis实现一个关联查询。使用spring boot 和mybatis框架实现。
7、MySQL删除表操作(delete、truncate、drop的区别)
truncate清空表,重新建立一个新表、执行速度快;(自增变1)
delete可以实现表的部分数据删除,也可以直接删除表中的数据。(保留自增id)
delete from t_values where id=?; delete from table_name;
备份命令:MySQLdump -u 用户名 -p 表名 > 存放路径
mysqldump -u 用户名 -p --all-detabase > 存放路径
mysql -u root -p db1< D:\test.sql 登录MySQL系统: source D:\test.sql
第二次面试:
@Test public void SortedSetTest() { //存放数据 //jedis.lpush("collections", "1", "2", "3", "4", "5", "6", "7", "8", "9"); //获取所有元素 //System.out.println("collections的内容是:"+jedis.lrange("collections",0,-1)); //排序 SortingParams sortingParams = new SortingParams(); //System.out.println("排序后的结果:"+jedis.sort("collections",sortingParams.alpha())); System.out.println("升序后的结果:"+jedis.sort("collections",sortingParams.asc())); System.out.println("降序后的结果:"+jedis.sort("collections",sortingParams.desc())); }
@Transactional 注解放在控制层还是业务服务层?
最好是放在service层,因为改层主要是写业务,出现错误的时候可以回滚。而在这一层会去加载数据资源。
尽量不要放在collection层,因为该层主要是数据进行交互的。如在自己当前的项目中没有service,把大量的业务逻辑都写在collection层里,可以选择加这个@Transactional 注解
第三次面试 软通动力:
如果委托类被final修饰,那么它不可被继承,即不可被代理。如何这个委托类中有final修饰的方法,那么该方法也不可被代理。
| propagation_required | 如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。 |
|---|---|
| propagation_supports | 支持当前事务,如果没有当前事务,就以非事务方法执行。 |
| propagation_mandatory | 使用当前事务,如果没有当前事务,就抛出异常。 |
| propagation_required_new | 新建事务,如果当前存在事务,把当前事务挂起。 |
| propagation_not_supported | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
| propagation_never | 以非事务方式执行操作,如果当前事务存在则抛出异常。 |
| propagation_nested | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作 |
| 定义serviceA.methodA()以PROPAGATION_REQUIRED修饰;定义serviceB.methodB()以表格中三种方式修饰;methodA中调用methodB | |||
|---|---|---|---|
| 异常状态 | PROPAGATION_REQUIRES_NEW***(两个独立事务)*** | PROPAGATION_NESTED***(B的事务嵌套在A的事务中)*** | PROPAGATION_REQUIRED***(同一个事务)*** |
| methodA抛异常****methodB正常 | A回滚,B正常提交 | A与B一起回滚 | A与B一起回滚 |
| methodA正常****methodB抛异常 | 1.如果A中捕获B的异常,并没有继续向上抛异常,则B先回滚,A再正常提交;2.如果A未捕获B的异常,默认则会将B的异常向上抛,则B先回滚,A再回滚 | B先回滚,A再正常提交 | A与B一起回滚 |
| methodA抛异常****methodB抛异常 | B先回滚,A再回滚 | A与B一起回滚 | A与B一起回滚 |
| methodA正常****methodB正常 | B先提交,A再提交 | A与B一起提交 | A与B一起提交 |
hashmap数据结构是什么?多少长度的时候用红黑树?数组加链表什么情况下会产生hash冲突
Java1.8采用 数组加链表加红黑树。查询比1.7要快,但是插入删除比较慢。
链表长度为8的时候转为红黑树,当长度为8的时候,概率是:0.00000006。千万分之一的概率,通常情况下不会发生转换。什么时候会发生转换?改变hash算法的策略,实现不好的hashcode方法,就会转换。
在开发中如果内部要实现红黑树,说明有实现不好的hashcode方法。进行改正
默认容量为16 * 0.75的负载因子=12。扩容机制是二倍。
hash冲突:两个不同对象,拥有相同的hashCode(两个key的hash值相同)
www.cnblogs.com/xiaopotian/… 从main方法开始:@SpringBootApplication (是一个组合注解),SpringApplication.run @SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan @Configuration本身其实是一个loc容器的配置类,Javaconfig的配置类,配合@bean这个 注解,替代了spring中的xml配置的 @ComponentScan 作用:自动扫描i加载加载符合条件的组件(@Component,@service,等)最终将这些bean加载到springioc容器中。
4 、redis 主从复制机制有有了解吗?数据流向是什么样的?
zhuanlan.zhihu.com/p/112213386
一个主redis会有多个从的redis服务。主redis服务复制写,从redis负责读。
7. 尽量不要全表扫描,where 与order by 的列加上索引
8. 尽量避免在where语句后面有查询 null值判断,(导致放弃索引全表扫描)
9. 尽量不要在where语句后面是使用 or (导致放弃索引全表扫描)
使用 union 进行两个表的数据进行连接 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
一个表里可以建立多个索引,可以提高表的查询效率,索引越多,查询就越快。但是插入和修改就慢了点,因为插入修改都在不断地更新索引。
第4次面试:艾力泰尔
一个“.java”源代码中是否可以包括多个类 (不是内部类)?%有什么限制?
可以有包括多个类,但是只能有一个public来修饰的类,并且类名与文件名保持一致。
都是逻辑与的运算符,都是如果两边都是true的返回返回成功,如果有一方是false,结果就返回false。
&& 先判断第一个条件如果是false就直接返回false。否则,在判断第二个条件,若是true就返回成功。
语法上:静态变量需要加上static关键字修饰,实例变量不用。
程序运行时区别:实例变量,都是对象的属性,必须创建对象的实例,这样才会给他分配内存空间,才能使用该实例。
是否可以从一个static方法内部发出对非static方法的调用?
不可以,因为:static方法不用创建对象就可以调用。而非static方法必须由类的引用来调用,前提是已经创建了对象。如果在static中掉用非static方法,他不知道是那个对象的方法。就会报错。
方法属性上:sleep()是一个静态方法,wait()是一个实例方法。
作用域上:sleep()在Thread中,而wait()在Object类中。
唤醒方式:sleep()使用interrupt()方法,而wait()使用notify()或者notifyAll()来唤醒。
什么是java,如何实现java序列化?或者请解释Serialization接口的作用?
是什么线程死锁?如何避免线程死锁?如何加一个线程死锁检查机制?
多个线程竞争资源产生的一种僵局现象称为死锁。(线程A持有资源1,而线程B持有资源2,且他们都想获得对方的资源,产生了一种他们之间的相互等待现象)
有 两个表A与B,均有key和value两个字段,如果B的key在A中也有,就把B的value换成A中对应的value?写出Sql语句。
update b set b.value=(select a.value from a where a.key=b.key) where exists(select * from A c where b.key=c.key)
2-19北京浮点科技有限公司
类加载过程
先是一个Java文件 通过Javac编译一次成class二进制文件加载到内存。然后加载、连接【验证、准备、解析】、初始化。
验证:确保加载进来的字节流符合虚拟机的规范。不会造成安全错误。
准备:类变量分配内存,赋以初值。【基本数据类型,出值为:0,引用数据类型初值为null,final static tmp = 456, 那么该阶段tmp的初值就是456】
解析:常量池中的符号引用换成直接因引用的过程,【如果调用hello方法地址值为12345,调用hello方法称为符号引用,地址值123456称为直接引用。在解析阶段,虚拟机会把所有的类名,方法名,字段名这些符号引用替换为具体的内存地址或偏移量,也就是直接引用。】
如果初始化一个类的时候,其父类尚未初始化,则优先初始化其父类。
如果同时包含多个静态变量和静态代码块,则按照自上而下的顺序依次执行。
条件构造器,查询指定字段的值。他的父类是?
QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.select("指定字段"); userMapper.selsctList(queryWrapper);
顶级父类:wapper
Linux系统压缩包存在哪?那个命令
Java数据结构
Java中有几种常用的数据结构,主要分为Collection和map两个主要接口接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。
你对Java的理解。Java是用来做什么的。
在电脑上安装jdk,那么电脑就有了jre的Java的运行环境。 有了这个环境就可以运行Java程序了。
做服务端的开发,我们吧Java代码放在服务器上,服务器也就是Linux服务器
Ajax实现原理?
用户和服务器之间,加一个中间层(Ajax引擎),只有确定需要从服务器读取新数据时再由Ajax引擎向服务器提交请求。
2-20 艾融软件
分布式事务
消息事务--最终一致性:
所谓的消息事务就是基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊利用,它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功成功并且对外发消息成功,要么两者都失败,开源的RocketMQ就支持这一特性.
该方案采用最终一致的,牺牲了一致性,换来了性能的大幅度提升。存在造成数据不一致的风险
TCC模式 事务的一直性:
try commit Cancel 三个操作。例如:用户下单 ---- try(下单的代码) commit( 减库存的代码)如果减库存代码出错,就进入cancel (实现数据回滚)
kafka方面的知识:
消息中间件的一些知识:
2-20 艾融软件 复试:
索引方面:
索引失效七大场景:www.cnblogs.com/liehen2046/…
2-20 中国中医科学院:
21年10月13:国研软件
1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引
10月23号:
两个没有外键关系的表 使用join连接 打印几条数据?A表两条数据 B表两条数据
SELECT * from t_user INNER JOIN role_user on 1=1
SELECT * from t_user LEFT JOIN role_user on t_user.id=role_user.user_id WHERE t_user.id=1;
10月28号:
get与post区别
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《http请求中get和post方法的区别》,blog.csdn.net/phpwechat/a…
nacos与open服务之间的调用关系、服务注册到nacos里面的是什么
为什么要用多线程
可以提升系统处理速度, 代码相对简单 程序处理效率提高 zhuanlan.zhihu.com/p/30985073
线程的几种状态 之间的流程关系
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《Java线程的6种状态及切换(透彻讲解)》, 一起来围观吧 blog.csdn.net/pange1991/a…
分布式集群下如何做到唯一序列号:
用数据库来维护唯一id 用redis集群部署 生成唯一id 用Java中的UUID 用MySQL中的uuid zookeeper生成uuid mongodb生成id
什么是restful ?
rest是一种约束条件和设计原则 restful:是满足rest约束条件及原则的一种程序设计,基于http协议来传输数据 blog.csdn.net/fengdijiang… rpc与restful区别:blog.csdn.net/sinat_14826…
线上系统突然变得异常缓慢,你如何查找问题
逐级排查(网络,磁盘,内存,cpu),数据库,日志,中间件等也可通过监控工具排查