java就_GitHub - IammyselfYBX/This_is_how_Java_should_be_learned: 《Java就应该这样学》

Java就该这么学

cover.jpg

说明

这里使用 centos7 的openjdk,不是Oracle的JDK

yum search java|grep jdk

CentOS_OpenJDK1.png

yum install java-1.8.0-openjdk

#set Java environment

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64

export CALSSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

CentOS_OpenJDK2.png

CentOS_OpenJDK.png

第一部分 认识Java程序

1.java纯粹的面向对象语言,程序是由一个一个类组成的

java不能直接写主函数,因为基于面向对象。

java中类名大写

MyTest.java

通俗理解函数调用:

你吃早饭,喊一声我要吃早饭,早饭就来了,你不用知道早饭是怎么做的,只要调用一下就可以了。

2.类名与文件名相同

p5.png

源文件中有类名值 public 的话,文件名与该类同名。

3.java语言不能直接画在窗体上,必须是画布上才行,好在存在画布类

Frame fr = new Frame();

Paint p = new Paint();

w.add(p);

4.80%思考任务,20%思考知识

5.Math.random() 产生的是0-1之间的数字

6.传数值的时候,需要考虑是否需要强制类型转换

7.不要写成——T1.6

int x[] = new int[300] ;

int y[] = new int[300] ;

//类里面不要直接写语句,应该放到方法里面

for(int i = 0 ; i < 300 ; i ++){

x[i] = (int)(Math.random()*1024) ;

y[i] = (int)(Math.random()*768) ;

}

正确关系

p28.png

所以应该写成

class MyPanel{

int x[] = new int[300] ;

int y[] = new int[300] ;

public MyPanel(){

for(int i = 0 ; i < 300 ; i ++){

x[i] = (int)(Math.random()*1024) ;

y[i] = (int)(Math.random()*768) ;

}

}

}

8.Ctrl+Shift+Alt+R——30s

gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length 60

以秒为单位将’60’值替换为您想要的长度,例如300分钟5分钟,600分钟10分钟等等。

9.一般java API规律

得到信息是 get 开头

eg:getKeyCode()

改变信息是 set 开头

eg:f.setSize(300, 400);

11.将字符转换成字符串方法

将字符c变成对象 new Character(c)

然后调用 toString() 方法

new Character(c[i]).toString()

12.线程与进程的区别

线程是通过利用CPU的轮转,让程序中不同的代码段同时执行的机制。

进程:独立运行的程序,一个运行的记事本和浏览器是两个进程,启动两个记事本也是两个进程。

线程:在一个进程里面能够共同运行的代码。

13.接口需要实现,任何类都可以实现接口 implements Runnable

class MyPanel extends Panel implements Runnable{//实现接口Runnable

public void run(){//计算机在合适的时间片就轮转到 run() 执行

}

}

public static void main(String args[]){

MyPanel mp = new MyPanel();

Thread t = new Thread(mp);//让线程 t 与 mp 关联。

t.start();//启动线程,调用内部的 run() 方法。

}

14.实现键盘监控接口

import java.awt.event;

class MyPanel extneds Panel implements KeyListener{

public void keyPressed(KeyEvent e){

if(e.getKeyCode() == 37){

x--;

}

repaint();

}

public void keyReleased(KeyEvent arg0){

}

public void keyTyped(KeyEvent arg0){

}

}

public static void main(String args[]){

Frame f = new Frame();

MyPanel mp = new MyPanel();

f.addKeyListener(mp);

mp.addKeyListener(mp);

}

15.常见ASCII码

空格——32

0~9——48~57

A——65

a——97

第二部分 开始一个项目

一、页面的3种布局

1.BorderLayout——边框布局管理器

NORTH——北

SOUTH——南

WEST——西

EAST——东

CENTER——中间

4153e654d7fb7af91b6ce9b7ed01ee81.png

2.GridLayout

事先算好行列的个数,从左到右,从上到下

a101cbe309f5bbd6573e56ebe79edb89.png

3.FlowLayout

往中间排,一排不够换下一排

FlowLayout1.png

FlowLayout2.png

FlowLayout3.png

FlowLayout4.png

二、常用组件

Java采用布局的方式,而不是根据坐标

下面的所有组件最终都要放在 JFrame 上面。

1.JPanel——画布

JPanel可以放在JFrame上面,也可以放在JPanel上面

2.JLabel——文本提示

3.JTextField——单行文本输入

4.JPasswordField——密码

1.png

5.JComboBox——下拉框

6.JTextArea——多行文本输入

7.JScrollpane——滚动条

2.png

注册事件

参数应该是实现接口的类的对象

QQLogin e = new QQLogin();

btnLogin.addActionListener(e);

btnReg.addActionListener(e);

btnCancel.addActionListener(e);

out.gif

仅事件相应分不清到底是哪一个

error.gif

细化具体是什么相应

out.gif

QQLogin.gif

想看是不是一个对象加个 . 实验一下。

1.png

equal比较内容

== 比较是否同一个

== 实例

使用 new 得到的是地址, 所以是 false

MyTest.png

MyTest1.png

equal实例

MyTest2.png

哈希码——hashCode()

HashCodeTest.png

构造方法一般用于初始化

public class QQLogin extends JFrame{

QQLogin(){

//w.setSize(300, 400);

this.setSize(300, 400);

}

}

MyTest.png

开始QQ项目

QQLogin.png

QQMain.png

Java分为 客户端 与 服务器端 编程,这两者被互联网隔开,只能依赖简单的消息传递让两者一起工作。所以,不一定使用同一种技术开发两端,前端使用HTML(其实是HTML, CSS, JavaScript的统称), 后端使用Java。

早期java也负责前端有一个组件——Applet,他可以嵌入到HTML里面,但后来Flash成功以后,Applet就没落了。

out.gif

如果 getActionCommand 的内容和声明的时候不一致就会出错

error.gif

三、面向对象

1.super 与 this

super 与 this 一样都是引用

super 是指向父类的引用

this 是指向当前的引用

2.继承注意事项

A c = new B();

这句话之后,结果是父类的成员变量,子类的方法。

Mytest.png

3.面向对象思想来编写代码

MyTest.png

假定用户名是 aaa, 密码是123,登入响应

Login%E5%93%8D%E5%BA%94.gif

4.面向对象中不应该引用另一个 class 中的成员变量,而应该是成员方法

将聊天信息发送到服务器在 test1引用变量中引用变量不符合面向对象的思想

//QQMain.java

Socket s

//QQLogin.java

QQMain w = new QQMain();

w.s = s;//错误用法

w.setVisible(true);

正确用法

//QQMain

private Socket s;

public void setSocket(Socket value){

s = value;

}

//QQLogin.java

QQMian w = new QQMain();

w.setSocket(s);

w.setVisible(true);

%E5%BC%95%E7%94%A8%E5%8F%98%E9%87%8F.gif

四、I/O流

变量——new是对内存的操作

语句——是对CPU的操作

语句是对CPU的操作,程序是在内存里面,操作内存比较方便,但是操作外设(键盘,硬盘,打印机,网络)就比较麻烦,程序想与他们打交道,需要用到I/O流

到内存——入、到内存外面——出

对I/O流的操作一般3步

1.定位

对于硬盘:到那个硬盘,那个目录大那个文件

对于网络:网络地址的那个端口

2.建立管道

就是数据源的方向

3.操作管道

所有离开内存的操作都是存在隐患的,需要try{} ... catch(){}

文件不存在

硬盘损坏

网络不通

数据库服务器没启动

import java.io.*;

public class MyReadFile {

public static void main(String args[]){

try{

//Step1:定位数据源

File f = new File("./test.txt");//使用 File类 定位文件

//Step2:建立管道

FileInputStream fis = new FileInputStream(f);//用 FileinputEtream类 确定方向是到内存里面。

//Step3:操作管道

int length = fis.available() ;//操作管道,管道对象是——fis。

for (int i = 0; i < length ; i ++ ) {

System.out.print((char)fis.read());//.read()方法是操作 管道fis 读一个字符。

}

}catch(Exception e){}

}

}

如果有时间可以看看 java 家目录里面的 src.zip 里面的java代码,都是开源人写的不错的代码

方法——动作,变量——承担动作的对象

eg:洗(衣服)   #动作需要参入参数

复制大文件

首先对于 read 方法一共有3中方式重载

MyReadBigFileRead.png

对于 write 方法也有3中方式重载

MyReadBigFileWrite.png

分析如果采用 方式1 的话需要复制21103945 次,浪费资源,时间

缺点就是因为不是整除,所以复制的结果会更大一些,

建议数组长度采用2的n次方

MyReadBigFile.png

先用方式2大块复制减少时间,在用方式1 处理剩余的

MyReadBigFile.png

字节流操作FileInputStream、FileOutputStream不能直接操作 Unicode 字符,不符合 Java “一次编写,处处运行”

Key.png

为了解决这个问题,需要提出——字符流

字符流FileReader、BufferedReader、FileWriter、PrintWriter

需要 flush、close

// 字符流适应不同的操作系统

import java.io.*;

public class MyReadFile {

public static void main(String args[]){

try{

File inFile = new File("C:/work/test.txt") ;

File outFile = new File("c:/work/test1.txt") ;

FileReader fr = new FileReader(inFile) ;

BufferedReader br = new BufferedReader(fr) ;

FileWriter fw = new FileWriter(outFile) ;

PrintWriter pw = new PrintWriter(fw) ;

while(br.ready()){

pw.println(br.readLine()) ;

}

pw.close();//close()会自动调用 flush() 把缓冲区的内容写入文件。

}catch(Exception e){}

}

}

MyKey.png

建立网络通信

协议——我写的是汉语、你能看懂我写的是什么,汉语就是协议,大家都认同的规则。

防止堵塞

1.令牌环

2.以太网

以太网原理:看线路上有没有信号,有就等待,没有就发送

3.隔离

使用交换机建立虚拟电路,

其他概念

1.网关——将两个网络连在一起

网关——一台有两块网卡装有网关软件的计算机,下图当中方块就是网关。

%E7%BD%91%E5%85%B3.png

假设左侧的子网掩码是 255.255.255.0,右侧的子网掩码是 255.255.0.0,则网关连接 159.226.43 与 226.196两个网络。

2.子网掩码

子网掩码——区分主机号和网络号

一个IP是 159.226.43.26,如果子网掩码是 255.255.0.0,那么网络号是 159.226, 主机号是 43.26;

如果子网掩码是 255.255.255.0,那么网络号是 159.226.43,主机号是26;

3.端口

对于计算机网络需要找到对应的进程——端口

80是http协议的端口、25是发送邮件的端口、1433是 SQLServer、3306是MySQL、1521是Oracle、8080是网络服务器饰演端口

Socket.gif

上传消息

服务器并不是一个强大的计算机,只是一直监听而已

import java.net.*;

public class MyServer{

public static void main(String args[]){

try{

ServerSocket ss = new ServerSocket(8000);

System.out.println("Listening ....");

Socket s = ss.accept();

System.out.println("Listened.");

}catch(Exception e){}

}

}

客户端就是发送请求的计算机

import java.net.*;

public class MyClient{

public static void main(String args[]){

try{

Socket s = new Socket("localhost", 8000);

}catch(Exception e){}

}

}

I/O字节流

//Server

import java.net.*;

public class MyServer{

public static void main(String args[]){

try{

ServerSocket ss = new ServerSocket(8000);

System.out.println("Listening ... ");

Socket s = ss.accept();

System.out.println(s.getInputStream().read());

//System.out.println("Listened");

}catch(Exception e){}

}

}

//Client

import java.net.*;

public class MyClient{

public static void main(String args[]){

try{

Socket s = new Socket("localhost", 8000);

s.getOutputStream().write(122);

}catch(Exception e){}

}

}

Socket_IO.gif

字节流缺点:

只能发送数字

不能发送大于 255 的数字

I/O字符流

//Server

import java.io.*;

import java.net.*;

public class MyServer{

public static void main(String args[]){

try{

ServerSocket ss = new ServerSocket(8000);

System.out.println("Listening ... ");

Socket s = ss.accept();

InputStream is = s.getInputStream();

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

System.out.println(br.readLine());

}catch(Exception e){}

}

}

//Client

import java.net.*;

import java.io.*;

public class MyClient{

public static void main(String args[]){

try{

Socket s = new Socket("localhost", 8000);

OutputStream os = s.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);

PrintWriter pw = new PrintWriter(osw, true);//自动刷新

pw.println("YBX is the most handsome man in NCEPU");

}catch(Exception e){}

}

}

test2%E9%AB%98%E7%BA%A7%E6%B5%81%E2%80%94%E2%80%94%E5%AD%97%E7%AC%A6%E6%B5%81.png

面向对象编程不建议使用变量,而是方法。

对于 A a = new B();,a.变量是A 的变量,a.方法是B 的方法。

五、数据库操作

关于数据库访问是属于 javaEE 的内容,在 javaSE 里面找不到

%E5%AE%89%E8%A3%85MariaDB.png

RHEL%E5%AE%89%E8%A3%85MariaDB.png

%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7.png

问题

访问权限

problam.png

解决方案

0a7776ef48b6c4283bed47c4a1f51521.png

MariaDB [(none)]> grant all privileges on QQ.* TO 'tony'@'%' identified by '12345' with GRANT OPTION;

Query OK, 0 rows affected (0.00 sec)

使用docker

afc4c5c186b4667e7ba487e2768ddb5c.png

$> docker exec -it mariadb /bin/bash

索引

数据库本身存放数据有一个原始顺序——原表排序

但是这些数据可以根据不同的条件重新排序,这些排序结果放在——索引表

在不同的产品里面对原表排序和索引表的称呼不同

SQLServer:

聚集索引——原表排序

非聚集索引——索引表

Oracle:

索引组织表——原表排序

索引——索引表

数据库的表就是二维表

表的特点是——列固定、行增加或减少。

表太多了,为了方便管理,把相关的表组织成为库。

数据类型

因为数据库需要分配空间,所以需要给分配的内容定义数据类型以便于分配空间。

因为数据库很专业,所以数据类型种类很多,但是不超过三类——数字、字符串、日期

Mysql 支持存储文章(text)和图片(blob),但是其他数据库可能不支持。

数字

1.整数——int

一般大小自己用数字定义。eg:int(10)——占10位的整数

2.小数——float、double

大小自己用数字定义。eg:float(5, 2)——一共5位,小数点后2位小数

字符串

1.char()

2.varchar()

区别:

char(5)存放'ab',varchar(5)存放'ab',在取出的时候,char的是'ab '(ab加上3个空格); varchar的是'ab'

字符穿这里使用'',与C语言java语言不同,虽然Myql支持" ",但是需要照顾其他数据库。

日期——一般用于存放学生的生日

1.datetime——存放 年/月/日/时/分/秒

2.date——存放 年/月/日/

习惯一般存放人员生日而不是年龄,因为每年新年就要把所有人年龄加1,很麻烦。

权限管理——GRANT

新建的普通用户是没有权限建立数据库的

16965a60397d6ed54538d20f6eaba31b.png

使用root用户授权

MariaDB [(none)]> GRANT create

-> ON *.*

-> TO tony@'%'

-> IDENTIFIED BY '12345';

2ef643aa036be38f26951130eb7a43a7.png

这时在使用create就可以了。

59ba949c61fef83cbb7c1e9c7c9bf56c.png

第一范式——得到纯粹二维表

第二范式——消除主键依赖

第三范式——消除函数依赖

2.JDBC

a4c92b6a686c95a0fb3d2c528a1175c5.png

放在 $JAVA_HOME/jre/lib/ext/ 下面

7a638d45b45dc73a05f96543bbcb4777.png

3.访问数据库

查询

import java.sql.*;

public class TestSQL{

public static void main(String[] args) {

try{

Class.forName("org.mariadb.jdbc.Driver");

Connection cn = DriverManager.getConnection("jdbc:mysql://192.168.122.104:3306/test", "tony", "12345");

Statement st = cn.createStatement();

ResultSet rs = st.executeQuery("SELECT id, name FROM student");

while(rs.next()){

String id = rs.getString("id");

String name = rs.getString("name");

System.out.println(id+" "+name);

}

}catch(Exception e){}

}

}

增删改

import java.sql.*;

public class TestSQL{

public static void main(String[] args) {

try{

//注册驱动

String driver ="org.mariadb.jdbc.Driver";

Class.forName(driver);

//获取数据库连接

String url="jdbc:mysql://192.168.122.104:3306/test";

String user = "tony";

String password = "12345";

Connection connection = DriverManager.getConnection(url, user, password);

System.out.println("Connection Success!!!");

//Select

System.out.println("\nThe original data:");

Statement statement = connection.createStatement();

ResultSet result1 = statement.executeQuery("SELECT id, name FROM student");

while(result1.next()){

String id = result1.getString("id");

String name = result1.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

//Insert

System.out.println("\nInsert");

String sql1 = "INSERT INTO student VALUES(2, 'Jerry')";

int result_insert = statement.executeUpdate(sql1);

System.out.println("Change Line: "+result_insert);

//Select

System.out.println("\nAfter Insert:");

ResultSet result2 = statement.executeQuery("SELECT id, name FROM student");

while(result2.next()){

String id = result2.getString("id");

String name = result2.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

//Update

String sql2 = "UPDATE student SET name='tony' WHERE id=2";

int result_update = statement.executeUpdate(sql2);

System.out.println("Change Line: "+result_update);

//Select

System.out.println("\nAfter Update:");

ResultSet result3 = statement.executeQuery("SELECT id, name FROM student");

while(result3.next()){

String id = result3.getString("id");

String name = result3.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

//Delete

String sql3 = "DELETE FROM student WHERE id=2";

int result_delete = statement.executeUpdate(sql3);

System.out.println("Change Line: "+result_delete);

//Select

System.out.println("\nAfter Delete:");

ResultSet result4 = statement.executeQuery("SELECT id, name FROM student");

while(result4.next()){

String id = result4.getString("id");

String name = result4.getString("name");

System.out.println("id: "+id+"\t"+"name: "+name+" ");

}

}catch(Exception e){

e.printStackTrace();

}finally{

try{

result1.close();

result2.close();

result3.close();

result4.close();

statement.close();

connection.close();

}catch(Exception e){}

}

}

}

4.反射

只有一个类被使用,而不是声明,其对应的静态语句块才会执行

class A{

static {

System.out.println("aaaaaaaaaaaaaaaaaaaa");

}

}

public class MyTest{

public static void main(String[] args){

A a; //是声明不会执行

}

}

Class.forName 能自动调用运行类的静态语句块,返回值是 Class,Class.forName 提供使用字符串来new对象的途径。

public class Demo{

public static void main(String args[]){

String choice = "YBX";

try{

Class a = Class.forName(choice);

Object o = a.newInstance();

Hero h = (Hero) o;

h.function(); //父类引用指向子类对象,执行依照 子类(YBX)方法。

}

}

}

增加灵活性这样以后只需要更改SQL.ini就可以实现数据库切换,密码更改等操作。

1e0475196e4e2f4ffaea1343ca79bddf.png

第三部分 获得逻辑能力

一、链表

在C语言结构体只有数据,没有方法,但是可以使用 Java 的类来替代。

//定义结构体

class Node{

public char value = ' ';

public Node next = NULL;

}

二、面向对象与面向过程

无论编程技术发展到那一天,面向过程都是必要的基础。

面向对象进行封装,这样两个人进行合作,一个人负责写类,一个人负责写计算机内部实现逻辑,这样类内部与外部进行完美的隔离。

这样对于代码用数组实现记事本与用链表实现记事本,只需要改动一句话

ArrayList al = new ArrayList();

//只需要该定义其他的都不需要变

LinkedList ll = new LinkedList();

3dee402f1c684313d8cb2df11acad8ad.png

三、泛型

四、Set

没有二分查找就没有二叉树。

点击按钮弹出目录对话框——JFileChooser

本书实例

90b30a4ab35c4cb02a5ac6493b25e0e3.png

7d0258349a66f4c9be121486a29c1778.png

d743b1a4c562c6cd09840a4f786b7d33.gif

9aeb3b56ac9d2006c22287d4fc043d1b.gif

28eb6acc9a3ab3d8e18fd887308e057b.gif

045db54c2049a36c03e0bde7a87be587.gif

5b5fba6fb15bdccdb0474a2566d8ec57.gif

out.gif

07b7441e2e57051e6fdca339688c7d13.gif

680d7bbdee45fd59f6cd78e373328ba1.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7变成xp风格了怎么改回_XP退役了,如何把Win7变成XP风格

展开全部方法如下&#xff1a;【步骤62616964757a686964616fe78988e69d8331333365653265①】&#xff1a;在电脑桌面空白处&#xff0c;点击鼠标右键&#xff0c;子菜单选择点击“个性化”【步骤②】&#xff1a;直接选择“基本和高对比主题”里的“Windows经典”模式整理风格发…

org.apache.catalina.LifecycleException: Failed to

2019独角兽企业重金招聘Python工程师标准>>> 文章原创地址&#xff1a;org.apache.catalina.LifecycleException: Failed to start component今天来了个新同事&#xff0c;让他先熟悉一下我们的工程项目&#xff0c;从svn下载下来以后&#xff0c;配置完成却怎么都无…

objective-C CollectionView 加深(添加注册头部View)

2019独角兽企业重金招聘Python工程师标准>>> #pragma marc 添加Collection -(void)addConllectionView{//collection的布局方案UICollectionViewFlowLayout *collectionViewLayout[[UICollectionViewFlowLayout alloc]init];//设置位置大小以及布局方案_myCollectio…

Javascript中Base64编码解码的使用实例

Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码&#xff0c;分别是window.btoa()函数和window.atob()函数。 1 var encodedStr window.btoa(“Hello world”); //字符串编码 2 var decodedStr window.atob(encodedStr); //字符串解码看下面的实例代…

mysql安装前的系统准备工作(转)

一、系统环境总结&#xff1a; 二、安装yum源&#xff1a; 1、安装磁盘yum源&#xff1a; 一、安装xfs文件系统&#xff1a;1、配置yum源&#xff1a;&#xff08;光盘&#xff09;vi /etc/yum.repos.d/yum.repo[Server]nameserverbaseurlfile:///tmp/cddir/Server/enabled1gpg…

layui常用的表单标签_Layui常用组件:表格(table)

快速使用添加删除编辑查看编辑删除layui.use([table], function () {table.render({elem: #demo,url: url//表格数据接口,toolbar: #toolbarDemo //开启头部工具栏&#xff0c;并为其绑定左侧模板,page:true//开启分页,loading:true//显示加载条,cols: [[{type: checkbox, fixe…

理解HTTP幂等性

2019独角兽企业重金招聘Python工程师标准>>> 理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中&#xff0c;我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢&#xff…

控件UI性能调优 -- SizeChanged不是万能的

简介 我们在之前的“UWP控件开发——用NuGet包装自己的控件“一文中曾提到XAML的布局系统 和平时使用上的一些问题&#xff08;重写Measure/Arrange还是使用SizeChanged&#xff1f;&#xff09;&#xff0c;这篇博文就来为大家简单地描述一下XAML布局系统的行为&#xff0c;并…

android 跨进程多实例播放demo

2019独角兽企业重金招聘Python工程师标准>>> 客户端进程需要实现&#xff0c;其中notify方法需要service 跨进程调用&#xff0c;通知客户端播放消息 IMediaPlayerClient.aidl package com.example.demo; import com.example.demo.ParcelableParcel; interface IM…

java 获取service_Java service层获取HttpServletRequest工具类的方法

Java service层获取HttpServletRequest工具类的方法大家都知道 能在Controller/action层获取HttpServletRequest&#xff0c;但是这里给大家备份的是从代码内部service层获取HttpServletRequest工具类。具体如下&#xff1a;package com.base.common.sessionutils;import javax…

Linux使用jstat命令查看jvm的GC情况

2019独角兽企业重金招聘Python工程师标准>>> 命令格式 jstat命令命令格式&#xff1a; jstat [Options] vmid [interval] [count] 参数说明&#xff1a; Options&#xff0c;选项&#xff0c;我们一般使用 -gcutil 查看gc情况 vmid&#xff0c;VM的进程号&#x…

python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】...

转自&#xff1a;http://blog.csdn.net/lixiaojie1012/article/details/23628129 初次尝试python语言&#xff0c;感觉用着真舒服&#xff0c;简单明了&#xff0c;库函数一调用就OK了[python] view plain copy 在CODE上查看代码片派生到我的代码片 import sys,os,os.path de…

java混合分页_坑,MySQL中 order by 与 limit 混用,分页会出现问题!

在Mysql中我们常常用order by来进行排序&#xff0c;使用limit来进行分页&#xff0c;当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N。但是这种写法却隐藏着较深的使用陷阱。在排序字段有数据重复的情况下&#xff0c;会很容易出现…

OSG开发概览

1 OSG基础知识 OSG是Open Scene Graphic 的缩写&#xff0c;OSG于1997年诞生于以为滑翔机爱好者之手&#xff0c;Don burns 为了对滑翔机的飞行进行模拟&#xff0c;对openGL的库进行了封装&#xff0c;osg的雏形就这样诞生了&#xff0c;1998年Don burns 遇到了同样喜欢滑翔…

hbuilder php xdebug,Hbuilder使用xdebug配置php断点调试

2019独角兽企业重金招聘Python工程师标准>>>##1. 背景不得不说Hbuilder是免费的前端开发工具中比较好用的&#xff0c;而且配合aptana开发php也马马虎虎(毕竟写前端的时候多些)。本人原是搞java的&#xff0c;后来打算用php做些个人项目(因为服务器成本低)&#xff0c…

mx播放器有没有投屏功能_无线投屏、即插即用,投影仪其实可以更智能:明基 E580T...

无论是简单的办公室会议还是小型的线下活动&#xff0c;投影仪都是必不可少的利器&#xff1a;既能有不错的显示效果&#xff0c;也不用受屏幕尺寸的约束。尽管越来越多的智能电视可供电脑连接&#xff0c;但真正派上用场的时候&#xff0c;拎箱就走的投影仪显然是最佳选择。很…

特殊矩阵-对角矩阵

2019独角兽企业重金招聘Python工程师标准>>> 挖坑。 转载于:https://my.oschina.net/aslanjia/blog/651503

vs运行时候冒了这个错:无法启动IIS Express Web 服务器~Win10

后期会在博客首发更新&#xff1a;http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 网上的方法多种&#xff0c;有让安装扩展插件的&#xff0c;有让在程序里面添加Http系列的组件&#xff0c;有其它其它的&#xff0c;可是。。。…

matlab脚本 定时停止_一触即发是什么软件?它是手机上极其强大的一款脚本辅助精灵...

一触即发app是手机上极其强大的一款免root的脚本辅助软件&#xff0c;堪称一键秒杀脚本精灵&#xff0c;除自动化、运行、管理外&#xff0c;还提供了脚本制作文字教程/视频教程&#xff0c;学习社区和图色处理、定时执行、王者荣耀、变量等命令参数和多点找色、多点找图、京东…

笔记本电脑处理器_高通提示低成本5G芯片更强大的笔记本电脑处理器

高通公司总裁克里斯蒂亚诺阿蒙(Cristiano Amon)在今天的柏林IFA贸易展览会的虚拟主题演讲中说&#xff0c;我们将很快看到更便宜的5G手机&#xff0c;以及更多具有更好应用兼容性的Windows-on-Snapdragon笔记本电脑。欧洲主要的电子产品展览会IFA今年被分成​​几个小组活动&am…