国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道

這篇具有很好參考價值的文章主要介紹了高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • getX / getY : 返回相對于當(dāng)前 View 左上角的 x 和 y 的坐標(biāo)
  • getRawX / getRawY : 返回的是相對于手機屏幕左上角的 x 和 y 坐標(biāo)。

TouchSlop

TouchSlop 官方解釋就是系統(tǒng)所能識別的被認為是滑動的最小距離,通俗點說就是當(dāng)手指在屏幕上滑動時,如果兩次滑動之間的距離小于這個常量,那么系統(tǒng)就認為你沒有在滑動,可以通過下面的 API 獲取該常量值,

/**

  • 系統(tǒng)所能識別出來的被認為滑動的最小距離
    */
    val scaledDoubleTapSlop = ViewConfiguration.get(context).scaledDoubleTapSlop;
    復(fù)制代碼

這個常量可以幫助我們在處理滑動時,利用該數(shù)值來做一些過濾,比如當(dāng)兩次滑動事件的滑動距離小于這個值,我們就可以未達到滑動距離的臨界點,因此就可以認為他們不是滑動,這樣做可以有更好的用戶體驗。

VelocityTracker 、GestureDetector 和 Scroller

VelocityTracker

VelocityTracker 的作用是用于追蹤滑動過程中的速度,包括水平和豎直方向的速度。它的使用過程很簡單,首先,在 View 的 onTouchEvent 方法中追蹤當(dāng)前單擊事件的速度;

/**

  • 速度追蹤
    */
    val velocityTracker = VelocityTracker.obtain()
    velocityTracker.addMovement(event)
    復(fù)制代碼

接著,當(dāng)我們先知道當(dāng)前的滑動速度時,這個時候可以采用如下方式來獲得當(dāng)前的速度:

velocityTracker.computeCurrentVelocity(1000)
val xVelocity = velocityTracker.getXVelocity()
val yVelocity = velocityTracker.getYVelocity()
復(fù)制代碼

這一步有 2 點需要注意,其一 獲取速度之前必須先計算速度,既 getXVelocity 和 getYVelocity 這兩個方法的前面必須要調(diào)用 computeCurrentVelocity 方法,第二點,這里的速度是指一段時間內(nèi)手指所滑過的像素值,比如將時間間隔設(shè)為 1000 ms 時,那么就是在 1s 內(nèi)手指在水平方向從左向右滑動 500 px 那么水平速度就是 500,注意速度可以為負數(shù),當(dāng)手指從右往左滑動時,水平方向速度即為負值,這個需要理解一下。速度的計算可以用如下公式:

速度 = ( 終點位置 - 起點位置) / 時間段

根據(jù)上面的公式再加上 Android 系統(tǒng)的坐標(biāo)體系,可以知道,手指逆著坐標(biāo)系的正方向滑動,所產(chǎn)生的速度就為負值,另外,computeCurrentVelocity 這個方法的參數(shù)表示的是一個時間單元或者說時間間隔,它的單位是毫秒 (ms), 計算速度時得到的速度就是在這個時間間隔內(nèi)手指在水平或豎直方向上所滑動的像素值。

針對上面的例子,如果我們通過 obtain.computeCurrentVelocity(1000) 來獲取速度,那么得到的速度就是手指在 1000 ms 毫秒內(nèi)所滑過的 px 值,因此可以直接套上面公式:

水平速度 = 500 px / 每 1000 ms

既水平速度為 500 , 這里需要好好理解一下。

最后,當(dāng)不需要它的時候,需要調(diào)用 clear 方法來重置并回收內(nèi)存:

velocityTracker.clear()
velocityTracker.recycle()
復(fù)制代碼

VelocityTracker 的 API 簡單明了,我們可以記住一個套路。

  1. 在觸摸事件為 ACTION_DOWN或是進入 onTouchEvent方法時,通過 obtain獲取一個 VelocityTracker
  2. 在觸摸事件為 ACTION_UP時,調(diào)用 recycle進行釋放 VelocityTracker
  3. 在進入 onTouchEvent方法或?qū)?ACTION_DOWN、ACTION_MOVE、ACTION_UP的事件通過 addMovement方法添加進 VelocityTracker
  4. 在需要獲取速度的地方,先調(diào)用 computeCurrentVelocity方法,然后通過 getXVelocity、getYVelocity獲取對應(yīng)方向的速度

解鎖更多姿勢可以參考該文章

GestureDetector

GestureDetector 的作用用于輔助檢測用戶的單機、滑動、長按、雙擊等行為。要使用 GestureDetector 也不復(fù)雜,參考如下過程:

  1. 首先創(chuàng)建一個 GestureDetector 對象并實現(xiàn) OnGestureListener 接口,根據(jù)需要我們還可以實現(xiàn) OnDoubleTapListener 從而能夠監(jiān)聽雙擊行為;

val mGetDetector = GestureDetector(context,this)
//解決長按屏幕后無法拖動的現(xiàn)象
mGetDetector.setIsLongpressEnabled(false)
復(fù)制代碼

  1. 接管目前 View 的 onTouchEvent 方法,在 View 的 onTouchEvent 方法中添加如下代碼:

override fun onTouchEvent(event: MotionEvent) = mGetDetector.onTouchEvent(event)
復(fù)制代碼

做完了上面這 2 步,我們就可以有選擇的實現(xiàn) OnGestureListener 和 OnDoubleTapListener 中的方法了,這 2 個接口中的方法介紹如下所示:

OnGestureListener / 方法名 描述
onDown 手指輕輕觸摸屏幕的一瞬間,由 1 個 ACTION_DOWN 觸發(fā)
onShowPress 手指輕輕觸摸屏幕, 尚未松開或拖動,由一個 ACTION_DOWN 觸發(fā),它強調(diào)的是沒有松開或者拖動的狀態(tài)
onSingleTapUp 手指(輕輕觸摸屏幕后)松開,伴隨著 1 個 MotinEvent.ACTION_UP 而觸發(fā),這是單擊行為
onScroll 手指按下屏幕并拖動,由 1 個 ACTION_DOWN ,多個 ACTION_MOVE 觸發(fā),這是拖動行為
onLongPress 用戶長久的按著屏幕不放,既長按
onFling 用戶按下觸摸屏、快速滑動后松開,由 1 個 ACTION_DOWN 、多個 ACTION_MOVE 和 1 個 ACTION_UP 觸發(fā),這是快速滑動行為
OnDoubleTapListener / 方法名 描述
onDoubleTap 雙擊,由 2 次連續(xù)的單擊組成,它不可能和 onSingleTapConfirmed 共存
onSingleTapConfirmed 嚴格的單機行為(注意它和 onSingleTapUp 的區(qū)別,如果觸發(fā)了 onSingleTapConfirmed, 那么后面不可能再緊跟著另一個單擊行為,既這只可能是單擊,而不可能是雙擊中的一次單擊)
onDoubleTapEvent 表示發(fā)生了雙擊行為,在雙擊的期間, ACTION_DOWN 、ACTION_MOVE 和 ACTION_UP 都會觸發(fā)此回調(diào)

上面圖表里面的方法很多,但是并不是所有的方法都會被時常用到,在日常開發(fā)中,比較常用的有 onSingleTapUp 單擊、onFling 快速滑動 、onScroll 拖動 、onLongPress 長按、onDoubleTap 雙擊 。另外在說一下,在實際開發(fā)中,可以不使用 GestureDector, 完全可以自己在 View 的 OnTouchEvent 方法中實現(xiàn)所需要的監(jiān)聽,這個看實際場景跟個人喜好了。

Scroller

Scroller 用于實現(xiàn) View 的彈性滑動。我們知道,當(dāng)使用 View 的 scrollTo / scrollBy 方法進行滑動時,其過程是瞬間完成的,沒有一個過渡的效果體驗是不友好的,那么這個時候就可以借助 Scroller 來實現(xiàn)過渡效果的滑動。Scroller 本身無法讓 View 彈性滑動,它需要和 View 的 computeScroll 方法配合使用才能共同完成這個功能。那么如何使用 Scroller 呢?它的典型代碼可以說是固定的,如下所示:

class ScrollerSample_1 : LinearLayout {

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)

constructor(context: Context) : super(context)

/**

  • 定義滑動 Scroller
    */
    private val mScroller = Scroller(context)

public fun smoothScrollTo(destX: Int = -100, destY: Int = -100) {
//滑動了的位置
val scrollX = scrollY;
val delta = destY - scrollY;
//2000 ms 內(nèi)滑動到 destX 位置,效果就是緩慢滑動
mScroller.startScroll(scrollX, 0, 0, delta, 2000)
invalidate()
}

override fun computeScroll() {
if (mScroller.computeScrollOffset()) {
scrollTo(mScroller.currX, mScroller.currY)
postInvalidate()
}
}
}
復(fù)制代碼

主要實現(xiàn)有 3 步:

  • 第一步實例化 Scroller

  • 第一步調(diào)用 Scroller 的 startScroll 方法,讓其內(nèi)部保存新的變量值

  • 第二步重寫 View 的 computeScroll 方法,調(diào)度自身的 scrollTo 方法,讓其緩慢彈性滑動

View 的滑動

上面咱們介紹了 View 的一些基本知識和一些位置參數(shù)概念,該小節(jié)將來介紹一個重要的內(nèi)容 View 的滑動

現(xiàn)在市面上所有軟件應(yīng)該幾乎都具備滑動的功能吧?可以說滑動功能是一個 APP 的標(biāo)配,滑動在 Android 開發(fā)中具有很重要的作用,因此,掌握滑動的方法是實現(xiàn)優(yōu)化用戶體驗的基礎(chǔ)?;瑒涌梢酝ㄟ^以下三種方式來實現(xiàn),當(dāng)然并不是只有三種,其它還得靠自己去挖掘。其方式如下:

  1. 通過 View 本身提供的 scrollTo / scrollBy 方法來實現(xiàn)滑動(上一小節(jié)咱們已經(jīng)用到 scrollTo 方法了)
  2. 通過動畫給 View 施加平移效果來實現(xiàn)滑動
  3. 通過改變 View 的位置參數(shù)

scrollTo、scrollBy

為了實現(xiàn) View 的滑動看,自身專門提供了 scrollTo 和 scrollBy 方法來實現(xiàn),如下所示:

//View.java
public void scrollTo(int x, int y) {
/**

  • 傳入的位置跟自己目前所滑動的位置不一致才開始滑動
    */
    if (mScrollX != x || mScrollY != y) {
    int oldX = mScrollX;
    int oldY = mScrollY;
    mScrollX = x;
    mScrollY = y;
    invalidateParentCaches();
    onScrollChanged(mScrollX, mScrollY, oldX, oldY);
    if (!awakenScrollBars()) {
    postInvalidateOnAnimation();
    }
    }
    }

public void scrollBy(int x, int y) {
/**

  • 其內(nèi)部也是調(diào)用了 View 的 scrollTo 方法,把當(dāng)前滑動的 mScrollX,mScrollY 分別加上指定的位 * 置,然后滑動,多次調(diào)用相當(dāng)于接著上一次位置滑動
    */
    scrollTo(mScrollX + x, mScrollY + y);
    }

通過上面的源碼我們知道 scrollBy 方法內(nèi)部是調(diào)用了 scrollTo 方法,那么他們之前有什么區(qū)別呢?請看下面分析:

scrollTo: 基于所傳遞的 x , y 坐標(biāo)來進行絕對滑動,重復(fù)點擊如果不改變滑動參數(shù),那么內(nèi)部就會做判斷,相等就不會再滑動了。

scrollBy: 通過源碼我們知道內(nèi)部調(diào)用了 scrollTo 方法傳遞了 mScrollX + x, mScrollY + y 那么這是什么意思呢?其實就是基于當(dāng)前的位置來做的相對滑動。重復(fù)點擊滑動會繼續(xù)在當(dāng)前所在的位置上繼續(xù)滑動。

還有一個知識點我們要知道,就是這里出現(xiàn)了 2 個默認的變量 mScrollX , mScrollY 通過 scrollTo 內(nèi)部實現(xiàn)我們知道,其傳遞進去的 x,y 分別賦值給了 mScrollX 和 mScrollY 那么它們在這里這么做的具體含義是什么呢?它們可以通過 getScrollX 和 getScrollY 來獲取具體的值。下面我們就來具體分析下:

mScrollX: 在滑動過程中,mScrollX 的值總是等于 View 左邊緣和 View 內(nèi)容左邊緣在水平方向的距離。并且當(dāng) View 左邊緣在 View 內(nèi)容左邊緣的右邊時, mScrollX 值為正,反之為負,通俗的來講就是如果從左向右滑動,那么 mScrollX 為 負值,反之為正值。

mScrollY: 在滑動過程中,mScrollY 的值總是等于 View 上邊緣和 View 內(nèi)容上邊緣在水平方向的距離。并且當(dāng) View 上邊緣在 View 內(nèi)容上邊緣下邊時,mScrollY 為正,反之為負,通俗的來講就是如果從上往下滑動,那么 mScrollY 為負值,反之為正值。

上面解釋了這么多,為了更好的理解我這里就畫一張水平跟豎值方向都滑動了 100 px, 然后來看對應(yīng)的 mScrollX 和 mScrollY 值是多少,請看下圖:

高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui

注意: 在使用 scrollBy / scrollTo 對 View 滑動時,只能將 View 的內(nèi)容進行移動,并不能將 View 本身進行移動。

使用動畫

上一小節(jié)我們知道可以采用 View 自身的 scrollTo / scrollBy 方法來實現(xiàn)滑動功能,本小節(jié)介紹另外一個實現(xiàn)滑動的方式,即使用動畫,通過動畫我們能夠讓一個 View 進行平移,而平移就是一種滑動。使用動畫來移動 View ,主要是操作 View 的 translationX 和 translationY 屬性,可以采用傳統(tǒng)的 View 動畫,也可以使用屬性動畫,如果采用屬性動畫注意要兼容 3.0 一下版本,當(dāng)然現(xiàn)在都 androidX 版本了,可以看實際項目情況來具體處理,實現(xiàn)滑動的平移代碼如下:

  1. 采用 View 動畫,將 View 在 100ms 內(nèi)從原始位置向右下角移動 100 px
<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android=“http://schemas.android.com/apk/res/android”
android:fillAfter=“true”



復(fù)制代碼

注意: View 動畫并不能真正改變 View 的位置。

  1. 采用屬性動畫,將 View 在 100ms 內(nèi)從原始位置向右平移 100 px

//動畫屬性有 translationX 、translationY 、alpha 、rotation、rotationX、rotationY 、scaleX、scaleY
val objAnimator = ObjectAnimator.ofFloat(View targetView,“translationX”,0f,100f).setDuration(100).start()
復(fù)制代碼

改變 View LayoutParams

本小節(jié)將介紹第三種實現(xiàn) View 滑動的方法,那就是直接改變布局參數(shù),即 LayoutParams。比如我們想把一個 LinearLayout 向右平移 100px 只需要將它的 LayoutParams 內(nèi)部的 marginLeft 參數(shù)的值增加 100 px 就行,代碼如下:

val layoutParams = scroller.layoutParams as LinearLayout.LayoutParams
layoutParams.let {
it.leftMargin += 100
it.weight += 100
}
scroller.requestLayout()
復(fù)制代碼

通過改變 LinearLayout 的 LayoutParams 參數(shù)同樣也實現(xiàn)了 View 的滑動。

滑動方式對比

上面分別介紹了 3 種不同的滑動方式,它們都能實現(xiàn) View 的滑動,那么它們之間的差異是什么呢?請看下表:

實現(xiàn)方式 優(yōu)點 缺點
scrollTo/scrollBy 專門用于 View 的滑動,比較方便地實現(xiàn)滑動效果且不影響自身的單機事件 只能滑動 View 的內(nèi)容,不能滑動 View 本身
動畫 復(fù)雜動畫使用屬性動畫來完成比較簡單 View 動畫不能改變自身屬性
改變布局參數(shù) 使用不簡潔

針對上面情況這里做一個小總結(jié):

  • scrollTo/scrollBy 操作簡單,適合對 View 內(nèi)容的滑動
  • 動畫操作簡單,主要適合用于沒有交互的 View 和實現(xiàn)復(fù)雜的動畫效果
  • 改變布局參數(shù)操作稍微復(fù)雜,適用于有交互的 View

彈性滑動

知道了 View 如何滑動,我們還要知道如何實現(xiàn) View 的彈性滑動,比較生硬的滑動體驗確實很差,下面我們介紹 View 如何實現(xiàn)彈性滑動

使用 Scroller

請參考該篇 View基礎(chǔ)知識#Scroller 介紹

通過動畫

高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui

利用動畫的特性來實現(xiàn)一些動畫不能實現(xiàn)的效果,模仿 Scroller 來實現(xiàn) View 的彈性滑動,代碼如下:

val valueAnimator = ValueAnimator.ofInt(0, 1).setDuration(2000);
valueAnimator.addUpdateListener {
val animatedFraction = it.animatedFraction
scroller.scrollTo(- (100 * animatedFraction).toInt(), 0)
}
valueAnimator.start()

在上述代碼中,我們的動畫本質(zhì)上沒有作用于任何對象上,它只是在 2s 內(nèi)完成了整個動畫過程,利用這個特性我們就可以在動畫的每一幀到來時獲取動畫完成的比例,然后根據(jù)這個比例計算滑動的距離。

通過延時策略

該小節(jié)我們繼續(xù)介紹另一種實現(xiàn)彈性滑動的效果,即延時策略,它的核心思想是通過發(fā)送一系列延時消息從而達到一種漸近式的效果,代碼如下:

val MESSAGE_SCROLLER_TO = 1;
val FRAME_COUNT = 30;
val DELAYED_TIME = 33L;
var mCount = 0;
private val mHandler = object : Handler() {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
when (msg.what) {
MESSAGE_SCROLLER_TO -> {
mCount++
if (mCount <= FRAME_COUNT) {

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)Android工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Android移動開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔(dān)。
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Android開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加V獲?。簐ip204888 (備注Android)
高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui

【附】相關(guān)架構(gòu)及資料

高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui

高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道,2024年程序員學(xué)習(xí),ui

往期Android高級架構(gòu)資料、源碼、筆記、視頻。高級UI、性能優(yōu)化、架構(gòu)師課程、NDK、混合式開發(fā)(ReactNative+Weex)微信小程序、Flutter全方面的Android進階實踐技術(shù),群內(nèi)還有技術(shù)大牛一起討論交流解決問題。

本文已被CODING開源項目:《Android學(xué)習(xí)筆記總結(jié)+移動架構(gòu)視頻+大廠面試真題+項目實戰(zhàn)源碼》收錄

一個人可以走的很快,但一群人才能走的更遠。如果你從事以下工作或?qū)σ韵赂信d趣,歡迎戳這里加入程序員的圈子,讓我們一起學(xué)習(xí)成長!

AI人工智能、Android移動開發(fā)、AIGC大模型、C C#、Go語言、Java、Linux運維、云計算、MySQL、PMP、網(wǎng)絡(luò)安全、Python爬蟲、UE5、UI設(shè)計、Unity3D、Web前端開發(fā)、產(chǎn)品經(jīng)理、車載開發(fā)、大數(shù)據(jù)、鴻蒙、計算機網(wǎng)絡(luò)、嵌入式物聯(lián)網(wǎng)、軟件測試、數(shù)據(jù)結(jié)構(gòu)與算法、音視頻開發(fā)、Flutter、IOS開發(fā)、PHP開發(fā)、.NET、安卓逆向、云計算文章來源地址http://www.zghlxwxcb.cn/news/detail-859144.html

構(gòu)視頻+大廠面試真題+項目實戰(zhàn)源碼》]( )收錄**

一個人可以走的很快,但一群人才能走的更遠。如果你從事以下工作或?qū)σ韵赂信d趣,歡迎戳這里加入程序員的圈子,讓我們一起學(xué)習(xí)成長!

AI人工智能、Android移動開發(fā)、AIGC大模型、C C#、Go語言、Java、Linux運維、云計算、MySQL、PMP、網(wǎng)絡(luò)安全、Python爬蟲、UE5、UI設(shè)計、Unity3D、Web前端開發(fā)、產(chǎn)品經(jīng)理、車載開發(fā)、大數(shù)據(jù)、鴻蒙、計算機網(wǎng)絡(luò)、嵌入式物聯(lián)網(wǎng)、軟件測試、數(shù)據(jù)結(jié)構(gòu)與算法、音視頻開發(fā)、Flutter、IOS開發(fā)、PHP開發(fā)、.NET、安卓逆向、云計算

到了這里,關(guān)于高級-UI-從零到整-(一)-View-的基礎(chǔ)知識你必須知道的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • C++ Webserver從零開始:基礎(chǔ)知識(五)——信號

    Linux系統(tǒng)中,信號是一種通信的方式,其通常用作用戶,系統(tǒng)或進程給 目標(biāo)進程 發(fā)送的信息。 信號的作用:通知 目標(biāo)進程 某個狀態(tài)的改變或系統(tǒng)異常。 產(chǎn)生的條件: 對于終端程序:可以是用戶輸入的特殊的終端字符,比如ctrl+c是中斷信號 系統(tǒng)異常,如浮點異?;蚍欠▋?nèi)存

    2024年01月23日
    瀏覽(21)
  • 線性代數(shù)之美:從基礎(chǔ)知識到高級技巧

    線性代數(shù)是數(shù)學(xué)的一個分支,它研究的是線性方程組和線性空間等概念。線性代數(shù)在許多科學(xué)和工程領(lǐng)域都有廣泛的應(yīng)用,例如機器學(xué)習(xí)、計算機圖形學(xué)、信號處理等。在這篇文章中,我們將從基礎(chǔ)知識到高級技巧來詳細講解線性代數(shù)的核心概念、算法原理、具體操作步驟以

    2024年01月20日
    瀏覽(22)
  • 深入理解 C++ 語法:從基礎(chǔ)知識到高級應(yīng)用

    讓我們將以下代碼分解以更好地理解它: 示例 示例解釋 第 1 行: #include iostream 是一個頭文件庫,它讓我們可以使用輸入和輸出對象,比如 cout (在第 5 行使用)。頭文件為 C++ 程序添加功能。 第 2 行: using namespace std 表示我們可以使用標(biāo)準庫中的對象和變量名稱。 如果你

    2024年03月23日
    瀏覽(21)
  • 使用 Python 中的 Langchain 從零到高級快速進行工程

    使用 Python 中的 Langchain 從零到高級快速進行工程

    大型語言模型 (LLM) 的一個重要方面是這些模型用于學(xué)習(xí)的參數(shù)數(shù)量。模型擁有的參數(shù)越多,它就能更好地理解單詞和短語之間的關(guān)系。這意味著具有數(shù)十億個參數(shù)的模型有能力生成各種創(chuàng)造性的文本格式,并以信息豐富的方式回答開放式和挑戰(zhàn)性的問題。 ChatGPT 等法學(xué)碩士利

    2024年02月13日
    瀏覽(36)
  • 突破編程_C++_高級教程(模板編程的基礎(chǔ)知識)

    C++ 的模板編程是一種編程技術(shù),它允許程序員編寫處理不同類型數(shù)據(jù)的通用代碼。通過使用模板,可以創(chuàng)建與特定數(shù)據(jù)類型無關(guān)的函數(shù)或類,這些函數(shù)或類在編譯時可以根據(jù)需要生成特定數(shù)據(jù)類型的版本。這增加了代碼的復(fù)用性、靈活性和類型安全性。 從本質(zhì)上來說, C++

    2024年02月19日
    瀏覽(22)
  • C++ Webserver從零開始:基礎(chǔ)知識(三)——Linux服務(wù)器程序框架

    C++ Webserver從零開始:基礎(chǔ)知識(三)——Linux服務(wù)器程序框架

    目錄 前言 一.服務(wù)器編程基礎(chǔ)框架 C/S模型 主要框架 二.I/O模型 阻塞I/O 非阻塞I/O 異步I/O 三.兩種高效的事件處理模式 Reactor Proactor 四.模擬Proactor模式 五.半同步/半異步的并發(fā)模式 六.有限狀態(tài)機 七.其他提高服務(wù)器性能的方法 池 數(shù)據(jù)復(fù)制 上下文切換和鎖 ????????這一章是

    2024年02月22日
    瀏覽(24)
  • C++ 字符串完全指南:學(xué)習(xí)基礎(chǔ)知識到掌握高級應(yīng)用技巧

    字符串用于存儲文本。 一個字符串變量包含由雙引號括起來的一組字符: 示例 創(chuàng)建一個 string 類型的變量并為其賦值: 字符串連接可以使用 + 運算符來實現(xiàn),生成一個新的字符串。 示例: 在上面的示例中,我們在 firstName 后面添加了一個空格,以便在輸出時在 \\\"John\\\" 和 \\\"D

    2024年04月08日
    瀏覽(34)
  • 軟考高級系統(tǒng)架構(gòu)設(shè)計師(三) 基礎(chǔ)知識之操作系統(tǒng)1進程

    軟考高級系統(tǒng)架構(gòu)設(shè)計師(三) 基礎(chǔ)知識之操作系統(tǒng)1進程

    目錄 概要 ?操作系統(tǒng) 概述 ?編輯 進程管理 進程的狀態(tài) ?進程管理-PV操作 利用PV操作實現(xiàn)進程的同步 ?進程管理-前趨圖 ?進程管理-死鎖 操作系統(tǒng)的功能: 進程管理、存儲管理、文件管理、作業(yè)管理、設(shè)備管理 操作系統(tǒng)的特征 并發(fā)性 共享性 虛擬性 不確定性 ? 進程是程序

    2024年02月10日
    瀏覽(91)
  • Rust 全面指南:從基礎(chǔ)到高級,一網(wǎng)打盡 Rust 的編程知識

    因為在學(xué)習(xí)Rust過程中,因為代碼量不是太多,所以有一些學(xué)完就忘了,特此記錄一些Rust知識點 Rust是什么? Rust是一種現(xiàn)代的、強類型的、系統(tǒng)級編程語言。它被設(shè)計用于編寫高性能、并發(fā)、安全的系統(tǒng),并且可以避免常見的內(nèi)存安全問題,如空指針和數(shù)據(jù)競爭。Rust的特點包

    2024年02月08日
    瀏覽(26)
  • 【Flutter·學(xué)習(xí)實踐·UI篇】基礎(chǔ)且重要的UI知識

    【Flutter·學(xué)習(xí)實踐·UI篇】基礎(chǔ)且重要的UI知識

    參考學(xué)習(xí)官網(wǎng):《Flutter實戰(zhàn)·第二版》? 學(xué)習(xí)前先記?。篎lutter 中萬物皆為Widget,心中默念3次以上銘記于心。 這一點和開發(fā)語言Dart的變量一切皆是對象的概念,相互對應(yīng)。 在前面的介紹中,我們知道在Flutter中幾乎所有的對象都是一個 widget 。與原生開發(fā)中“控件”不同的是

    2024年02月15日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包