Linux X-Window Error: Can‘t open display: :0

2023-05-16

问题过程描述

许多经常部署Oracle数据的管理员经常需要对数据库软件进行部署,但大多数都是通过远程部署的方式进行部署,使用远程部署有两种方式,一种是通过脚本部署,另一种就是通过图形化进行部署。

但linux使用图形化并不像windows那么一帆风顺,这也是由于对linux图形的不了解造成。一般连接过程是通常是用putty或xshell等ssh远程客户端连接到服务器,本地电脑运行一个支持X Server协议应用,利用ssh加密隧道将图形界面传送到本地电脑X Server上使用图形化界面,这样就可以看到服务器的图形界面。

但大多数时候却显示下面错误:

  • 不能打开 display
    1
    [user@pc ~]$ xclock
    Error: Can't open display:
    
    2
    [user@pc ~]$ xclock
    No protocol specified
    Error: Can't open display: :0												
    
    3
    [user@pc ~]$ xclock
    Error: Can't open display: localhost:10.0									
    

那么这个display到底要怎么解决呢?

X-Window

要理解display还是要了解什么是x-windows,网上也有很多文章说的很详细,这里我重点是讲解怎么去排查和解决这个问题。先了解一下基本信息。

1. Xserver和Xclinet

Xserver提供基础硬件环境,如配置键盘、鼠标、显卡、显示器驱动等。
Xclinet进行图形运算,如gimp、火狐这些应用属于客户端。
可以简单的这样理解,Xserver如同我们的操作系统一样,将基础的硬件资源初始化,如cpu内存这些,xclinet在操作系统上使用cpu和内存.

2. 连接方式

这里的连接方式有两种,一种是直接连接,另一种是利用ssh进行转发

1). 直接访问

直接访问就是X客户端直接进行访问X服务端进行连接传输。这里也分两种场景,一种是X客户端主动连接X服务端,这就要求X服务端进行监听,另一种X服务器去主动连接。

想要X客户端连接X服务端,X服务端可通过下面几种方式进行监听:

  • tcp
    表示使用IP`v4或IPv6的TCP协议,
  • inet
    表示只使用IPv4的TCP协议
  • inet6
    表示只使用IPv6的TCP协议
  • unix
    UNIX主机套接字,使用socket文件实现进程间通信,不支持在windows上进行访问

本机一般使用UNIX套接字进行通信,在设备上同时部署X服务端和X客户端,启动图形桌面时,X服务器先初始化相关硬件设备,并加载驱动,具体日志可参考X启动日志:/var/log/Xorg.0.log,Xserver启动时创建socket文件,窗口管理器则以X客户端启动,xclient连接到socket进行通信,这时现实屏幕就显示出画面。

使用套接字好处是连接安全、传输高效稳定,缺点是只能在本机进行访问。

查看X服务端socket文件位置和连接情况

[user@pc ~]$ ss -xla|grep X11
Netid State  Recv-Q Send-Q                                  Local Address:Port   Peer Address:Port  Process
u_str LISTEN 0      4096                                /tmp/.X11-unix/X0 15212             * 0            
u_str LISTEN 0      4096                               @/tmp/.X11-unix/X0 15211             * 0            
u_str ESTAB  0      0                                  @/tmp/.X11-unix/X0 24473             * 22233        
u_str ESTAB  0      0                                  @/tmp/.X11-unix/X0 89299             * 86989
……

远程环境下我们需要将远端画面传输到本地,就需要使用网络远程连接,Windows环境下可以使用Xmanage相关软件完成本地监听。linux环境下Xserver默认不进行监听,所以需要在启动Xserver加入选项-listen tcp,这时X服务根据启动的显示编号监听相关端口,如:0则监听6000端口,:1监听6001端口。
不管是windows还是linux在配置X服务端时需要配置这个displaynumb(显示编号),X客户端才可将画面传过来。

Linux查看X服务器监听状态
这里使用的是Xephyr,它的功能与X类似,它可以在图形模式下运行,而X只能在文本模式下运行。
X默认监听模式
-nolisten tcp,此选项表示不监听tcp协议,即监听unix套接字。

[user@pc ~]$ sudo ss -atlp
State	Recv-Q	Send-Q	Local Address:Port	Peer Address:Port	Process                                                        
LISTEN	0		4096	0.0.0.0:6001		0.0.0.0:*			users:(("Xephyr",pid=15335,fd=5))

XDMCP:还有一种模式不常用到,那就是使用X服务器去主动连接,这种方式的效果和Windows远程桌面类似。但X客户端本身不会监听端口,这时就需要使用显示管理器进行监听,显示管理器使用的是XDMCP协议进行通信,通常监听端口为177,现在主流的显示管理器有gdm、LightDM、LXDM、SDDM,这些显示管理器为了安全一般没有对177端口进行监听,需要根据文档具体配置开启监听功能。

[user@pc ~]$ sudo ss -lunp
State  Recv-Q Send-Q	Local Address:Port    Peer Address:Port	Process
UNCONN 0      0			 *:177                *:*				users:(("gdm3",pid=364775,fd=12))

提示:
除了开启监听外,大多数故障可能来之放火墙未放通相应服务端口。

这时在启动本端X服务端时,XDMCP协议可以使用三种方式连接远端图形界面。

  1. IP地址直接访问
    使用windows端X服务器软件时,软件会询问你远端主机的IP地址,使用LInux端时加入参数-query后面跟远端主机IP地址或主机名;
    具体访问过程是X客户端连接远端主机显示管理器端口177建立连接,显示管理器配置相关显示环境变量,再启动登陆管理器,这时你的X服务端就能显示远端的登陆界面。
    这种模式适用与点对点,跨三层网络。
  2. 广播地址泛访问
    使用广播时X服务端发起本地广播,当显示管理器收到广播包就像X服务端回包,这个模式和DHCP类似,好处是不用填写目标主机的IP,不好的地方就是X服务端只响应第一个回复的主机。
  3. 主机间接访问
    这个用于间接访问,A主机不能直接访问C主机,A就使用B主机间接访问C主机。

XDMCP没有使用压缩和优化传输算法,流量带宽占用较大,一般只在本地网络中进行使用。

2)SSH转发

X windows在传输时没有进行加密,安全得不到保障,还需要配置相关策略才可进行访问,而是用SSH转发X windows就可以解决刚刚讲的问题。SSH转发的原理是SSH本地监听unix套接字,显示编号为:10,X客户端访问:10时ssh服务端将流量转发到ssh连接客户端上。

这里需要配置sshd服务开启X转发功能,而ssh客户端也需要配置将转发过来的数据交給谁处理。

开启SSHD X转发
修改SSHD配置文件/etc/ssh/sshd_config,找到下面按需求取消注释进行启用

#开启X图形转发。yes开启转发,no关闭转发。
X11Forwarding yes
#设置显示编号,从10开始。当第一个用户连接使用10,第二个用户则11,以此类推。
X11DisplayOffset 10
#设置SSHD本地监听方式,yes使用unix套接字,no使用网络模式。
X11UseLocalhost yes

客户端开启X转发
ssh客户端开启的前提条件是本地已经启动了X服务端,ssh连接客户端启一个连接桥梁的作用,ssh客户端开启后将sshd服务的图形流量转发到本地X服务端上,ssh客户端可以是Putty、Xshell、SecureCRT等,开启方式是修改会话的X转发功能,将复选框打上勾就完成功能开启。

LInux的ssh客户端可以在连接时加入参数-X表示开启转发,如ssh -X username@hostname。也可修改全局配置文件/etc/ssh/ssh_config或用户配置文件~/.ssh/config加入配置参数:ForwardX11 no开启转发功能

提示
ssh客户端和ssh服务但都启用X转发的功能后,ssh客户端在登陆到远程端时会自动配置DISPLAY的环境变量,并且会协商auth的sookit值。

3. 安全认证

X服务端在开放监听时,X客户端只要知道X服务端的显示编号就能在X服务端进行显示,但这就存在一个不安全的因素,其他用户或主机知道X服务的显示标号也可将自己的内容显示到X服务端,那这个X服务端可能就会像windows弹窗广告一样,满屏幕都是其他人的X客户端,为了避免这个问题X服务端开启了安全认证。

X WIndows在以前使用使用的是xhost命令来管理授权,现在则推荐另外一个命令完成认证:xauth.

1). xhost

xhost的使用方法很简单,+表示关闭访问控制,- 表示开启访问控制,默认是所有主机都不信任。
开启验证模式后,只允许xhoost允许的主机进行连接和用户的.Xauthority文件中有Xserver的cookie条目的用户连接。

# 查看现在信任主机清单
xhost
————————————————————————————————————————————————————————————————
INET:220.181.38.148     (no nameserver response within 5 seconds)
INET:39.156.69.79       (no nameserver response within 5 seconds)


# 关闭访问控制,允许所有主机进行访问(不推荐)
xhost +
————————————————————————————————————————————————————————————————
access control disabled, clients can connect from any host

# 开启访问控制
xhost -
————————————————————————————————————————————————————————————————
access control enabled, only authorized clients can connect


# 信任某台主机
xhost 192.168.1.1
————————————————————————————————————————————————————————————————
192.168.1.1 being added to access control list

# 信任某个网段
xhost 192.168.1.0
————————————————————————————————————————————————————————————————
192.168.1.0 being added to access control list

# 移除信任主机
xhost -192.168.1.1
————————————————————————————————————————————————————————————————
192.168.1.1 being removed from access control list

2). xauth

xhost控制的方式简单粗暴,xauth则是根据cookie值进行验证的,X服务端和用户各自拥有各自的cookie文件,X客户端连接时会获取用户的cookie值,再将用户的cockie发送给X服务器,X服务器会对比客户端发来的cookie值和自身是否条目中是否匹配,只有匹配时才可连接。
查看用户auth文件路径信息

xauth文件路径是根据用户环境变量:XAUTHORITY来决定,如果未配置XAUTHORITY环境变量,默认存放路径在:$HOME/.Xauthority
.Xauthority 文件是有脚本startx生成的。

xauth -info
———————————————————————————————————————————
Authority file:       /home/user/.Xauthority
File new:             no
File locked:          no
Number of entries:    1
Changes honored:      yes
Changes made:         no
Current input:        (argv):1

查看X服务端xauth路径

ps -aux | grep X
———————————————————————————————————————————
root	596  1.3  0.8 1097120 136228 tty1   Ssl+ Oct23  18:45 /usr/lib/Xorg :0 -nolisten tcp -auth /var/lib/xdm/authdir/authfiles/A:0-H7d7G9

查看cookie条目值

# 查看当前用户cookie条目值
xauth list
————————————————————————————————————————————
pc/unix:0  MIT-MAGIC-COOKIE-1  87ff7969963f5bd8953094d4ab106f5


# 查看X服务端cookie值(普通用户无权访问该文件)
xauth -f /var/lib/xdm/authdir/authfiles/A:0-H7d7G9 list
————————————————————————————————————————————
#ffff##:  MIT-MAGIC-COOKIE-1  87ff7969963f5bd8953094d4ab106f5

这里可以发现用户端的cookie值与X服务端的一致;当不一致时就会发生不能显示错误。

cookie的生成

cookie是使用mcookie命令生成的,命令很简单,只需要输入该命令,就打印一个cookie直

$ mcookie
84bb129ea77405217b1802d15c42441f

排除故障

1. 确定问题

由上面内容知道Xwindows是如何连接的,掌握了上面知识就可以对问题进行定位。

A:确定自己的连接方式

SSH远程连接

远程端
本地端
xauth认证
xauth认证
X转发
SSH隧道
sshd监听
X客户端1
X客户端2
SSHD服务端
X服务端
SSH客户端

直接连接

这种场景常发生在同台主机上使用A帐号能正常使用,切换到B账户无法访问图形。

用户B
X服务端
用户A
OK
can't open
X客户端2
xauth文件
xauth文件
X服务端
xauth文件
X客户端1

B: 逐步排查故障

  • 检查X服务端
    不管是转发还是直接连接,第一步先应检查本地X服务端启动是否正常。
    Linux先确定X服务启动方式是tcp还是unix,再根据相应的命令检查是否正常监听
    Windows检查相关X服务是否安装并运行正常

  • 检查连接配置
    这步主要针对ssh转发,远程端要检查SSHD配置文件是否配置正常,本地端检查是否启用X转发选项,一些SSH客户端配置完毕后需要重新连接到远程端。

  • 检查防火墙配置
    如果使用tcp方式进行访问,要多次检查防火墙规则策略,或两个设备之间的安全设备策略。

  • 检远程端用户环境变量
    检查远端用户变量DISPAY是否配置,如果未配置,X客户端将不知道将图像传送至什么地方。

  • 检查xauth认证
    先核查用户xauth文件是否存储,再检查用户xauth与X服务端是否有匹配的sookie,如果没有需要即使进行添加。

2. 对症下药

2.1 DISPLAY配置

DISPLAY是X客户端连接到X服务端的重要依据,通常以 主机名+显示编号+显示器组合方式进行配置,如下:

# 192.168.1.1主机上的0号显示的0好2显示器
export DISPLAY=192.168.1.1:0.0

参数解读
>export: 表示将DISPLAY这个变量设置到系统环境变量中(仅本次登陆有效)
DISPLAY: 表示环境变量名称,等于符号后面的内容为变量值,查看DISPLA的命令为:echo $DISPLAY
192.168.1.1: 表示X服务端地址,可以使用主机名或IP地址或域名进行表示
:0.0: 表示连接192.168.1.1这台主机的第0号X服务端,后面的.0表示这个X服务端的第0块显示器,相当于一个X服务端可以有多块显示器,在这里进行指定显示。如果使用unix可以不要填写主机名。

所以要想编写DISPLAY的配置,前提条件是知道X服务端相关信息,下面给出常用的DISPLAY配置参考:

# X服务运行在本地主机上。使用unix进行监听
export DISPLAY=:0
# SSH登陆远端主机并已开启ssh转发,ssh本地X转发为unix:10
export DISPLAY=localhost:10.0
# 将当前用户的显示都传到192.168.1.1的5号Xserver上
export DISPLAY=192.168.1.1:5

2.2 xauth认证配置

很多报错用户的xauth有没有认证有关,

  1. xauth文件不存在
    使用下面命令查看文件是否存在:

    xauth info
    ———————————————————————————————————————————
    xauth:  file /root/.Xauthority does not exist   <-文件不存在
    Authority file:       /root/.Xauthority
    File new:             yes
    File locked:          no
    Number of entries:    0
    Changes honored:      yes
    Changes made:         no
    Current input:        (argv):1
    

    如果报错信息如上显示,可以创建xauth文件,创建前需要收集目标X服务端的cookie值,收集方式如下,第一步获取X服务的验证文件路径,本次测试路径为:/var/lib/xdm/authdir/authfiles/A:0-H7d7G9,得到后使用root权限执行下面命令。

    xauth -f  /var/lib/xdm/authdir/authfiles/A:0-H7d7G9 list
    #ffff##:  MIT-MAGIC-COOKIE-1  87ff7969963f5bd8953094d4ab106f50
    

    这样我们就得到了X服务的sookit值:87ff7969963f5bd8953094d4ab106f50,假设本次X客户端和服务端再同一台设备上,连接方式使用直接连接unix:0,我们就是使用下面命令创建用户xauth认证文件。

     xauth add localhost:/unix:0 . 87ff7969963f5bd8953094d4ab106f50
    

    参数讲解
    add 表示创建sookit条目
    localhost:/unix:0: 表示主机名为:localhost,连接到0号X服务端,使用unix进行连接
    . : 表示使用MIT-MAGIC-COOKIE-1进行认证
    87ff7969963f5bd8953094d4ab106f50: cookie的值

    再使用xauth -list就可以到刚创好的条目值

  2. 除了在X客户端的用户环境可以添加也可以使用下面命令自动生成,其中hoastname修改成你自己的主机名称。这样添加的cookie还需要添加到X服务端的认证文件上。

     xauth add hostname:0 . `mcookie`
    
  3. 使用xhost(不推荐)
    大多数教程的方法是将认证控制关闭,xauth认证的前提也是xhost认证功能是开启的,检查xhost开启状态。

    xhost
    ———————————————————————————————————————————
    #开启显示下面信息
    access control enabled, only authorized clients can connect
    #关闭显示下面信息
    access control disabled, clients can connect from any host
    

    开启和关闭方法请参考本文xhost

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux X-Window Error: Can‘t open display: :0 的相关文章

  • 当存在点和下划线时,使用 sed 搜索并替换

    我该如何更换foo with foo sed 只需运行 sed s foo foo g file php 不起作用 逃离 sed s foo foo g file php Example cat test txt foo bar sed s
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • 如何真正释放 Linux 中的大页面以供新进程使用?

    真的找不到太多关于此的信息 希望有人可以提供帮助 我正在假脱机使用 100GB java 堆作为大数据缓存 为了避免与文件系统缓存等内容发生冲突 并且因为它通常性能更好 我将其分配在大页面中 我保留了 51 200 x 2MB 大页面 一切
  • 在Linux伪终端中执行从一个终端发送到另一个终端的字符串

    假设我有一个终端 其中 tty 的输出是 dev pts 2 我想从另一个终端向第一个终端发送命令并执行它 使用 echo ls gt dev pts 2 仅在第一个终端中打印 ls 有没有办法执行字符串 不 终端不执行命令 它们只是数据的
  • 如何“grep”连续流?

    可以用吗grep在连续的流中 我的意思是有点tail f
  • Snap-confine 具有提升的权限,并且不受限制,但应该受到限制。拒绝继续避免权限升级攻击

    我已经使用 snap 一段时间了 但最近升级后 当我尝试打开任何应用程序时 出现此错误 Snap confine has elevated permissions and is not confined but should be Refu
  • 从 Linux 命令行发送 SNMP 陷阱消息

    Folks 我需要从 Linux 命令行使用此命令 snmptrap 将自定义消息发送到陷阱侦听器 我需要根据用户设置在 v1 和 v2c 中发送相同的消息 这是我发现的 For v1 snmptrap v 1 c Tas hostname
  • 如何删除树莓派的相机预览

    我在我的 raspberryPi 上安装了 SimpleCv 并安装了用于使用相机板的驱动程序 uv4l 驱动程序 现在我想使用它 当我在 simpleCV shell Camera 0 getImage save foo jpg 上键入时
  • jpackage linux 创建的桌面文件不足

    我刚刚开始使用 jpackage 它是一个非常棒的工具 只要迈出一步 我的肩上的工作就减轻了很多 我对看起来硬编码且无法定制的东西越感到惊讶 JPackage 自动生成启动器 lib
  • 我在哪里可以学习如何使 C++ 程序与操作系统 (Linux) 交互

    我是一个 C 初学者 我想创建与操作系统交互的小程序 使用 Kubuntu Linux 到目前为止 我还没有找到任何教程或手册来让 C 与操作系统交互 在 PHP 中 我可以使用命令 exec 或反引号运算符来启动通常在控制台中执行的命令
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • 原生 Linux 应用程序可像 ResHacker 一样编辑 Win32 PE

    我想运行自动修改 dll服务 用户提交特定的 dll 我在服务器上修改它 然后用户可以下载 dll的修改版本 是否有任何本机 Linux 应用程序提供常见的 Win32 PE 修改功能 例如图标 字符串 加速器 对话等 至少提供命令行或脚本
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程
  • 如何阅读shell命令的源代码?

    我想阅读编写linux命令的实际源代码 我已经获得了一些使用它们的经验 现在我认为是时候与我的机器进行更深层次的交互了 我在这里找到了一些命令http directory fsf org wiki GNU http directory fs
  • WPF 窗口关闭后不会释放内存

    我创建了一个测试代码 private void Application Startup 1 object sender StartupEventArgs e ShutdownMode System Windows ShutdownMode
  • sqlite 插入需要很长时间

    我正在将不到 200 000 行插入到 sqlite 数据库表中 我只是在终端中通过 sqlite3 使用一个非常简单的 sql 文件 我打赌它已经运行了至少 30 分钟 这是正常现象还是我应该关闭该过程并尝试不同的方法 sqlite中的插
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如

随机推荐

  • Android ViewStub

    1 ViewStub ViewStub是一个可用于性能优化的控件 xff0c 它是一个不可见的 零尺寸的View xff0c 可以在运行时进行延迟加载一个布局文件 xff0c 从而提高显示速率 viewstub和include比较像 xff
  • Android Jetpack—LiveData和数据倒灌

    1 LiveData LiveData是Android Jetpack包提供的一种可观察的数据存储器类 xff0c 它可以通过添加观察者被其他组件观察其变更 不同于普通的观察者 xff0c LiveData最重要的特征是它具有生命周期感知能
  • Gradle build 报错:Received status code 400 from server: Bad Request

    全部错误是这样的 xff1a Could not GET 39 https dl google com dl android maven2 com android tools build gradle 3 1 2 gradle 3 1 2
  • 排列组合详解

    在笔试题中看到的一个选择题 用1 3的瓷砖密铺3 20的地板有几种方式 xff1f 排列组合问题 排列和组合问题 xff0c 其实是两种问题 xff0c 区分它们的原则是是否需要考虑顺序的不同 排列问题 xff0c 考虑顺序 xff1b 组
  • SCKKRS-关键词、关键短语提取

    1 简介 SCKKRS Self supervised Contextual Keyword and Keyphrase Retrieval with Self Labelling 本文根据2019年 Self supervised Con
  • kali安装vnc

    一 安装x11vnc 1 经过N多次的实验 xff0c kali一直报错 xff0c tightvncserver一直报错 怎么配置都是黑屏 xff0c 奔溃 最后退而求其次 xff0c 安装x11vnc 2 很简单的命令 sudo apt
  • 计算机硬件技术基础第一章总结

    1 1 计算机发展概述 1 1 1 计算机的发展简史 第一台计算机 xff1a ENIAC 第一代 xff1a 电子管数字计算机 xff08 1946 1958 xff09 逻辑元件 xff1a 真空电子管体积大 xff0c 功耗高 xff
  • CentOS7安装Oracle JDK1.8

    JDK1 8下载地址 https www oracle com java technologies javase javase8 archive downloads html 需要登录之后才能下载文件 xff0c 下载jdk 8u202 l
  • Ubuntu 16.04 安装 rtl8812au系列 (DWA-182) wireless adapter driver

    Ubuntu 16 04 安装 rtl8812au系列 DWA 182 wireless adapter driver 刚刚开始使用Linux xff0c 一脸懵逼 xff0c 命令行搞得一愣一愣的 xff0c 不过熟悉了之后就好很多了 一
  • SpringBoot项目启动失败报错Annotation-specified bean name ‘xx‘ for bean class [xxx] conflicts with existing

    问题描述 xff1a 项目启动就会报 xff1a Annotation specified bean name xx for bean class xxx conflicts with existing non compatible bea
  • Visual Studio高效实用的扩展工具、插件

    说明 xff1a 对一个有想法的程序员来说 xff0c 善于使用一款高效的开发工具是很重要的 xff0c 今天给大家介绍的是宇宙第一IDE vs用起来很不错的开发工具 xff0c 假如大家觉得不错也可以尝试的用用 xff0c 毕竟对于我们这
  • java琐事

    并发编程 并发的意义 并发通常是提高运行在单处理器上的程序的性能 如果程序中的某个任务因为该程序控制范围之外的某些条件 I O 而导致不能继续执行 xff0c 那么这个任务或线程就阻塞了 如果没有并发 xff0c 整个程序都讲停下来 从性能
  • java类的初始化和实例化的初始化(类的初始化过程)

    Java类的加载顺序 父类静态代变量 父类静态代码块 子类静态变量 子类静态代码块 父类非静态变量 xff08 父类实例成员变量 xff09 父类构造函数 子类非静态变量 xff08 子类实例成员变量 xff09 子类构造函数 上面的说法也
  • 最优吞吐量和最短停顿时间

    在实践活动中 xff0c 我们通过最优吞吐量和最短停顿时间来评价jvm系统的性能 吞吐量越高算法越好 暂停时间越短算法越好 首先让我们来明确垃圾收集 GC 中的两个术语 吞吐量 throughput 和暂停时间 pause times JV
  • sql执行慢的原因有哪些,如何进行sql优化?

    一 导致SQL执行慢的原因 1 硬件问题 如网络速度慢 xff0c 内存不足 xff0c I O吞吐量小 xff0c 磁盘空间满了等 2 没有索引或者索引失效 xff08 一般在互联网公司 xff0c DBA会在半夜把表锁了 xff0c 重
  • 阿里java开发手册2019年最新版619(华山版)PDF下载

    链接 https pan baidu com s 1ANvBu1hidnvRCZILDGXuQA 密码 ugq8
  • Mockito:org.mockito.exceptions.misusing.InvalidUseOfMatchersException

    org span class token punctuation span mockito span class token punctuation span exceptions span class token punctuation
  • 一个简单通用的基于java反射实现pojo转为fastjson对象的方法

    最近在公司工作需要实现一个工具实现一个pojo转为fastjson对象的通用工具 xff0c 直接上源码 span class token comment 通用的pojo转为Json对象的方法 64 author ZFX 64 date20
  • Java魔法类:Unsafe应用解析

    这个美团大神对于Unsafe的分析很全面 https tech meituan com 2019 02 14 talk about java magic class unsafe html
  • Linux X-Window Error: Can‘t open display: :0

    问题过程描述 许多经常部署Oracle数据的管理员经常需要对数据库软件进行部署 xff0c 但大多数都是通过远程部署的方式进行部署 xff0c 使用远程部署有两种方式 xff0c 一种是通过脚本部署 xff0c 另一种就是通过图形化进行部署