Web 细节汇总(1)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45505313/article/details/101099622

1. HTTP 与 RPC

首先 HTTP和 RPC 不是一个并行概念,只要是远程调用都可以叫 RPC,其调用协议通常包含传输协议和序列化协议,而 HTTP只是一种应用层网络传输协议。RPC 可以通过任何协议进行传输,如 HTTP协议,但通常采用自定义协议。它不关心数据传输的过程,只关心调用结果。

  • 使用方式差异
    • RPC 透明无感,像调用本地方法一样调用远程方法
    • HTTP 需要发请求,需要处理服务器响应,整个过程相对 RPC 而言是比较繁琐的
  • 传输效率
    • RPC 传输的数据量通常很少,一般只包括需要调用的 服务接口、接口方法、 方法参数,大多直接使用 socket 就行。socket 传输的是字节,没有多余的数据,也方便压缩,效率相对较高
    • HTTP 传输如果是基于 HTTP1.1 的协议,请求中会包含很多无用的内容,因此会消耗带宽资源以及服务器上的内存;如果是基于 HTTP2.0,那么简单封装一下可以作为一个RPC来使用

2. JDBC 中 PreparedStatement

JDBC 预编译的 PreparedStatement 设置参数是从下标 1 开始,而不是0

stringsql = "select * from people p where p.id = ? and p.name = ?";
PreparedStatement ps = connection.preparestatement(sql);
ps.setint(1,id); // 设置参数是从下标 1 开始
ps.setstring(2,name);

3. mybatis中#{}和${}的区别

  • #{}: 解析为一个 JDBC 预编译语句(PreparedStatement )的参数标记符,一个 #{ } 代表一个占位符 ,可预防大部分 SQL 注入
  • ${}: 纯粹的 String 拼接,在动态 SQL 解析阶段将会进行变量替换,当需要传入表名或者按照列排序时可使用

猜你喜欢

转载自blog.csdn.net/weixin_45505313/article/details/101099622
今日推荐