此贴收集 程序员的科技与狠活

2023年 10月 11日 63.7k 0

此贴一直收集,欢迎广大程序员们分享

一、代码书写上

1、表字段查询

1、where 11

可以直接用 select * from 表名 where 11查出字段。不用再拼接limit 1; top 1

2、表结构查询

不同的数据库查询表结构有不同的sql语句;但我们可以直接用:

Connection connection = DriverManager.getConnection(url, username, password);
DatabaseMetaData metaData = connection.getMetaData();
metaData.getColumns(...) // 获取字段
metaData.getIndexInfo(...) // 获取索引
metaData.getPrimaryKeys(...) // 获取主键

3、代码区块 region

通过在代码中加入region可以收缩代码块

// region
xxx代码
// endregion

4、查询数据库OOM

将一1000万条数据库记录(10GB)加载到内存中,加载到500多万条记录的时候,就报了OOM(内存不足)

在创建PreparedStatement时,resultSetType参数设置的是TYPE_SCROLL_INSENSITIVE或TYPE_SCROLL_SENSTIVE,这两个参数的共同特点是允许结果集(ResultSet)的游标可以上下移动。而默认的TYPE_FORWARD_ONLY参数只允许结果集的游标向下移动。

加载这么大量的数据到内存过程中,只是顺序读取每一条记录,TYPE_FORWARD_ONLY就够了,游标用不着前后移动,于是改为TYPE_FORWARD_ONLY就没报OOM了。

connection.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

参数 int type

  • ResultSet.TYPE_FORWORD_ONLY结果集的游标只能向下滚动。
  • ResultSet.TYPE_SCROLL_INSENSITIVE结果集的游标可以上下移动,当数据库变化时,当前结果集不变。
  • Result.TYPE_SCROLL_SENSITIVE返回可滚动的结果集,当数据库变化时,当前结果集同步改变。

参数 int concurrency

  • ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表。
  • ResultSet.CONCUR_UPDATETABLE能用结果集更新数据库中的表。

查询语句

  • ResultSet re = stmt.executeUpdate(sql);用来更新数据库信息或插入数据
  • ResultSet re = stmt.executeQuery(sql);用来查询数据库信息

当我们使用ResultSet re = stmt.executeQuery(sql)查询后,我们可以使用下列方法获取信息:


public void beforeFirst 将游标移动到结果集的初始位置,即在第一行之前。

public void afterLast() 将游标移到结果集最后一行之后。

public void first() 将游标移到结果集的第一行。

public void last() 将游标移到结果集的最后一行。

public boolean isAfterLast() 判断游标是否在最后一行之后。

public boolean isBeforeFirst() 判断游标是否在第一行之前。

public boolean ifFirst() 判断游标是否指向结果集的第一行。

public boolean isLast() 判断游标是否指向结果集的最后一行。

public int getRow() 得到当前游标所指向行的行号,行号从1开始,如果结果集没有行,返回0

public boolean absolute(int row) 将游标移到参数row指定的行号。如果row取负值,就是倒数的行数,absolute(-1)表示移到最后一行,absolute(-2)表示移到倒数第2行。当移动到第一行前面或最后一行的后面时,该方法返回false

不带参数使用的是默认值。你可以在建立Statement时指定resultSetType,可指定的参数有:ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE、ResultSet.TYPE_SCROLL_SENSITIVE、在不指定情况下,预设是第一个也就是只能使用next()来逐条获取行,指定第二个或第三个则可以使用ResultSet的afterLast()、previous()、absolute()、relative()等方法。

原文:blog.csdn.net/10km/articl…

5 一对多连表查询,根据不同类别对字段行转列

有这样的场景:一对多连表查询,根据group by进行分组;其中某个字段需要将多个值拼接成json或者数组。

select xxx, group_concat(
        CASE role
        WHEN "ADMIN" THEN
                user_id
        END
) AS user_id1,
group_concat(
        CASE role
        WHEN "MEMBER" THEN
                user_id
        END
) AS user_id2

6、表字段存在关键字

表字段存在关键字时,一般mybatis mapper直接查询会报错;只需要在@TableField中给字段加上`` 就可以

@TableField("`range`")

二、IDEA

1、快捷方式

1、sout、soutm, soutp, soutv直接出System.out.println

2、new 类().var 直接生成 : 类 instance = new new 类();

3、 使用 Shift+Enter 在当前行之后开始一个新行,使用 Ctrl+Alt+Enter 在当前行上方开始一个新行;

2、插件

mybatisX插件:

  • mapper and xml can jump back and forth
  • mybatis.xml,mapper.xml prompt
  • mapper and xml support auto prompt like jpa (reference MybatisCodeHelperPro)
  • integrate mybatis generator Gui (copy from free mybatis plugin)

Maven Helper插件:

  • easy way for analyzing and excluding conflicting dependencies
  • actions to run/debug maven goals for a module that contains the current file or on the root module
  • action to open terminal at the current maven module path
  • actions to run/debug the current test file.

3、打印调试

有没有习惯用System.out.println打印查看变量内容的,有IDEA有更方便的调试方式,并且不会入侵代码
官方内容如下:

image.png

4、条件断点

image.png

5、删帧

功能:当我们 Debug 从 A 方法进入 B 方法时,通过降帧(退帧)可以返回到调用 B 方法前,这样我们就可以再一次调用 B 方法。

通常用于当我们快执行完 B 方法后,发现某个重要流程被我们跳过了,想再看一下,则此时可以先回退到 A 方法,然后再次进入 B 方法。

我们知道方法的执行和结束在 JVM 中对应的是栈帧的入栈和出栈,因此栈帧描述的就是方法对应的模型,而降帧(退帧)则对应的就是回退到上一个方法。

image.png

6、多线程调试

image.png

7、方法断点

image.png

8、字段断点

image.png

9、异常断点

可以在抛出异常的地方进行暂停,而无需在具体的代码中打断点。

image.png

10、主动抛异常

在项目运行过程中,特别是想在远程环境抛出异常,需要修改代码重新部署,测试完后还要修改回来再次部署,很不方便。而 Throw Exception 则可以直接抛出一个异常,避免了这些繁琐的流程。

image.png

11、强制返回

强制结束当前流程,直接返回

场景:当我们继续往下执行时就要将错误数据插入数据库时,就可以用强制返回结束当前流程

image.png

12、Stream 调试(Trace Current Stream Chain)

功能:当我们暂停在 Stream 的处理代码行时,可以将 Stream 的整个处理流程以图形化界面的形式展示。

当我们发现问题出在 Stream 的处理流程中时,我们可以通过该功能来看到每个步骤处理前和处理后的数据,方便我们定位排查是哪一步出了问题。

image.png

13、执行表达式(Evaluate Expression)

功能:执行一段代码而无需重启项目

当我们在测试时,发现某段代码逻辑很难有符合条件的数据时,可以通过该功能直接修改数据,来加快我们的测试。

该功能非常强大,我们可以在这边执行任何逻辑,举个例子:可以将数据保存到数据库、可以发送一个RPC请求等等。

image.png

14、远程调试(Remote JVM Debug)

功能:调试部署在远程服务器上的代码。

远程调试最常见的使用场景是排查线上问题。

image.png

远程调试使用教程:

不同版本的远程debug所需参数不同,通过IDEA可以看到不同版本对应参数

image.png

配置方式:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8081 -jar jdk17demo-0.0.1-SNAPSHOT.jar

下面在本地演示一下:

本地启动一个简单的项目:

image.png

remote JVM debug 监听8081端口

image.png

发送Get请求

image.png

请求会进入IDEA,然后我们就可以去debug了

image.png

三、前端

1、调试

前端调试代码可以直接在代码中加入debugger

2、清除浏览器缓存

F12将控制台打开,然后鼠标右键点击页面刷新按钮,会出现清除缓存功能

image.png

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论