1. 程式人生 > >Redisson操作Redis之基礎篇

Redisson操作Redis之基礎篇

記錄redis的學習筆記  基礎篇

redis是一個開源的,C語言編寫、bsd協議的,鍵值對的快取和儲存的、通常被作為NoSql的記憶體資料庫
   鍵值包含--字串、列表、集合、有序集合、散列表、點陣圖、hyperloglogs

  set key value  -->設定鍵值對
  get key           --獲取鍵對應的值
 getset key field--設定新的鍵值 並返回key的舊值
Hget key field

 del   key       --刪除key和關聯值
Hdel key value  --刪除刪列表的欄位的值

 incr key  --以key所對應的值的數字值加一
decr key
incrby key num
decrby key num   --如果key不存在,或者key所對應的值的型別不正確  則將key所對應的值置為0 再進行操作

Exists  key  --判斷key是否存在
Hexists key field  --判斷key或者欄位是否存在

help
help del --檢視命令幫助
expire key seconds   --設定key的過期時間
quit   --退出redis的客戶端


Hget key field   --獲取hash欄位的值

主要命令

DECR, DECRBY, DEL, EXISTS, EXPIRE, GET, GETSET, HDEL, HEXISTS, HGET, HGETALL, HINCRBY, HKEYS, HLEN, HMGET, HMSET, HSET, HVALS, INCR, INCRBY, KEYS, LINDEX, LLEN, LPOP, LPUSH, LRANGE, LREM, LSET, LTRIM, MGET, MSET, MSETNX, MULTI, PEXPIRE, RENAME, RENAMENX, RPOP, RPOPLPUSH, RPUSH, SADD, SCARD, SDIFF, SDIFFSTORE, SET, SETEX, SETNX, SINTER, SINTERSTORE, SISMEMBER, SMEMBERS, SMOVE, SORT, SPOP, SRANDMEMBER, SREM, SUNION, SUNIONSTORE, TTL, TYPE, ZADD, ZCARD, ZCOUNT, ZINCRBY, ZRANGE, ZRANGEBYSCORE, ZRANK, ZREM, ZREMRANGEBYSCORE, ZREVRANGE, ZSCORE

源文件 <http://try.redis.io/> 


主要命令分為5類

string型別   --例如 get set

hash型別    --hget hgetall

list型別      -- lrange

set型別     --smembers

sortedset型別  ---zremrangebyscore

命令的返回值
      --狀態返回--status reply--OK
     --錯誤返回--error reply--(error)some 
    --整數返回--integer reply--(integer)1
    --字串返回--bulk reply--"1"--(nil)
   --多行字串回覆--multi bulk reply--1) "bar"

萬用字元
 --* ? [a-z] \.

一個redis例項 支援16個字典 使用 select 數字 進行切換 0--15


Map
SortedSet
Set
Bucket
List

相關參考資料

我是用的是java版本的  Redisson  最新版1.2.2

測試程式碼提供了12種java型別的對映 

主要有String Map  List  Set  SortedSet  Queue DQueue  CountDownLatch Lock Topic AtomicLong

BlockingQueue在Redisson1.2中還未加入  因此沒有測試

測試程式碼  必要的程式碼都已加了註釋

工具類

package com.undergrowth;

import org.redisson.Config;
import org.redisson.Redisson;
import org.redisson.core.RAtomicLong;
import org.redisson.core.RBucket;
import org.redisson.core.RCountDownLatch;
import org.redisson.core.RDeque;
import org.redisson.core.RList;
import org.redisson.core.RLock;
import org.redisson.core.RMap;
import org.redisson.core.RQueue;
import org.redisson.core.RSet;
import org.redisson.core.RSortedSet;
import org.redisson.core.RTopic;

/***
 * Redis client的輔助工具類
 * 用於連線Redis伺服器 建立不同的Redis Server對應的客戶端物件
 * @author u1
 *
 */
public class RedisUtils {
	
	private static RedisUtils redisUtils;
	
	private RedisUtils(){}
	
	/**
	 * 提供單例模式
	 * @return
	 */
	public static RedisUtils getInstance(){
		if(redisUtils==null) 
			synchronized (RedisUtils.class) {
				if(redisUtils==null) redisUtils=new RedisUtils();
			}
		return redisUtils;
	}
	
	
	/**
	 * 使用config建立Redisson
	 * Redisson是用於連線Redis Server的基礎類
	 * @param config
	 * @return
	 */
	public Redisson getRedisson(Config config){
		Redisson redisson=Redisson.create(config);
		System.out.println("成功連線Redis Server");
		return redisson;
	} 
	
	/**
	 * 使用ip地址和埠建立Redisson
	 * @param ip
	 * @param port
	 * @return
	 */
	public Redisson getRedisson(String ip,String port){
		Config config=new Config();
		config.useSingleServer().setAddress(ip+":"+port);
		Redisson redisson=Redisson.create(config);
		System.out.println("成功連線Redis Server"+"\t"+"連線"+ip+":"+port+"伺服器");
		return redisson;
	}
	
	/**
	 * 關閉Redisson客戶端連線
	 * @param redisson
	 */
	public void closeRedisson(Redisson redisson){
		redisson.shutdown();
		System.out.println("成功關閉Redis Client連線");
	}
	
	/**
	 * 獲取字串物件
	 * @param redisson
	 * @param t
	 * @param objectName
	 * @return
	 */
	public <T> RBucket<T> getRBucket(Redisson redisson,String objectName){
		RBucket<T> bucket=redisson.getBucket(objectName);
		return bucket;
	}
	
	/**
	 * 獲取Map物件
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <K,V> RMap<K, V> getRMap(Redisson redisson,String objectName){
		RMap<K, V> map=redisson.getMap(objectName);
		return map;
	}
	
	/**
	 * 獲取有序集合
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <V> RSortedSet<V> getRSortedSet(Redisson redisson,String objectName){
		RSortedSet<V> sortedSet=redisson.getSortedSet(objectName);
		return sortedSet;
	}
	
	/**
	 * 獲取集合
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <V> RSet<V> getRSet(Redisson redisson,String objectName){
		RSet<V> rSet=redisson.getSet(objectName);
		return rSet;
	}
	
	/**
	 * 獲取列表
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <V> RList<V> getRList(Redisson redisson,String objectName){
		RList<V> rList=redisson.getList(objectName);
		return rList;
	}
	
	/**
	 * 獲取佇列
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <V> RQueue<V> getRQueue(Redisson redisson,String objectName){
		RQueue<V> rQueue=redisson.getQueue(objectName);
		return rQueue;
	}
	
	/**
	 * 獲取雙端佇列
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <V> RDeque<V> getRDeque(Redisson redisson,String objectName){
		RDeque<V> rDeque=redisson.getDeque(objectName);
		return rDeque;
	}
	
	/**
	 * 此方法不可用在Redisson 1.2 中 
	 * 在1.2.2版本中 可用
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	/**
	public <V> RBlockingQueue<V> getRBlockingQueue(Redisson redisson,String objectName){
		RBlockingQueue rb=redisson.getBlockingQueue(objectName);
		return rb;
	}*/
	
	/**
	 * 獲取鎖
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public RLock getRLock(Redisson redisson,String objectName){
		RLock rLock=redisson.getLock(objectName);
		return rLock;
	}
	
	/**
	 * 獲取原子數
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public RAtomicLong getRAtomicLong(Redisson redisson,String objectName){
		RAtomicLong rAtomicLong=redisson.getAtomicLong(objectName);
		return rAtomicLong;
	}
	
	/**
	 * 獲取記數鎖
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public RCountDownLatch getRCountDownLatch(Redisson redisson,String objectName){
		RCountDownLatch rCountDownLatch=redisson.getCountDownLatch(objectName);
		return rCountDownLatch;
	}
	
	/**
	 * 獲取訊息的Topic
	 * @param redisson
	 * @param objectName
	 * @return
	 */
	public <M> RTopic<M> getRTopic(Redisson redisson,String objectName){
		 RTopic<M> rTopic=redisson.getTopic(objectName);
		 return rTopic;
	}
	
	
}

測試程式碼

import io.netty.util.concurrent.Future;

import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.redisson.Redisson;
import org.redisson.core.MessageListener;
import org.redisson.core.RAtomicLong;
import org.redisson.core.RBucket;
import org.redisson.core.RCountDownLatch;
import org.redisson.core.RDeque;
import org.redisson.core.RList;
import org.redisson.core.RLock;
import org.redisson.core.RMap;
import org.redisson.core.RQueue;
import org.redisson.core.RSet;
import org.redisson.core.RSortedSet;
import org.redisson.core.RTopic;

import com.undergrowth.RedisUtils;

public class RedisUtilsTest {

	Redisson redisson;

	/**
	 * 每次在測試方法執行之前 執行此方法
	 * 建立客戶端連線伺服器的redisson物件
	 */
	@Before
	public void before() {
		String ip = "192.168.1.160";
		String port = "6379";
		redisson = RedisUtils.getInstance().getRedisson(ip, port);
	}

	/**
	 * 每次測試方法執行完之後 執行此方法
	 * 用於關閉客戶端連線伺服器的redisson物件
	 */
	@After
	public void after(){
		RedisUtils.getInstance().closeRedisson(redisson);
	}
	
	/**
	 * RBucket 對映為 redis server 的 string 型別
	 * 只能存放最後儲存的一個字串
	 * redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testBucket
	 * 檢視key的值 ---->get testBucket
	 */
	@Test
	public void testGetRBucket() {
		RBucket<String> rBucket=RedisUtils.getInstance().getRBucket(redisson, "testBucket");
		//同步放置
		rBucket.set("redisBucketASync");
		//非同步放置
		rBucket.setAsync("測試");
		String bucketString=rBucket.get();
		System.out.println(bucketString);
	}

	/**
	 * RMap  對映為  redis server 的 hash 型別
	 * 分為
	 * put(返回鍵值) 、 fast(返回狀態)
	 * 同步    非同步
	 * redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testMap
	 * 檢視key的值 ---->hgetall testMap
	 * @throws InterruptedException
	 * @throws ExecutionException
	 */
	@Test
	public void testGetRMap() throws InterruptedException, ExecutionException {
		RMap<String, Integer> rMap=RedisUtils.getInstance().getRMap(redisson, "testMap");
		//清除集合
		rMap.clear();
		//新增key-value 返回之前關聯過的值
		Integer firrtInteger=rMap.put("111", 111);
		System.out.println(firrtInteger);
		//新增key-value 返回之前關聯過的值
		Integer secondInteger=rMap.putIfAbsent("222", 222);
		System.out.println(secondInteger);
		//移除key-value
		Integer thirdInteger=rMap.remove("222");
		System.out.println(thirdInteger);
		//新增key-value 不返回之前關聯過的值
		boolean third=rMap.fastPut("333", 333);
		System.out.println(third);
		Future<Boolean> fiveFuture=rMap.fastPutAsync("444", 444);
		System.out.println(fiveFuture.isSuccess());
		//非同步移除key
		Future<Long> sixFuture=rMap.fastRemoveAsync("444");
		System.out.println(String.valueOf(sixFuture.get()));
		//遍歷集合
		for(String key :rMap.keySet()){
			System.out.println(key+":"+rMap.get(key));
		}
		
	}

	/**
	 * RSortedSet 對映為 redis server 的 list 型別
	 * 儲存以有序集合的形式存放
	 *  redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testSortedSet
	 * 檢視key的值 ---->lrange testSortedSet 0 10
	 */
	@Test
	public void testGetRSortedSet() {
		RSortedSet<Integer> rSortedSet=RedisUtils.getInstance().getRSortedSet(redisson, "testSortedSet");
		//清除集合
		rSortedSet.clear();
		rSortedSet.add(45);
		rSortedSet.add(12);
		rSortedSet.addAsync(45);
		rSortedSet.add(100);
		//輸出結果集
		System.out.println(Arrays.toString(rSortedSet.toArray()));;
	}

	/**
	 * RSet 對映為 redis server 的set 型別
	 *  redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testSet
	 * 檢視key的值 ---->smembers testSet 
	 */
	@Test
	public void testGetRSet() {
		RSet<Integer> rSet=RedisUtils.getInstance().getRSet(redisson, "testSet");
		//清除集合
		rSet.clear();
		Collection<Integer> c=Arrays.asList(12,45,12,34,56,78);
		rSet.addAll(c);
		//輸出結果集
		System.out.println(Arrays.toString(rSet.toArray()));
	}

	/**
	 * RList 對映為 redis server的list型別
	 *  redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testList
	 * 檢視key的值 ---->lrange testList 0 10
	 */
	@Test
	public void testGetRList() {
		RList<Integer> rList=RedisUtils.getInstance().getRList(redisson, "testList");
		//清除集合
		rList.clear();
		Collection<Integer> c=Arrays.asList(12,45,12,34,56,78);
		rList.addAll(c);
		//輸出結果集
		System.out.println(Arrays.toString(rList.toArray()));
	}

	/**
	 * RQueue 對映為 redis server的list型別
	 * 佇列--先入先出
	 *  redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testQueue
	 * 檢視key的值 ---->lrange testQueue 0 10 
	 */
	@Test
	public void testGetRQueue() {
		RQueue<Integer> rQueue=RedisUtils.getInstance().getRQueue(redisson, "testQueue");
		//清除佇列
		rQueue.clear();
		Collection<Integer> c=Arrays.asList(12,45,12,34,56,78);
		rQueue.addAll(c);
		//檢視佇列元素
		System.out.println(rQueue.peek());
		System.out.println(rQueue.element());
		//移除佇列元素
		System.out.println(rQueue.poll());
		System.out.println(rQueue.remove());
		//輸出佇列
		System.out.println(Arrays.toString(rQueue.toArray()));
	}

	/**
	 * RDeque 對映為 redis server 的 list型別
	 * 雙端佇列--對頭和隊尾都可新增或者移除,也遵循佇列的先入先出
	 *  redis server 命令:
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testDeque
	 * 檢視key的值 ---->lrange testDeque 0 10  
	 */
	@Test
	public void testGetRDeque() {
		RDeque<Integer> rDeque=RedisUtils.getInstance().getRDeque(redisson, "testDeque");
		//清空雙端佇列
		rDeque.clear();
		Collection<Integer> c=Arrays.asList(12,45,12,34,56,78);
		rDeque.addAll(c);
		//對頭新增元素
		rDeque.addFirst(100);
		//隊尾新增元素
		rDeque.addLast(200);
		System.out.println(Arrays.toString(rDeque.toArray()));
		//檢視對頭元素
		System.out.println(rDeque.peek());
		System.out.println(rDeque.peekFirst());
		//檢視隊尾元素
		System.out.println(rDeque.peekLast());
		System.out.println(Arrays.toString(rDeque.toArray()));
		//移除對頭元素
		System.out.println(rDeque.poll());
		System.out.println(rDeque.pollFirst());
		//移除隊尾元素
		System.out.println(rDeque.pollLast());
		System.out.println(Arrays.toString(rDeque.toArray()));
		//新增隊尾元素
		System.out.println(rDeque.offer(300));
		System.out.println(rDeque.offerFirst(400));
		System.out.println(Arrays.toString(rDeque.toArray()));
		//移除對頭元素
		System.out.println(rDeque.pop());
		//顯示雙端佇列的元素
		System.out.println(Arrays.toString(rDeque.toArray()));
		
	}

	/**
	 * RLock 對映為redis server的string 型別
	 * string中存放 執行緒標示、執行緒計數
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testLock1
	 * 檢視key的值 ---->get testLock1 
	 * 如果想在redis server中 看到 testLock1
	 * 就不能使用   rLock.unlock();
	 * 因為使用 rLock.unlock(); 之後 就會刪除redis server中的 testLock1
	 * 
	 */
	@Test
	public void testGetRLock() {
		RLock rLock=RedisUtils.getInstance().getRLock(redisson, "testLock1");
		if(rLock.isLocked()) rLock.unlock();
		else rLock.lock();
		//
		System.out.println(rLock.getName());
		System.out.println(rLock.getHoldCount());
		System.out.println(rLock.isLocked());
		rLock.unlock();
	}

	/**
	 * RAtomicLong 對映為redis server的string 型別
	 * string中數值
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testAtomicLong
	 * 檢視key的值 ---->get testAtomicLong 
	 */
	@Test
	public void testGetRAtomicLong() {
		RAtomicLong rAtomicLong=RedisUtils.getInstance().getRAtomicLong(redisson, "testAtomicLong");
		rAtomicLong.set(100);
		System.out.println(rAtomicLong.addAndGet(200));
		System.out.println(rAtomicLong.decrementAndGet());
		System.out.println(rAtomicLong.get());
	}

	/**
	 * RCountDownLatch 對映為redis server的string 型別
	 * string中數值
	 * 閉鎖--等待其他執行緒中的操作都做完 在進行操作
	 * 檢視所有鍵---->keys *
	 * 檢視key的型別--->type testCountDownLatch
	 * 檢視key的值 ---->get testCountDownLatch 
	 */
	@Test
	public void testGetRCountDownLatch() throws InterruptedException {
		RCountDownLatch rCountDownLatch=RedisUtils.getInstance().getRCountDownLatch(redisson, "testCountDownLatch");
		System.out.println(rCountDownLatch.getCount());
		//rCountDownLatch.trySetCount(1l);
		System.out.println(rCountDownLatch.getCount());
		rCountDownLatch.await(10, TimeUnit.SECONDS);
		System.out.println(rCountDownLatch.getCount());
	}

	/**
	 * 訊息佇列的訂閱者
	 * @throws InterruptedException
	 */
	@Test
	public void testGetRTopicSub() throws InterruptedException {
		RTopic<String> rTopic=RedisUtils.getInstance().getRTopic(redisson, "testTopic");
		rTopic.addListener(new MessageListener<String>() {
			
			@Override
			public void onMessage(String msg) {
				// TODO Auto-generated method stub
				System.out.println("你釋出的是:"+msg);
			}
		});
		//等待發布者釋出訊息
		RCountDownLatch rCountDownLatch=RedisUtils.getInstance().getRCountDownLatch(redisson, "testCountDownLatch");
		rCountDownLatch.trySetCount(1);
		rCountDownLatch.await();
	}
	
	/**
	 * 訊息佇列的釋出者
	 */
	@Test
	public void testGetRTopicPub() {
		RTopic<String> rTopic=RedisUtils.getInstance().getRTopic(redisson, "testTopic");
		System.out.println(rTopic.publish("今天是兒童節,大家兒童節快樂"));
		//傳送完訊息後 讓訂閱者不再等待
		RCountDownLatch rCountDownLatch=RedisUtils.getInstance().getRCountDownLatch(redisson, "testCountDownLatch");
		rCountDownLatch.countDown();
	}

}

上面只是對redis的初步瞭解    接下來分模組進行研究

redisson的pom依賴

<dependencies>
		<dependency>
			<groupId>org.redisson</groupId>
			<artifactId>redisson</artifactId>
			<version>1.2.0</version>
		</dependency>
	</dependencies>

 

相關推薦

Redisson操作Redis基礎

記錄redis的學習筆記  基礎篇 redis是一個開源的,C語言編寫、bsd協議的,鍵值對的快取和儲存的、通常被作為NoSql的記憶體資料庫 鍵值包含--字串、列表、集合、有序集合、散列表、點陣圖、hyperloglogs set key value --&

redis學習 基礎(二) php操作redis

之前的基礎篇(一)已經學習了redis的含義和五種資料結構的操作,訂閱和事務。而我們學習redis就是為了輔助php的,所以這次學習php操作redis  一,環境配置 系統環境:centos php版本:5.3.3 php redis擴充套件下載:https://gith

Qt入門基礎 ( 二 ) :Qt項目建立、編譯、運行和發布過程解析

qt 5 對話 讓我 進度 qmake ctr deploy 設定 設置 轉載請註明出處:CN_Simo。 題解:   本篇內容主講Qt應用從創建到發布的整個過程,旨在幫助讀者能夠快速走進Qt的世界。   本來計劃是講解Qt源碼靜態編譯,如此的話讀者可能並不能清楚地知

Qt入門基礎 ( 一 ) :Qt4及Qt5的下載與安裝

mingw ins 第3版 點擊 調試 但我 關系 構建 eas 轉載請註明出處:CN_Simo. 導語: Qt是一個跨平臺的C++圖形界面應用程序框架。它提供給開發者建立圖形用戶界面所需的功能,廣泛用於開發GUI程序,也可用於開發非GUI程序。Qt很容易擴展,並

[轉]Eclipse插件開發基礎(1) 插件開發的基礎知識

作用 原本 services 註冊 1-1 啟動 創建 abs class 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名詞翻譯   有一些名詞在翻譯的

[轉]Eclipse插件開發基礎(3) 插件的測試與調試

case ews ... 有時 sam cancel workbench osgi ring 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JU

[轉]Eclipse插件開發基礎(4) OSGi框架

動作 update 執行 創建 class cti 指定 mpc 代碼 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html   1. 什麽是OSGi框架   O

視頻教程:Java七大外企經典面試套路基礎

視頻教程:Java七大外企經典面試套路之基礎篇 視頻教程:Java七大外企經典面試套路之基礎篇 Java是Sun公司推出的一種編程語言。它是一種通過解釋方式來執行的語言,語法規則和C++類似。同時,Java也是一種跨平臺的程序設計語言。 本教程主要給

chrome瀏覽器開發常用快捷鍵基礎-遁地龍卷風

rom 後臺 加載網頁 打開鏈接 上一個 tps 保存 參考 瀏覽器開發 1.標簽頁和窗口快捷鍵   打開新的標簽頁,並跳轉到該標簽頁 Ctrl + t   重新打開最後關閉的標簽頁,並跳轉到該標簽頁 Ctrl + Shift + t   跳轉到下一個打開的標簽頁 Ctrl

T4模板:T4模板基礎

教程 添加 介紹 9.png 輸出 com 明顯 gin ecif 一、回顧 上一篇文章 ——T4模板之菜菜鳥篇,我們囫圇吞棗的創建了與“T4模板”有關的文件。在創建各個文件的這一個過程中,我們對於T4模板有了那麽丁點的認識。現在就帶著之前的那些問題,正式的邁入對“T4模板

操作系統基礎

map 完成 數據 數組 post cos 寄存器 內部 init 一、控制系統啟動過程 1.要想順利啟動系統,bootsect.s必須讓在磁盤的固定位置上,這個工作是由 make / makefile 完成的 2.啟動保護模式以後,指令jmpi 0, 8和沒有啟動保護模式

python操作redisString操作

lis class 選擇 錯誤 post range nihao name 定義 # __author__ = ‘STEVEN‘ import redis,time # 方式1,直接鏈接操作 # r = redis.Redis(host=‘192.168.43.22‘,p

【思庫教育】2017PHP項目實戰基礎+進階+項目基礎

商品 資源庫 商城 文件引入 正則表達式 匿名 header 類和對象 多少 下載鏈接: 【思庫教育】2017PHP項目實戰基礎+進階+項目之基礎篇 小白變大牛,您的專屬資源庫! 小白變大牛,您的專屬資源庫! 內容非常充實,可以看目錄,設計的面多,項目多,技能多

Java程序員面試題JavaSE基礎

JavaSE一、JavaSE之基礎篇 1、JavaSE基礎之語法 ######(1)、簡述你對JVM,JRE,JDK的理解? JVM:java虛擬機。是一個模擬的計算機,相當於真實存在的計算機(軟件+硬件)。 JDK:是整個java的核心。程序員的產品。包括了java的運行環境、java的工具、java的

漫談Java IO基礎

等待 明顯 分發 限制 以及 經典 內核 很大的 lec Java的網絡編程如果不是專門搞服務器性能開發或者消息分發,幾乎可能涉及不到。但是它卻是面試找工作必問的一個知識點,涵蓋的知識體系也非常廣泛,從Java底層IO原理到操作系統內核組成,再到網絡TCP、UDP、HTT

python學習基礎

學習 功能 linu 輸出 程序 語言 記錄 自己的 mat python是一種實際應用較為廣泛的語言,並且python的使用是完全免費的,python是一種面向對象(oop)的語言,類模塊支持多繼承,多態等。筆者認為python最強大之處是可以靈活調用其他語言的程序為其所

PostMan工具使用基礎

p s 安裝包 soap 瀏覽器插件 www. align class lin 什麽是 PostMan工具使用之基礎篇 一.什麽是PostMan Postman一款非常流行的API調試工具。(其他測試工具 Jmeter、soapUI) 二.下載及安裝: 1.下載:

Java 8 基礎

1. lambda表示式 從java8出現以來lambda,也可稱為閉包(closure),是最重要的特性之一,它可以讓我們用簡潔流暢的程式碼完成一個功能。 很長一段時間java被吐槽是冗餘和缺乏函數語言程式設計能力的語言,隨著函數語言程式設計的流行java8種也引入了這種程式設計風

Java面試基礎(上)

題目來源於網路 後面是筆者自己提供的答案,僅供參考,如有錯誤,歡迎指正   一、基礎篇 1.1、Java基礎  面向物件的特徵:繼承、封裝和多型 final, finally, finalize 的區別 Exception、Er

小白兩部落格熟練操作MyCQL 第二

  小白兩篇部落格熟練操作MyCQL  之   第二篇 一. 檢視   檢視是一個虛擬表,其本質是根據SQL語句獲取動態的資料集,併為其命名,使用者使用時只需使用名稱即可獲取結果集, 並可以將其當做表來使用. select * fro