1、get请求与post请求的区别
GET请求:
参数在URL中,传输不了太多数据,而且参数直接显示在网址上不安全,常用于查找数据;在浏览器回退时无害,能被Bookmark(收藏为书签),只接受ASCII字符作为参数,浏览器会自动缓存
POST请求:
参数包含在请求体中,对用户不可见,适合传输大量数据或敏感信息,常用于提交数据;浏览器回退时会再次提交请求,不能被Bookmark
二者本质上其实没有区别,都基于TCP/IP实现,对于GET方式的请求浏览器把header和data一起发送,对于POST请求浏览器先发header服务器相应100再发data,因此POST请求慢点
2、同步异步的区别
同步:同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。
异步:异步和同步是相对的,异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
同步就可以想成去实体店买东西,不给货一直等着;异步就像网购,订完就可以干别的去,不用一直等着;
3、什么是阻塞与非阻塞
阻塞和非阻塞是当进程在访问数据时,根据IO操作的就绪状态不同而采取的不同处理方式;比如主程序调用一个函数要读取一个文件的内容,阻塞方式下主程序会等到函数读取完再继续往下执行(挂起),非阻塞方式下,读取函数会立刻返回一个状态值给主程序,主程序不等待文件读取完就继续往下执行
4、软件的生命周期
1.需求分析阶段(Requirements Analysis)
开发团队收集和明确软件系统的需求,需求分析帮助确定系统功能、性能、界面等要求,为后续的设计和开发提供基础
2.设计阶段(Design)
开发团队根据需求分析结果,制定软件系统的架构、模块划分、数据结构和算法等;设计确保系统的可扩展性、可维护性和性能
3.开发阶段(Development)
程序员编写代码并实现设计中各个组件和功能
4.测试阶段(Testing)
软件经过不同类型的测试(单元测试、集成测试、系统测试、验收测试等),发现和修复软件中的缺陷,确保软件质量和稳定性
5.部署阶段(Deployment)
完成开发和测试的软件被部署到生产环境中,用户可以开始使用
6.运维和维护阶段(Operations and Maintenance)
在软件部署后,需要持续监控、管理和维护软件,确保软件正常运行,包括修复漏洞、更新功能、性能优化等
7.退役阶段(Retirement)
当软件不再使用或被替代时,软件被停止维护、卸载、替换
5、String、StringBuffer、StringBuilder的区别
String、StringBuffer和StringBuilder都是用来处理字符串的,都不可被继承(final)
String不可变,每次修改都会生成新的String对象,可以通过compareTo方法进行比较;
StringBuffer和StringBuilder可变,可以通过append、indert进行字符串的操作
StringBuffer线程安全,性能较低;StringBuilder线程不安全,性能较高
6、Mybatis $与#的区别
在 MyBatis 中,$ 和 # 都用于构建 SQL 查询语句中的参数替换
$:直接将参数的值拼接到SQL语句中,可能会导致SQL注入风险
#:将参数值作为占位符,在执行SQL之前进行预编译,能防止SQL注入
除了需要指定动态表明或order by动态参数时使用${},其他时候最好使用#{}
7、start()方法和run()方法的区别
使用start()方法来启动一个新线程并在线程上执行Runnable接口的run()方法的内容
直接调用run()方法会在当前线程上执行,不会创建新线程,run()方法必须在实现类中重写
8、http协议如何保证请求安全
选择拦截过滤器:
在请求的时候对请求方法进行一次拦截处理。比如非正常访问的方法已经注入插入可执行语句参数验证等在拦截中进行一次安全校验保证请求不是非法请求。
数据加密:用加密算法将某些敏感信息加密
签名:通过用户id或用户名创建token,后台获取http的head中的token,校验是否合法
第三方框架:如spring的框架中的oauth模块。
9、MySQL数据库表的连接方式有哪些
内连接(join):返回两个表中满足连接条件的行,不满足的不返回
左连接(left join):返回左边表中所有行和右边表中满足连接条件的行
右连接(right join):返回右边表中所有行和左边边表中满足连接条件的行
全外连接(full outer join):返回两个表中所有行
自连接(self join):将表与自身进行连接,常用于比较表中不同行之间的数据关系
交叉连接(cross join):返回两个表中所有可能的组合,不考虑连接条件
10、HashTable、HashMap、ConcurrentHashMap的区别
HashTable: 线程安全,但性能较差;不允许键或值为null值
HashMap: 非线程安全的,可以使用 Collections.synchronizedMap 方法将 HashMap 转换为线程安全的,默认下性能较好;允许键和值都为 null
ConcurrentHashMap: 线程安全,而且由于采用更细粒度的锁机制,性能比HashTable和使用synchronized的HashMap要好;允许键和值都为 null