python里怎么样监控鼠标按下的是左键还是右键

我写了一个监控鼠标事件的代码,我想监控鼠标的左右按键,当我按下左键或者右键时输出并且记录下来,
但是我的这段代码好像只能对右键反应,而且点击左键的输出一样,这是哪里出问题了,希望大佬帮我看看,谢谢
对了,我的需求很简单,就是实时监控鼠标左右键,按下键时记录下来保存为npy数据。不用监控鼠标坐标

from pynput import mouse
from pynput.mouse import Button, Controller
import numpy as np
right=[]
left=[]
no=[]
mouse_out=[]
def on_move(x, y):
   print('Pointer moved to {0}'.format((x, y)))

def on_click(x, y, button, pressed):
   right_data=[]
   left_data=[]
   no=[]

   if Button.right:
      right_data = [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
      #print('{0} at {1}'.format(
         #'Pressed' if pressed else 'Released',(x, y)))
      #print("右键",right_data)
   elif button == Button.left:
      left_data = [0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
      print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x, y)))
      print("左键",left_data)
   if not pressed:
      no=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
   return right_data,left_data,no
   # Stop listener

def on_scroll(x, y, dx, dy):
   print('Scrolled {0} at {1}'.format(
      'down' if dy < 0 else 'up',(x, y)))

# Collect events until released

with mouse.Listener(on_click=on_click) as listener:
   listener.join()
#print(right_data)
#np.save(r'C:\Users\Administrator\Desktop\ckpt_dir\mouse_data',right_data)

1个回答

我研究了几个小时,拿别人的一个源码改了一下,基本实现实时监控鼠标左右键的点击了,但是还是有问题,第一就是太占内存了,把鼠标坐标检测打开,CPU占用70,内存60.希望有大佬能优化一下,哈哈哈
第二就是监控不知道是有错误,还是我的代码有错误,左键数值会变化,正常的是1,但是有时候会变成0,加了线程锁都没用。而且右键不是每次点击都会检测到,原因也不知道,发现自己啥也不知道。。

import threading
from pynput.mouse import Button, Listener, Controller
from pynput import keyboard
import time
import numpy as np

# 记录操作指令
# 左键
shoot = 0
# 右键
scope = 1
# 
status = 1
mouse_out=[]

# 鼠标控制器
controller = Controller()
lock=threading.Lock()

"""
鼠标事件
"""
def mouse_click(x, y, button, pressed):
    global shoot
    global scope
    if pressed:
        # 点击右键
        if button == Button.right:
            scope = 0
        # 点击左键
        if button == Button.left:
            shoot = 1
    # 
    if not pressed and button == Button.left:
        shoot = 0

# 监控鼠标位置
def mouse_move(x, y):
    print(x, y)

"""
键盘事件
"""
# def keyboard_release(key):
#     global status
#     if key == keyboard.Key.backspace:
#         # 
#         status = -status
"""
监听事件方法
"""
def mouseListener():
    with Listener(on_click=mouse_click) as listener:
        listener.join()

# def keyboardListener():
#     with keyboard.Listener(
#             on_release=keyboard_release) as listener:
#         listener.join()

def main():
    threading._start_new_thread(mouseListener, ()) 
    #threading._start_new_thread(keyboardListener, 
    while 1:
    # 循环监听各状态并控制鼠标
        global shoot
        global scope
        global status
        #shoot=0
        scope = -1
        #status =1
        if shoot == 1:
            lock.acquire()
            time.sleep(0.2)
            controller.move(0, +15)
            mouse_out.append([shoot])
            np.save(r'C:\Users\Administrator\Desktop\ckpt_dir\mouse_out',mouse_out)
            print('左键',shoot)
            lock.release()
        elif scope == 0:
            time.sleep(0.2)
            controller.move(0, +25)
            mouse_out.append([scope])
            np.save(r'C:\Users\Administrator\Desktop\ckpt_dir\mouse_out',mouse_out)
            print('右键',scope)

if __name__ == '__main__':
    main()
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
(win7/win10系统下) python 如何实现后台点击鼠标左键?
import win32gui import win32api import win32con if __name__ == '__main__': p1 = (30, 255) handle = win32gui.FindWindow(None, '计算器') rect = win32gui.GetWindowRect(handle) win32api.SetCursorPos((rect[0] + p1[0], rect[1] + p1[1])) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # ------------------------------------- import win32gui import win32api import win32con if __name__ == '__main__': p1 = (30, 255) handle = win32gui.FindWindow(None, '计算器') tmp = win32api.MAKELONG(p1[0], p1[1]) win32api.SendMessage(handle, win32con.WM_MOUSEMOVE, win32con.MK_LBUTTON, tmp) win32api.SendMessage(handle, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, tmp) win32api.SendMessage(handle, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, tmp) # ------------------------------------- (win7/win10系统下) 第一段代码可以实现前台点击,第二段代码尝试多种变型都无法实现前台点击,跟不用说后台点击,请高手帮忙解答。谢谢。 回复caozhy: 1.WM_MOUSEMOVE 时,MK_LBUTTON改成0依然没有效果 2.win7/win10下,spy++无法跟踪计算器的消息,有些软件的消息可以跟踪。原因不明。 回复qq_38282192: 什么意思?不太明白
pymouse方法,鼠标可移动但是无法左击
python 用pymouse方法点击鼠标,能够模拟鼠标移动。但是在我们软件上无法左键点击。有没有大神遇到过这种情况。 ``` m = PyMouse() m.position() m.move(127,700) m.click(127,700,1) ```
pygame鼠标事件不执行是event问题还是刷新不成功问题?
pygame编写游戏的过程中,程序可以执行,但是对于鼠标点击的事件过程没有反应(设定为:左键点击往左移直到鼠标松开,右键同理),在鼠标点击过程中,并没有发生任何移动,不知道这是事件的问题,还是页面刷新不成功的问题? ``` for event in pygame.event.get(): if event.type== pygame.QUIT: pygame.quit() elif event.type == pygame.KEYDOWN: if event.key==pygame.K_RIGHT: ship.moving_right=True if event.key==pygame.K_LEFT: ship.moving_left=True elif event.type==pygame.KEYUP: if event.key==pygame.K_RIGHT: ship.moving_right=False if event.key==pygame.K_LEFT: ship.moving_left=False while True: gf.check_events(ship) ship.update() gf.update_screen(ai_settings,screen,ship) ``` ``` ``` ```
pycharm安装PyWavelets,import pywt时按住鼠标左键和ctrl无法进入init文件且运行报错,重复uninstall再install没用?
![代码如下](https://img-ask.csdn.net/upload/202001/30/1580354155_499955.png) ![运行结果](https://img-ask.csdn.net/upload/202001/30/1580354181_459521.png)
使用 PyHook3 时为什么有时会出现延迟?
win7 下使用 VS2019 写 python 代码如下, 其实基本上就是 PyHook3 样例给出的东西: ``` import PyHook3 import pythoncom # Magic utility that "redirects" to pythoncomxx.dll, only for getPyHookEvent() def OnMouseEvent(event): print('MessageName:',event.MessageName) print('Message:',event.Message) print('Time:',event.Time) print('Window:',event.Window) print('WindowName:',event.WindowName) print('Position:',event.Position) print('Wheel:',event.Wheel) print('Injected:',event.Injected) print('---') # return True to pass the event to other handlers # return False to stop the event from propagating return True def getPyHookEvent(mouseEvent = OnMouseEvent): # create the hook mananger hm = PyHook3.HookManager() hm.MouseAllButtonsDown = mouseEvent hm.MouseAllButtonsUp = mouseEvent hm.HookMouse() pythoncom.PumpMessages() ``` 运行, 单击弹出的 cmd 窗口, 下面是输出: ``` MessageName: mouse left down Message: 513 Time: -2061365449 Window: 8538218 WindowName: C:\Windows\system32\cmd.exe Position: (532, 421) Wheel: 0 Injected: 0 --- MessageName: mouse left up Message: 514 Time: -2061365293 Window: 8538218 WindowName: 选定 C:\Windows\system32\cmd.exe Position: (532, 421) Wheel: 0 Injected: 0 --- MessageName: mouse right up Message: 517 Time: -2061362438 Window: 8538218 WindowName: C:\Windows\system32\cmd.exe Position: (495, 485) Wheel: 0 Injected: 0 --- MessageName: mouse right down Message: 516 Time: -2061359583 Window: 8538218 WindowName: C:\Windows\system32\cmd.exe Position: (678, 502) Wheel: 0 Injected: 0 --- MessageName: mouse right up Message: 517 Time: -2061359443 Window: 8538218 WindowName: C:\Windows\system32\cmd.exe Position: (678, 502) Wheel: 0 Injected: 0 ``` 我首先单击一次左键, 立即弹出 **mouse left down** 消息, 但鼠标动作立即出现明显延迟, 直到单击右键或中键 (如果监听键盘那么键盘输入类似) 才会显示 **left up** 和 **right up** , 但 **right down** 消失了(???). 其他键一切正常, 离开 cmd 窗口单击左键一切正常, 同时也能记录所有点击信息. 请问这种情况可能是怎么发生的? 该怎么避免? 还有人遇到类似的情况吗?
我想用Python写一个游戏脚本,自动点击排队!
我刚学Python,用已掌握的知识已经用"autopy"的功能写了一个鼠标自动点击排队的脚本,但是我想让这个脚本不用在窗口最前端显示也能运行,就是最小化了也能继续在后台继续工作,可是不了解Python的强大功能,下面是代码,有些是在网上找的方法,大部分是我自己瞎琢磨的,求大神指点! import win32gui import win32con import time import math import autopy Left_btn=autopy.mouse.Button.LEFT #声明鼠标左键 colour_1 = (228,225,223) #RGB主界面 colour_2 = (229,197,141) #RGB准备 colour_3 = (44,24,19) #RGB战斗结束 colour_4 = (115,75,40) def Ready(X_axis,Y_axis): ###取得所需要像素的R,G,B### R = autopy.screen.get_color(X_axis,Y_axis)[0] G = autopy.screen.get_color(X_axis,Y_axis)[1] B = autopy.screen.get_color(X_axis,Y_axis)[2] return R,G,B class GameAssist: def __init__(self,wdname): """初始化""" #取得游戏窗口句柄 self.hwnd = win32gui.FindWindow(0,wdname) if not self.hwnd: print("未找到游戏窗口,请确认窗口句柄名称:【%s】"% wdname) exit() #窗口显示在最前面 win32gui.SetForegroundWindow(self.hwnd) newx = 0 newy = 1 win32gui.SetWindowPos(self.hwnd, win32con.HWND_TOPMOST, newx, newy, 300, 300, win32con.SWP_SHOWWINDOW) def Line_Up(): #日和坊自动排队 time.sleep(1) autopy.mouse.move(102,262) time.sleep(0.5) autopy.mouse.click() time.sleep(1) autopy.mouse.move(102,262) time.sleep(0.5) autopy.mouse.click() time.sleep(0.5) autopy.mouse.move(183,240) time.sleep(0.5) autopy.mouse.toggle(Left_btn,True) time.sleep(0.5) autopy.mouse.smooth_move(183,155) time.sleep(0.5) autopy.mouse.toggle(Left_btn,False) time.sleep(0.5) autopy.mouse.move(183,256) time.sleep(0.5) autopy.mouse.click() time.sleep(0.5) autopy.mouse.move(288,280) time.sleep(0.5) autopy.mouse.click() def Tricks(): ####鼠标模拟点击#### while True: if Ready(100,258) == colour_1: #对比主界面RGB是否为真 Line_Up() #日和坊自动排队 time.sleep(4) while Ready(130,248) != colour_4: Line_Up()
PyQt5中如何在lable中加载的图片上绘制矩形框呢?
我的程序是通过摄像头采集一帧图像,点击开始标记按钮后显示在按钮左侧的lable中(灰色框)。 我希望可以在lable中加载的一帧图像中通过点击鼠标左键开始绘制矩形,按住左键拖动时改变矩形的形状,松开左键后完成绘制。(和lableImg软件类似)。 请问如何实现上述功能呢?我目前找到的方法是使用QPainter来实现,但是在我的代码中该如何实现呢?万分感谢! ![图片说明](https://img-ask.csdn.net/upload/201812/12/1544601796_693173.png) 附上我的完整代码如下: ``` # -*- coding: utf-8 -*- import sys import cv2 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * # ~ class MyLabel(QLabel): # ~ def paintEvent(self, event): # ~ width = self.pos2[0]-self.pos1[0] # ~ height = self.pos2[1] - self.pos1[1] # ~ qp = QPainter() # ~ qp.begin(self) # ~ qp.drawRect(self.pos1[0], self.pos1[1], width, height) # ~ qp.end() # ~ def mousePressEvent(self, event): # ~ self.pos1[0], self.pos1[1] = event.pos().x(), event.pos().y() # ~ print("clicked") # ~ def mouseReleaseEvent(self, event): # ~ self.pos2[0], self.pos2[1] = event.pos().x(), event.pos().y() # ~ print("released") # ~ self.update() class Ui_train_window(QtWidgets.QWidget): def setupUi(self, train_window): train_window.setObjectName("train_window") train_window.resize(690, 600) train_window.setMaximumSize(QtCore.QSize(690, 600)) self.horizontalLayoutWidget = QtWidgets.QWidget(train_window) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 10, 681, 80)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.lab_enter_name = QtWidgets.QLabel(self.horizontalLayoutWidget) self.lab_enter_name.setObjectName("lab_enter_name") self.horizontalLayout.addWidget(self.lab_enter_name) self.le_username = QtWidgets.QLineEdit(self.horizontalLayoutWidget) self.le_username.setObjectName("le_username") self.horizontalLayout.addWidget(self.le_username) self.lab_enter_pw = QtWidgets.QLabel(self.horizontalLayoutWidget) self.lab_enter_pw.setObjectName("lab_enter_pw") self.horizontalLayout.addWidget(self.lab_enter_pw) self.le_userpw = QtWidgets.QLineEdit(self.horizontalLayoutWidget) self.le_userpw.setObjectName("le_userpw") self.le_userpw.setEchoMode(QLineEdit.Password) self.horizontalLayout.addWidget(self.le_userpw) self.label = QtWidgets.QLabel(self.horizontalLayoutWidget) self.label.setObjectName("label") self.horizontalLayout.addWidget(self.label) self.le_ipadr = QtWidgets.QLineEdit(self.horizontalLayoutWidget) self.le_ipadr.setObjectName("le_ipadr") self.horizontalLayout.addWidget(self.le_ipadr) self.btn_openIPcam = QtWidgets.QPushButton(self.horizontalLayoutWidget) self.btn_openIPcam.setMinimumSize(QtCore.QSize(50, 10)) self.btn_openIPcam.setObjectName("btn_openIPcam") self.horizontalLayout.addWidget(self.btn_openIPcam) self.show = QtWidgets.QLabel(train_window) self.show.setGeometry(QtCore.QRect(15, 110, 531, 371)) self.show.setObjectName("show") self.show.setStyleSheet(("border:2px solid lightgray")) self.verticalLayoutWidget = QtWidgets.QWidget(train_window) self.verticalLayoutWidget.setGeometry(QtCore.QRect(560, 100, 111, 381)) self.verticalLayoutWidget.setObjectName("verticalLayoutWidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.verticalLayout.setObjectName("verticalLayout") self.btn_start = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_start.setObjectName("btn_start") self.verticalLayout.addWidget(self.btn_start) self.combo_label = QtWidgets.QComboBox(self.verticalLayoutWidget) self.combo_label.setObjectName("combo_label") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.combo_label.addItem("") self.verticalLayout.addWidget(self.combo_label) self.btn_save = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_save.setObjectName("btn_save") self.verticalLayout.addWidget(self.btn_save) self.btn_finish = QtWidgets.QPushButton(self.verticalLayoutWidget) self.btn_finish.setObjectName("btn_finish") self.verticalLayout.addWidget(self.btn_finish) self.horizontalLayoutWidget_2 = QtWidgets.QWidget(train_window) self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(0, 500, 681, 71)) self.horizontalLayoutWidget_2.setObjectName("horizontalLayoutWidget_2") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget_2) self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.lab_stepnum = QtWidgets.QLabel(self.horizontalLayoutWidget_2) self.lab_stepnum.setObjectName("lab_stepnum") self.horizontalLayout_2.addWidget(self.lab_stepnum) self.le_stepnm = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2) self.le_stepnm.setObjectName("le_stepnm") self.horizontalLayout_2.addWidget(self.le_stepnm) self.lab_batchsize = QtWidgets.QLabel(self.horizontalLayoutWidget_2) self.lab_batchsize.setObjectName("lab_batchsize") self.horizontalLayout_2.addWidget(self.lab_batchsize) self.le_batchsize = QtWidgets.QLineEdit(self.horizontalLayoutWidget_2) self.le_batchsize.setObjectName("le_batchsize") self.horizontalLayout_2.addWidget(self.le_batchsize) self.btn_pretrain = QtWidgets.QPushButton(self.horizontalLayoutWidget_2) self.btn_pretrain.setObjectName("btn_pretrain") self.horizontalLayout_2.addWidget(self.btn_pretrain) self.btn_retrain = QtWidgets.QPushButton(self.horizontalLayoutWidget_2) self.btn_retrain.setObjectName("btn_retrain") self.horizontalLayout_2.addWidget(self.btn_retrain) self.show.raise_() self.horizontalLayoutWidget.raise_() self.verticalLayoutWidget.raise_() self.horizontalLayoutWidget_2.raise_() self.retranslateUi(train_window) self.btn_openIPcam.clicked.connect(self.IPinfo) self.btn_start.clicked.connect(self.labledata) QtCore.QMetaObject.connectSlotsByName(train_window) def retranslateUi(self, train_window): _translate = QtCore.QCoreApplication.translate train_window.setWindowTitle(_translate("train_window", "训练工具")) self.lab_enter_name.setText(_translate("train_window", "输入IP摄像头用户名:")) self.lab_enter_pw.setText(_translate("train_window", "输入IP摄像头密码:")) self.label.setText(_translate("train_window", "IP地址")) self.btn_openIPcam.setText(_translate("train_window", "连接IP摄像头")) self.show.setText(_translate("train_window", "")) self.btn_start.setText(_translate("train_window", "开始标记")) self.combo_label.setItemText(0, _translate("train_window", "a")) self.combo_label.setItemText(1, _translate("train_window", "b")) self.combo_label.setItemText(2, _translate("train_window", "c")) self.combo_label.setItemText(3, _translate("train_window", "d")) self.combo_label.setItemText(4, _translate("train_window", "e")) self.combo_label.setItemText(5, _translate("train_window", "f")) self.btn_save.setText(_translate("train_window", "保存")) self.btn_finish.setText(_translate("train_window", "标记结束")) self.lab_stepnum.setText(_translate("train_window", "迭代次数:")) self.lab_batchsize.setText(_translate("train_window", "batchsize:")) self.btn_pretrain.setText(_translate("train_window", "预训练")) self.btn_retrain.setText(_translate("train_window", "重新训练")) def IPinfo(self): username = self.le_username.text() password = self.le_userpw.text() ipaddress = self.le_ipadr.text() #cam_rtsp_addr = "rtsp://" + username + ":" + password + "@" + ipaddress + "/h264/ch33/main/av_stream" #self.camcapture = cv2.VideoCapture(cam_rtsp_addr) self.camcapture = cv2.VideoCapture(0) self.timer = QtCore.QTimer() self.timer.start() self.timer.setInterval(0.3) self.timer.timeout.connect(self.camshow) def camshow(self): global showImage _ , camimg = self.camcapture.read() camimg = cv2.cvtColor(camimg, cv2.COLOR_BGR2RGB) showImage = QtGui.QImage(camimg.data, camimg.shape[1], camimg.shape[0], QtGui.QImage.Format_RGB888) def labledata(self): self.show.setPixmap(QtGui.QPixmap.fromImage(showImage)) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) Window = QtWidgets.QWidget() ui = Ui_train_window() ui.setupUi(Window) Window.show() sys.exit(app.exec_()) ```
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Elastic:菜鸟上手指南
您们好,我是Elastic的刘晓国。如果大家想开始学习Elastic的话,那么这里将是你理想的学习园地。在我的博客几乎涵盖了你想学习的许多方面。在这里,我来讲述一下作为一个菜鸟该如何阅读我的这些博客文章。 我们可以按照如下的步骤来学习: 1)Elasticsearch简介:对Elasticsearch做了一个简单的介绍 2)Elasticsearch中的一些重要概念:cluster, n...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
一文带你看清 HTTP 所有概念
上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种,通用标头、实体标头、请求标头、响应标头,现在我们来对这几种标头进行介绍 通用...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
【综合篇】浏览器的工作原理:浏览器幕后揭秘
web(给达达前端加星标,提升前端技能)了解浏览器是如何工作的,能够让你站在更高的角度去理解前端浏览器的发展历程的三大路线,第一是应用程序web化,第二是web应用移动化,第三是web操...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
死磕Lambda表达式(二):Lambda的使用
在哪使用Lambda表达式?怎么样正确的使用Lambda表达式?
史上最牛逼的 Eclipse 快捷键,提高开发效率!
如果你在使用IDEA,请参考博主另外的一篇idea快捷键的博客。
在三线城市工作爽吗?
我是一名程序员,从正值青春年华的 24 岁回到三线城市洛阳工作,至今已经 6 年有余。一不小心又暴露了自己的实际年龄,但老读者都知道,我驻颜有术,上次去看房子,业务员肯定地说:“小哥肯定比我小,我今年还不到 24。”我只好强颜欢笑:“你说得对。” 从我拥有记忆到现在进入而立之年,我觉得,我做过最明智的选择有下面三个: 1)高中三年,和一位女同学保持着算不上朋友的冷淡关系;大学半年,把这位女同学追到...
CSS操作之你不得不知的一些小技巧(一)ヾ(Ő∀Ő๑)ノ太棒了!!
目录 CSS单行/多行文本,超出隐藏并显示省略号 1. CSS单行/多行文本,超出隐藏并显示省略号 方法一:使用CSS属性 单行文本溢出显示省略号 width: 100px; overflow: hidden; text-overflow:ellipsis; //文本溢出显示省略号 white-space: nowrap; //文本不会换...
强烈推荐 10 款珍藏的 Chrome 浏览器插件
Firebug 的年代,我是火狐(Mozilla Firefox)浏览器的死忠;但后来不知道为什么,该插件停止了开发,导致我不得不寻求一个新的网页开发工具。那段时间,不少人开始推荐 Chrome 浏览器,我想那就试试吧,期初我觉得用起来很别扭,毕竟我不是一个“喜新厌旧”的人。但用的次数越来越多,也就习惯了。 Chrome 浏览器有一个好处,就是插件极其丰富,只有你想不到的,没有你找不到的,这恐怕是...
我以为我对数据库索引十分了解,直到我遇到了阿里面试官。
索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
Java程序员都需要懂的「反射」
前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 今天来简单写一下Java的反射。本来没打算写反射这个知识点的,只是不少的读者都问过我:“你的知识点好像缺了反射阿。能不能补一下?” 这周末也有点空了,所以来写写我对反射的简单理解。这篇是入门文章,没有高深的知识点,希望能对新人有帮助。如果...
史上最牛逼的 VSCode 插件,提高开发效率!
这篇文章收集了一些常用的vscode插件,提高开发效率。
Java第二周学习
Java第二周学习 1. 数组 1.1 定义数组格式 数据类型[] 数组名 = new 数据类型[容量]; int[] arr = new int[10]; 赋值左侧 数据类型: 告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类型之后,整个数组中保存的数据类型无法修改!!! []: 告知编译器这里定义的是一个数组类型数据。 明确告知编译器,数组名是一个【引用数据类型...
有没有简单一点的 Python 小例子或小项目?
分享一波Github上适合新手入门、又十分有趣的Python项目~ 1. 人脸识别 star:30.5k 最简洁的人脸识别库。可以使用Python和命令行工具提取、识别、操作人脸。其人脸识别是基于业内领先的C++开源库dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,准确率高达99.38%。 而且有中文版README哟~ 2. faceai sta...
看完这篇JVM,阿里面试官都不怕!
前言 只有光头才能变强 本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干了什么,具体是怎么干的。能够理解到一些初学时不懂的东西 在面试的时候有谈资 能装逼 (图片来源:https://zhuanlan.zhihu.com/p/25511795,侵删) 声...
隆重向你推荐这 8 个开源 Java 类库
昨天在青铜时代群里看到读者朋友们在讨论 Java 最常用的工具类,我觉得大家推荐的确实都挺常见的,我自己用的频率也蛮高的。恰好我在 programcreek 上看到过一篇类似的文章,就想着梳理一下分享给大家。 在 Java 中,工具类通常用来定义一组执行通用操作的方法。本篇文章将会向大家展示 8 个工具类以及它们最常用的方法,类的排名和方法的排名均来自可靠的数据,从 GitHub 上最受欢迎的 ...
Java基础知识面试题(2020最新版)
文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
Spring面试题(2020最新版)
文章目录Spring概述(10)什么是spring?Spring框架的设计目标,设计理念,和核心是什么Spring的优缺点是什么?Spring有哪些应用场景Spring由哪些模块组成?Spring 框架中都用到了哪些设计模式?详细讲解一下核心容器(spring context应用上下文) 模块Spring框架中有哪些不同类型的事件Spring 应用程序有哪些不同组件?使用 Spring 有哪些方式...
用树莓派做一个人脸识别开锁应用
作者:eckygao,腾讯 CSIG 云产品部1.案例概述1.1 背景实现一个人脸识别进行开锁的功能,用在他的真人实景游戏业务中。总的来说,需求描述简单,但由于约束比较多,在架构与选型上...
C语言写个贪吃蛇游戏
贪吃蛇是个非常经典的游戏,用C语言来实现也是一个好玩的事情。这个游戏我写完后放在知乎,竟然点赞的人数超级多。我觉得大家喜欢,一个方面是因为写得简单,大家都能看得懂,一个可扩展性还是非常强...
出不了门的日子,我选择在 GitHub 上快乐的打游戏
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个在家憋到长蘑菇的蒟蒻… 2020 年的开年因为一些大家都知道的原因,有些不顺,但还是要捏捏自己的脸蛋儿,微笑的面对,毕竟日子还是要过下去… 要点脸皮,不能出门,假期又一延再延,作为一个从小熟读结发悬梁铁锥刺骨囊萤照读牛角挂书等典故的社会主义好青年,我决定趁这段时间好好充实自己,争取早日上...
7年加工作经验的程序员,从大厂跳槽出来,遭遇了什么?
引言      很久没写文章了,只是隔一两个月更新篇小说,回想起来,LZ至今工作也8年了,回想起来,一时间难免感慨,时间真的过的太快了。   当初在北京的4年多,是LZ工作中最精彩的一段经历,这也是为何LZ的小说以LZ在北京打拼时的真实经历为背景,因为那是一段难忘而又精彩的时光。   16年偶得一个大厂的offer,因此LZ就毅然决然的来到了杭州,来到杭州以后,LZ的工作平淡了许多,或许和...
相关热词 c# singleton c#中类的默认值是 c#各种进制之间的转换 c# 正则表达式保留汉字 c#后台跨域 c#基础代码大全 c#指定combox选择 c#关系 mono c# 相差毫秒 用c#做一个简易计算器
立即提问