不只是小米,Motorola 也展示自家隔空充電技術,只是有些限制.._網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

看過小米隔空充電技術的朋友,應該會覺得也太讚了,未來只要在特定範圍內,就能實現自動充電,不用再靠有線還是放在某個無線充電板。事實上除了小米之外,另一間 Motorola 稍早也發表自家隔空充電技術,跟小米有點類似,確實可以做到隔空充電,但目前看起來似乎有一些限制在。

Motorola 展示自家隔空充電技術

Motorola 這次發表的隔空充電技術,根據影片說明,可以在一公尺以內的距離內實現,他們拿兩支 Motorola Edge 手機進行測試,一開始都沒有在充電:

其中一台放在 100 公分的位置之後,手機畫面就會顯示正在充電:

另一台則放在近一點的 80 公分之處,一樣會變成正在充電:

不過跟小米不同,Motorola 現在的隔空充電技術不能被任何東西阻擋,要不然會失效,影片中也示範將手放在隔空充電裝置(One Hyper)前方,兩支手機就立刻變成無充電:

據說最多能實現 7 台手機同時充電,不過細節部分官方就沒有詳細說明,如:充電瓦數是多少、每一台獲得的充電速度是否一樣等等。

小米的隔空充電技術不會受到物體阻擋,且每一台都保證可獲得 5W 充電速度,因此整體來看目前小米的好像比較好一些。另外 Motorola 擺放手機的位置是在隔空充電裝置前方,因此也不確定是否有方向限制,如果有的話那使用性就會大幅受限。

完整影片,未來 Motorola Edge 系列有可能都會加入此充電技術:

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

 

隨著小米、Motorola 都發表自己的隔空充電技術,沒意外今年應該還會看到更多廠商也加入此行列。

未來不只是手機,其他科技產品也有機會支援此技術,變成以後所有東西都不用再煩惱充電問題,放在範圍內就會不斷的充電,光想就讓人很期待。

不過話說回來,雖然這技術真的很讚很方便,但對健康會不會造成任何影響,相信也是很多人非常關心的一點,這只能等之後的研究報告了。

資料來源:微博

真是 GaN!最迷你 105W 氮化鎵快充 Allite A2 開箱,超高充電效率超小體積(同場加映 Switch 最佳配件 Allite B1 20W)

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

NVIDIA GeForce RTX 3080 Ti 實測跑分現身,效能表現幾乎跟 RTX 3090 差不多(這張還是有缺陷的工程版)_網頁設計公司

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

NVIDIA RTX 3000 系列自從登場以來就持續缺貨,到現在也一樣,想買都買不到,也因此不少玩家都在期待新卡。而先前曾現身 EEC 資料庫其中一張顯卡 RTX 3060,沒意外 2 月就會推出,最近終於又有另一張 RTX 3080 Ti(或稱 RTX 3080 20GB)的消息,而且還是被中國媒體搶先實測,雖然只是有瑕疵的工程版本,但整個效能表現可說讓人非常驚艷,幾乎就快跟 RTX 3090 一樣,真的是有夠香。

NVIDIA GeForce RTX 3080 Ti 實測跑分現身

近日中國 bilibili 網站的硬件大玩家頻道,上傳一部「白嫖全網首張 RTX3080Ti」的實測影片。根據說明,這張 RTX 3080 Ti 是他跟一位神秘賣家購買的,還是使用比特幣交易。他猜測有可能是從工廠偷來的,因為板子上有被打兩個洞,但已經被修復好:

板子上也沒有任何散熱器,所以他也提醒溫度測試部分可以整個忽略,因為不是很準確。另外,雖然打洞部分有被修復,但修復方式不是很穩定,因此也沒有進行超頻測試。

從 GPU-Z 截圖可以看到,中間的 RTX 3080 Ti(RTX 3080 20G)核心部分,幾乎就跟 RTX 3090 一樣,ROPs/TMUs 為 112/328,CUDA 核心共 10496 單元。不過記憶體頻寬、記憶體頻率就變成與 RTX 3080 相同:

為此,硬件大玩家也說明是因為這張工程版 RTX 3080 Ti 的記憶體少了 4 顆,頻寬少了 64bit。

首先來看 3DMark 實測分數,Time Spy Exteme 模式下,RTX 3080 Ti 僅下降了 0.99%:

Time Spy 差距也只有 1.95%:

Port Royal 也只有下降 1.69%:

Fire Strike Ultra 模式差距雖然大一點,但也僅低 2.58%:

Fire Strike Extreme 測試模式差距為 2.98%:

最後的 Fire Strike 測試分數差距最大,來到了 –7.71%:

不過整體平均來看,RTX 3080 Ti 僅比 RTX 3090 低 4.21%,非常接近:

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

接著是遊戲測試,這邊也先提醒一下,RTX 3080 Ti 的驅動程式是測試版本,因此跟實際一定有差異,很多遊戲也無法跑完(只有四款)。

《戰地風雲5》RTX 3080 Ti 整體表現非常接近 RTX 3090,就連時脈也跟 3090 差不多,功耗皆鎖定在 340W,

《GTA 5》也相當亮眼,幾乎跟 RTX 3090 沒有任何差距,有些場景 RTX 3080 Ti 甚至高於 RTX 3090:

《巫師 3 》測試結果跟《戰地風雲5》一樣,RTX 3080 Ti 僅略低 RTX 3090 一點:

《古墓奇兵:暗影》跟 RTX 3090 相比,平均 FPS 僅少 1FPS,一樣有著 43FPS 好表現:

硬件大玩家甚至還測試了挖礦算力,沒想到非常不錯,不僅算力達到 125.320 MH/s,功耗也只有 267W,代表說挖礦算力比 RTX 3080 還好,功耗比 RTX 3090 還要低:

不得不說這樣看下來,這張 RTX 3080 Ti 跟本又是一張神卡阿…. 他甚至透露價格可能落在 7999~8999 人民幣之間(約台幣 3.5 萬~3.9 萬),如果效能表現真是如此,那肯定又要缺貨 + 炒價了。

完整影片:

顯卡持續缺貨,中國加密貨幣礦工現在看上 RTX 3060 遊戲筆電, 挖礦效率意外的高

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

MyBatis整合雙數據源_網頁設計公司

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

有時候在項目中會遇到需要連接兩個數據庫的情況。本文就結合Spring和Mybatis來講下怎麼使用雙數據源(或者是多數據源)。

背景知識介紹

本文中實現多數據源的關鍵是Spring提供的AbstractRoutingDataSource。這個類可以根據lookup key來實現底層數據源的動態轉換。

public abstract class AbstractRoutingDataSource extends AbstractDataSource implements InitializingBean {

	@Nullable
	private Map<Object, Object> targetDataSources;

	@Nullable
	private Object defaultTargetDataSource;

	private boolean lenientFallback = true;

	private DataSourceLookup dataSourceLookup = new JndiDataSourceLookup();

	@Nullable
	private Map<Object, DataSource> resolvedDataSources;

	@Nullable
	private DataSource resolvedDefaultDataSource;

	public void setTargetDataSources(Map<Object, Object> targetDataSources) {
		this.targetDataSources = targetDataSources;
	}

	public void setDefaultTargetDataSource(Object defaultTargetDataSource) {
		this.defaultTargetDataSource = defaultTargetDataSource;
	}

	public void setLenientFallback(boolean lenientFallback) {
		this.lenientFallback = lenientFallback;
	}

	public void setDataSourceLookup(@Nullable DataSourceLookup dataSourceLookup) {
		this.dataSourceLookup = (dataSourceLookup != null ? dataSourceLookup : new JndiDataSourceLookup());
	}


	@Override
	public void afterPropertiesSet() {
		if (this.targetDataSources == null) {
			throw new IllegalArgumentException("Property 'targetDataSources' is required");
		}
		this.resolvedDataSources = new HashMap<>(this.targetDataSources.size());
		this.targetDataSources.forEach((key, value) -> {
			Object lookupKey = resolveSpecifiedLookupKey(key);
			DataSource dataSource = resolveSpecifiedDataSource(value);
			this.resolvedDataSources.put(lookupKey, dataSource);
		});
		if (this.defaultTargetDataSource != null) {
			this.resolvedDefaultDataSource = resolveSpecifiedDataSource(this.defaultTargetDataSource);
		}
	}

	protected Object resolveSpecifiedLookupKey(Object lookupKey) {
		return lookupKey;
	}

	protected DataSource resolveSpecifiedDataSource(Object dataSource) throws IllegalArgumentException {
		if (dataSource instanceof DataSource) {
			return (DataSource) dataSource;
		}
		else if (dataSource instanceof String) {
			return this.dataSourceLookup.getDataSource((String) dataSource);
		}
		else {
			throw new IllegalArgumentException(
					"Illegal data source value - only [javax.sql.DataSource] and String supported: " + dataSource);
		}
	}


	@Override
	public Connection getConnection() throws SQLException {
		return determineTargetDataSource().getConnection();
	}

	@Override
	public Connection getConnection(String username, String password) throws SQLException {
		return determineTargetDataSource().getConnection(username, password);
	}

	@Override
	@SuppressWarnings("unchecked")
	public <T> T unwrap(Class<T> iface) throws SQLException {
		if (iface.isInstance(this)) {
			return (T) this;
		}
		return determineTargetDataSource().unwrap(iface);
	}

	@Override
	public boolean isWrapperFor(Class<?> iface) throws SQLException {
		return (iface.isInstance(this) || determineTargetDataSource().isWrapperFor(iface));
	}
    
	protected DataSource determineTargetDataSource() {
		Assert.notNull(this.resolvedDataSources, "DataSource router not initialized");
		Object lookupKey = determineCurrentLookupKey();
		DataSource dataSource = this.resolvedDataSources.get(lookupKey);
		if (dataSource == null && (this.lenientFallback || lookupKey == null)) {
			dataSource = this.resolvedDefaultDataSource;
		}
		if (dataSource == null) {
			throw new IllegalStateException("Cannot determine target DataSource for lookup key [" + lookupKey + "]");
		}
		return dataSource;
	}

	@Nullable
    //一般只需要用戶實現這個方法。
	protected abstract Object determineCurrentLookupKey();

}

實現流程

step1:實現一個自定義的AbstractRoutingDataSource

public class DynamicDataSource extends AbstractRoutingDataSource {

    //這邊定義了一個和線程綁定的ThreadLocal變量,用於存放需要使用的數據源的名稱
    private static final ThreadLocal<String> dataSourceNameHolder = new ThreadLocal<>();

    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
        super.setDefaultTargetDataSource(defaultTargetDataSource);
        super.setTargetDataSources(targetDataSources);
        super.afterPropertiesSet();
    }

    @Override
    //重寫了AbstractRoutingDataSource的determineCurrentLookupKey方法
    protected Object determineCurrentLookupKey() {
        return getDataSource();
    }

    public static void setDataSource(String dataSource) {
        dataSourceNameHolder.set(dataSource);
    }

    public static String getDataSource() {
        return dataSourceNameHolder.get();
    }

    public static void clearDataSource() {
        dataSourceNameHolder.remove();
    }

}

step2:實現一個AOP對Service層方法進行AOP攔截,調用DynamicDataSource中的ThreadLocal變量,將當前請求需要使用的數據源名稱設置進去。

//定義一個DataSource註解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataSource {
    String name() default "";
}
//這邊再定義一個常量
public interface DataSourceNames {
    String FIRST = "first";
    String SECOND = "second";

}

定義AOP處理DataSource註解

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

@Aspect
@Component
public class DataSourceAspect implements Ordered {
    protected Logger logger = LoggerFactory.getLogger(getClass());

    @Pointcut("@annotation(com.xx.yy.annotation.DataSource)")
    public void dataSourcePointCut() {

    }

    @Around("dataSourcePointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        MethodSignature signature = (MethodSignature) point.getSignature();
        Method method = signature.getMethod();
        
        DataSource ds = method.getAnnotation(DataSource.class);
        //如果未指定數據源就使用第一個數據源
        if(ds == null){
            DynamicDataSource.setDataSource(DataSourceNames.FIRST);
            logger.debug("set datasource is " + DataSourceNames.FIRST);
        }else {
            DynamicDataSource.setDataSource(ds.name());
            logger.debug("set datasource is " + ds.name());
        }
        try {
            return point.proceed();
        } finally {
            DynamicDataSource.clearDataSource();
            logger.debug("clean datasource");
        }
    }
    @Override
    public int getOrder() {
        return 1;
    }
}

step3:對數據源進行配置

@Configuration
public class DynamicDataSourceConfig {

    @Bean
    @ConfigurationProperties("spring.datasource.druid.first")
    public DataSource firstDataSource(){
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.druid.second")
    public DataSource secondDataSource(){
        DataSource dataSource = DruidDataSourceBuilder.create().build();
        return dataSource;
    }

    @Bean
    @Primary
    @DependsOn(value = {"firstDataSource","secondDataSource"})
    public DynamicDataSource dataSource(DataSource firstDataSource,DataSource secondDataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DataSourceNames.FIRST, firstDataSource);
        targetDataSources.put(DataSourceNames.SECOND,  secondDataSource);
        return new DynamicDataSource(firstDataSource, targetDataSources);
    }
}

以上就是實現雙數據源的全部配置。

使用

使用的時候非常簡單,只需要在Service層的方法上加上@DataSource註解就可以了。

@DataSource(name = DataSourceNames.SECOND)
public String selectByInfoName(String name){
   //...
}

一些注意點

如果你使用了pageHelper等分頁插件,請將方言設置成自動模式, autoRuntimeDialect: true

pagehelper:
  reasonable: false
  supportMethodsArguments: true
  params: count=countSql
  autoRuntimeDialect: true

如果你使用了Druid數據源,並通過下面的形式創建數據源,要保障數據源的用戶名和密碼字段不為null。不然DruidDataSourceWrapper這個Bean會檢測這個字段的值,導致啟動失敗。


@Bean
    @ConfigurationProperties("spring.datasource.druid.first")
    public DataSource firstDataSource(){
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.druid.second")
    public DataSource secondDataSource(){
        DataSource dataSource = DruidDataSourceBuilder.create().build();
        return dataSource;
    }

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

認識各種內存地址_網頁設計公司

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

什麼是物理地址?

物理地址就是內存單元的絕對地址,物理地址0x0000就表示內存條的第一個存儲單元,0x0010(16進制)就表示內存條的第17個存儲單元,一個存儲單元是1byte(8bit)。

你問為什麼是1byte?

一個內存條是由若干個黑色的內存顆粒構成的。每一個內存顆粒叫做一個chip。

每個chip中又疊了若干bank

在每個bank內部,就是電容的行列矩陣結構了,每一個元素有8個小電容,存儲8個bit,也就是一個字節。

什麼是線性地址和虛擬地址?

在80286系列以前,CPU只支持實模式操作模式。16位寄存器想要對20位地址線進行尋址,使用分段機制,段基址(16位) x 16(左移4位) + 段內偏移地址(4位)就是物理地址了。
這樣的好處是所見即所得,程序員指定的地址就是物理地址,物理地址對程序員是可見的。同時也帶來了一些問題:
1) 無法支持多任務。
2) 程序的安全性無法得到保證。
(根本原因就是一個程序直接修改了其他程序的內存,導致崩潰)

80286系列則是被設計來解決這些問題,段式訪存得到的改進,原來段基址+段內偏移得到的地址不再是實際的物理地址,而是被稱作為線性地址,要經過一個轉換層轉換才變成一個物理地址。這種CPU操作模式就被稱為保護模式了。保護的是:分清楚各個程序使用的存儲區域,不允許隨便跨界訪問。

80286系列之後就進入32位CPU時代了,32位寄存器可以直接訪問32位地址總線。但是在保護模式下,地址仍然採用“段地址:偏移地址”的方式來表示。
段值仍然由原來的16位的cs、ds等寄存器表示,但是此時它們僅僅是一個索引,這些個索引指向一個數據結構的表項,表項中詳細定義了一個段的起始地址、界限、屬性等內容,這個數據結構,叫做GDT(其實還可能是LDT),GDT中的每一個表項,叫做描述符。
這裏我們就詳細看一下保護模式的尋址方式吧。

1) 尋址時,先找到gdtr寄存器,從中得到GDT的基址。
2) 有了GDT的基址,又有段寄存器中保存的索引,可以得到段寄存器“所指”的那個表項,即所指的那個描述符。
3) 得到了描述符,就可以從描述符中得到該描述符所描述的那個段的起始地址。
4) 有了段的起始地址,將偏移地址拿過來與之相加,便能得到最後的線性地址。
5) 有了線性地址,經過變換,即可得到相應的物理地址。

保護模式雖然解決了內存不被跨界訪問,但是其也帶來了新的問題,那就是內存碎片。
首先我們了解一下內存碎片為何產生:
首先假設我們有10B內存:

ID 首地址 尾地址 長度 狀態
0 0 9 10 空閑

當程序申請一個長度為3的內存空間后:

ID 首地址 尾地址 長度 狀態
0 0 2 3
1 3 9 7 空閑

當程序再申請一個長度為2,以及長度為4的內存空間后:

ID 首地址 尾地址 長度 狀態
0 0 2 3
1 3 4 2
2 5 8 4
3 9 9 1 空閑

此時,只剩1個可用空間。如果這時程序再來申請長度大於1的空間,就申請不了,也就是內存不夠。
現在,釋放掉ID=1的空間:

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

ID 首地址 尾地址 長度 狀態
0 0 2 3
1 3 4 2 空閑
2 5 8 4
3 9 9 1 空閑

我們發現,現在可用內存空間為3,但是,這3個空閑空間,並不是連續的。
所以,如果程序現在申請長度為3的內存空間,同樣會申請不了,會出現內存不夠。我們把這種情況,稱之為內存碎片

那內存碎片怎麼解決呢?於是就有了分頁機制,接下來我們詳細講一下分頁:
首先,把物理內存,按照某種尺寸,進行平均分割。比如我現在以2個內存單位,來分割內存,也就是每兩個連續的內存空間,組成一個內存頁:

地址 頁ID 狀態
0 0 空閑
1
2 1 空閑
3
4 2 空閑
5
6 3 空閑
7
8 4 空閑
9

接着,系統同樣需要維護一個內存信息表:

ID 使用的內存頁ID

現在,程序申請長度為3的內存空間,不過由於現在申請的最小單位為頁面,而一個頁面的長度為2,因此現在需要申請2個頁面,也就是4個內存空間。你看,這就浪費了1個內存空間。

地址 頁ID 狀態
0 0
1
2 1
3
4 2 空閑
5
6 3 空閑
7
8 4 空閑
9
ID 使用的內存頁ID
0 0,1

接着,程序再申請長度為1,長度為2的空間:

地址 頁ID 狀態
0 0
1
2 1
3
4 2
5
6 3
7
8 4 空閑
9
ID 使用的內存頁ID
0 0,1
1 2
2 3

釋放掉ID=1,內存頁ID為2的那條內存空間信息:

地址 頁ID 狀態
0 0
1
2 1
3
4 2 空閑
5
6 3
7
8 4 空閑
9
ID 使用的內存頁ID
0 0,1
2 3

現在,就出現了之前的情況:目前一共有4個內存空間,但是不連續。
不過,因為現在是分頁管理機制,因此,現在仍然可以繼續申請長度為4的內存空間。
沒有碎片,能夠盡量地全部用完空間。但仔細想想,這種優勢背後,也是需要付出大量代價的。
分頁的方式下,程序需要記錄內存頁ID,每次使用時,需要從內存頁ID翻譯成實際內存地址,多了一次轉換。
而且這種模式,會浪費一些內存,比如上面申請3個內存空間,實際分配了2個頁面共4個內存空間,浪費了1個內存空間。

還有一個要注意的地方,這個時候”段基址+段內偏移地址”經過段部件處理后得到的線性地址就不再是物理地址了,而是虛擬地址了。
從下圖我們能夠清楚的看出來我們最後的線性地址表示的是頁表的地址,而不是物理地址了。

什麼是邏輯地址和有效地址?

無論CPU在什麼模式下,段內偏移地址又稱為有效地址或者邏輯地址(只是叫法不一樣罷了),例如實模式下mov ax, [0x7c00]0x7c00就是邏輯地址(或有效地址),但這條指令最終操作的物理地址是DS*16+0x7c00
Linux最初就是在32位的80386系列上設計的,並且沒有使用分段機制,所以在Linux上邏輯地址和線性地址就是一回事了。

總結

一圖以概括:

我的博客:https://geanqin.github.io/

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

震驚!當Python遇到Excel后,將開啟你的認知蟲洞_潭子電動車

※超省錢租車方案

商務出差、學生出遊、旅遊渡假、臨時用車!GO 神州租賃有限公司!合法經營、合法連鎖、合法租賃小客車!

本文主要內容:   1. Excel,你為什麼如此強大 2. 軟件開發也需要團隊作戰 3. Excel的集成方案演化 4. macOS特有的集成方案:applescript 5. Python與Excel集成,有哪些好處 6. 了解多個技術領域,可以間接提高自己的IQ 7. 提高開發效率的利器:生態滲透 8. 上代碼:Python到底如何與Excel交互 9. 用Python替代VBA  
本文主要講Python與Excel的關係以及集成方案,Office家族的其他成員,如Word、PowerPoint與Excel擁有類似的功能,Python同樣可以與Word、PowerPoint等Office成員結合,這些內容我以後會寫文章講解。   我相信看這篇文章的大多數人都是程序員。在廣大程序員的眼裡,Excel以及Office家族的其他成員完全不能與Python、Java、Sprint Boot這些技術相比。Office被貼上的標籤就是:非專業人員的工具。是由那些體制內的人、會計、業務人員使用的工具,其實這是對Excel的最大誤解。

 1. Excel,你為什麼如此強大

  Excel從一問世開始,定位就是橫跨辦公和開發兩界。在上個世界末推出的Excel5.0(那時還沒有office這個產品套件)就已經支持VBA了,那可是在Win32下(一種基於dos的shell,並不屬於真正的操作系統)。儘管有些原始(以現在的眼光看),但在當時卻顯得極為先進。因為Excel(以及同期的Word)是人類史上第一個內置領域特定語言(DSL)的民用系統(可以被各個領域的人使用的系統)。正是因為有了VBA,Excel才顯得非常強大。   可能有的程序員會問,即使Excel支持VBA,可以進行編程,也只不過是完成一些自動化操作而已。VBA的功能完全不能與Python、Java、C#、C++這些被廣大程序員熟知的編程語言相比,更別說成為編程領域的主流了。沒錯,如果單憑VBA本身的確無法與這些流行的編程語言相比,但要知道,VBA和Excel本身可以與其他開發工具融合,也就是說,可以讓VBA和Excel成為自己系統的一部分,這就顯得非常牛逼了。

 2. 軟件開發也需要團隊作戰

  那麼為什麼要將Excel與其他系統結合呢?其實在我們創業時、在公司完成一個項目時,甚至在參加籃球比賽時,都會高頻率提到一個詞:團隊。 現在也流行着一句話:沒有完美的個人,只有完美的團隊。也就是說,沒有人可以什麼都會,什麼都擅長,就算是天才達芬奇也是如此。但團隊就不一樣了,即使某項工作團隊里沒人能做,也可以擴充團隊成員,吸引能做這項工作的人加入團隊。   其實在開發軟件的過程中也同樣是講究團隊作戰的。不管我們使用的開發工具有多強大,用戶社區由多龐大,都無法規避一個事實:任何技術都不可能適合完成所有的工作。 當然,還有另外一種說法就是儘管某種技術可以完成某項工作,但並不是最好的選擇。   現在回到Excel上來。首先要知道Excel擅長什麼,對,沒錯,Excel擅長表格和圖表的製作。儘管有非常多的開發工具也可以製作表格和圖表,但很顯然,Excel是其中最好的(主要用門檻、易用性、功能和用戶基數的綜合指標來衡量)。所以,如果某一個系統要求將數據轉換為表格和圖表,那麼這項任務交給Excel來完成是再合適不過了。  
3. Excel的集成方案演化   在不同的時期,Excel的集成方案也不盡相同。在Excel的大眼夾時代(那時還是Office97和Office2000的時代),微軟與開源世界還水火不容,我也還處於學生時代。在那個時代,Excel只能與Windows下的開發工具融合,其中主要的開發工具包括微軟的VC、VB、以及Borland(現在已經消失)的Delphi、C++ Builder等。     最初的集成方案有如下3種:

  • 可視方式:通過OLE組件將Excel直接嵌入窗口中,其實就相當於擁有了一個高級版的表格編輯器
  • VBA方式:通過ActiveX技術創建Excel.Applicaiton對象(一般是CreateObject函數),然後就可以任意調用VBA的API了,我比較喜歡這種方式。通過這種方式,可以將系統中的數據按着一定的格式直接傳輸到Excel中,給用戶提交的是包含表格數據的Excel文檔。
  • 反客為主方式:這種方式將Excel作為主體。也就是說,主要的操作界面是Excel,在Excel中調用或訪問其他系統。例如,很多年前我做過一個基於Excel的報表系統。該系統分別使用Delphi和Excel實現。Delphi做的管理系統,將數據發送給Excel。但需要用戶自己調整報表格式。我採用的方案是通過Excel的VBA實現表格的格式設置。其中有部分功能需要訪問SQL Server數據庫,以及完成與Delphi實現的系統類似的功能,這部分功能使用了Delphi封裝的Dll(COM組件),然後通過Excel反過來調用這些DLL。最終用戶使用的方式是用主系統完成大部分工作。如果想調整Excel的報表樣式,可以直接用Excel來完成(會在Excel上提供一些自定義的菜單和按鈕,現在通過加載項【Add-ins】實現)

  不過隨着時間的推移,現在的微軟已經擁抱開源和其他系統。所以Excel也不僅限於Windows。在macOS上也可以完成在Windows上的大多數工作,甚至Visual Studio也推出了macOS版本。而且.net core也可以同時跨Windows、macOS和Linux三個平台,SQL Server也開始支持Linux。以後我們會在更多的場景看到微軟的身影。   既然Excel已經支持了macOS平台,就需要採用跨平台的方式與Excel集成。當然,前面介紹的幾種方案現在仍然可用,但僅限於Windows平台。不過我們無法預測用戶到底使用哪一個平台,所以應該盡量使用跨平台方案。   目前主要的跨平台方案有如下3種:

  • 直接修改xlsx文件
  • 通過VBA間接調用其他編程語言
  • 使用office.js

  第1中方式有很多編程語言都支持,例如,Python、Java、Julia、Go、JavaScript。幾乎你能想到的編程語言,都有支持xlsx格式的庫。這裏只討論Python。如果想了解更多關於集成Excel的技術,可以關注我的公眾號:極客起源。   在Python語言中,支持Excel文件格式的庫非常多,如非常著名的openpyxl、xlsxwriter等。通過這些庫,可以在不依賴Excel環境的情況下,生成xlsx格式的文件。不過這些庫基本是只是生成Excel文件,並不能更好地利用VBA以及更高級的功能。由於Excel文件格式非常複雜,完全支持比較困難,所以這些庫只是支持一部分Excel的功能,但這些功能對於絕大多數需求已經足夠了。   第2種其實是一種取巧的方式,通過VBA做橋,調用其他編程語言,相當於用其他編程語言代替了VBA。這其中典型的就是xlwings。儘管這種方式從表面上看可以直接在Excel中像使用VBA一樣使用這些編程語言,但從本質上看仍然是直接寫xlsx文件。功能其實與第1種方式相同,因為這並不是官方支持的功能。   第3種是office.js,這是微軟官方提供的一個基於JavaScript的程序庫。基於Node.js,可以用JavaScript完全取代VBA實現Excel以及Office其他成員的加載項。office.js可以在Electron、Web應用以及大多數基於JavaScript的場景中使用。關於office.js的內容我以後會寫文章詳細描述,對office.js感興趣的同學也可以關注“極客起源”公眾號,會不定期更新這方面的內容。    
4. macOS特有的集成方案:applescript 除了跨平台解決方案外,在macOS上,還支持使用applescript與Office(Excel、World、PowerPoint等)交互,這些內容我以後再撰寫文章詳細講解。如果要了解excel applescript api,可以參考Excel Reference。從效果來看,applescript操作Office與在Windows下通過COM組件操作Office類似,可以完全控制Office,只是applescript的語法更接近自然語言。   下面的applescript代碼會創建一個新的Excel文檔,並將其保存為first.xlsx文件。  

 

 運行后,會看到一個打開的Excel文檔,並且已經保存為firstx.xlsx文件。

 

 5. Python與Excel集成,有哪些好處

  Excel對於Python來說,可以將Excel看做是一個可編程的大組件。這個組件的主要功能就是可以製作任意複雜的報表和圖表。儘管Python有很多模塊可以製作報表和圖表。但這些模塊的功能和效果完全沒辦法與Excel相比。所以將Python與Excel結合的最大好處是可以快速完成製作報表的任務,而且效果杠杠滴。   將Python與Excel相結合,其實還會引出另外一個思考,就是成為專家還是通才的問題。我聽到有很多程序員說,要將某種語言搞通,如PHP、Python、Java等,然後就可以很輕鬆解決所有的問題。結果真是這樣嗎?   很久以前,我聽過一個關於微軟的故事(相信很多人也聽過),在微軟有一個幾十人的團隊,花了好幾個月還沒完成一個項目,聽說是遇到了某些難題。這時有一個老程序員(據說至少50歲以上)將自己關在辦公室里一個星期,搞定! 我們先不管這個故事是真是假,那麼從理論上來說,是否有這個可能呢?其實如果光看編程速度,再牛叉的程序員,也不可能比普通程序員快幾十倍,更何況數百倍了。但還有另外一種可能,就是這名老程序員使用了完全不同的方法,繞過了大多數影響效率的因素,例如,使用了不同的工具,採用了不同的轉換方式,甚至使用了不同的設計理念等等。這就不是能力問題了,而是認知的問題。我將其稱為“認知蟲洞”。

 所謂“認知蟲洞”,是指通過某種方式很難完成某項工作,但通過另外完全不同,甚至是顛覆三觀的方式,可以用極短的時間達到目的,而且效果極好。就像找到了可以穿越浩瀚星空的蟲洞。這也有點像數學中的“等價替換”。

  可能這個微軟的例子離我們太遠,下面舉一個我自己的關於Excel例子,很多年前,我還在國內某大型軟件公司作高級程序員。團隊需要製作大量的報表,使用的主要開發工具是Delphi、後端是SQL Server數據庫。Delphi本身有自己的報表系統,叫QuickReport。功能是很強大的,但問題是,做起來太費勁。例如,要畫表格線時,如果一不小心將某根線拖到了別的地方,而且被其他東西覆蓋,那你就找把,還必須要找到,否則打印出來的表格上就會莫名其妙多了根線。結果團隊好幾個人弄了好幾天還沒弄完(也包括我)。後來我實在不想這麼弄了(因為買了幾張影碟,着急回家看電影,不想加班),於是想到了利用Excel或Word來完成這個報表系統。通過Delphi傳輸數據。   說干就干,花了不到2個小時,所有的報表全部搞定(只有我一個人哦),幾個人幾天都沒搞定的東西,我自己不到2個小時搞定,這當然不是我編程速度快了幾十倍,而是處在了不同的維度,使用了完全不同的技術來實現,用QuickReport需要一根線一根線的畫,而使用Excel,我不需要畫線,只需要用SQL語句查詢出數據,然後將這些數據發送給Excel即可。單單用了一個Excel,速度就提高了這麼多,如果系統中很多部分都使用了類似的技術,那麼編程效率提高數百倍,甚至上千倍,也不是沒有可能的。  
6. 了解多個技術領域,可以間接提高自己的IQ   可能有的同學會問,既然可以將多種技術結合起來大幅度提高開發效率,那麼為什麼不通過團隊合作的方式來完成了,通常一個人無法學會那麼多技術。其實這就是一個認知的問題,團隊合作只有在項目所採用的技術被確定后,例如,如何集成多種技術,才可以發揮作用。問題是,如果多種知識分散在不同人的大腦中,很可能沒有人意識到應該去這樣融合多種技術,就更談不上團隊合作了,就像你要探索宇宙,首先你要知道存在宇宙這種東西,否則怎麼去探索呢? 我將這種現象稱為“認知孤島”(相對於“認知蟲洞”而言),就是說並不是沒有能力去做,而是壓根就沒有意識到應該這樣做(由於知識的缺乏、同時導致想象力的受限)。   為什麼達芬奇那麼牛逼,除了聰明之外,達芬奇還橫跨多個完全不同的領域,正是因為對生物學和解刨學的了解,蒙娜麗莎的畫像才會那麼自然,栩栩如生,因為達芬奇對骨骼、肌肉的構造非常了解,這是其他任何畫家都無法比肩的。如果你在某一個領域排名前20%,而在另外一個領域排名也是前20%,那麼如果需要兩個領域的知識來解決問題時,你就會排名前4%(20% * 20%),如果是3個領域就是百里挑一。如果是6個領域,那就是萬里挑一,據說達芬奇涉足十多個領域。由於自己和自己溝通的成本為0,所以只有擁有足夠多的知識,並且有融合他們的能力,那麼你就是下一個達芬奇!

 我們可以舉個數學與Python的例子:

 如果我們的程序需要計算某個表達式的定積分(例如y = 2 * x從0到1的定積分)。    假設我們使用的是Python語言,並且不太清楚有什麼庫可以自動計算定積分,那麼採用的方式就是利用數值計算的方式寫程序去完成,計算定積分的數值計算公式比較複雜,可能不是在短時間內能完成的。不過要是了解sympy這個庫,那就是幾行代碼的事:  

import sympy
x = sympy.Symbol('x')
f = 2 * x
# 開始計算定積分
print(sympy.integrate(f,(x,0,1)))

是不是很簡單呢? 只需要了解一個API的用法就搞定了。

假設現在我們還有一個需求,要計算某個函數在某一點的導數(導數在深度學習中經常使用),而手頭又沒有必要的庫(也有可能是不知道),那麼只要了解導數的原理,就很容易通過幾行代碼搞定,這就屬於高等數學的範疇了。  

 導數原理,右側是導數的計算公式,

# 計算導數的函數
def derivative(f,x):
  h = 0.0001   # x軸的增量,需要是一個很小的值,但要在浮點數精度範圍內,通常不能超過小數點后6位
  return (f(x + h) - f(x - h)) / (2 * h)
# 待計算的函數1(y = 2 * x)  
def f1(x):
    return 2 * x
import math
# 待計算的函數2(  y = sin(x) * cos(x) / (sin(x) + cos(x))  )
def f2(x):
    return math.sin(x) * math.cos(x) / (math.sin(x) + math.cos(x))

print(derivative(f1,10))    # 1.9999999999953388
print(derivative(f2,123))   # -0.331842825692652

   PS:對這些代碼和高等數學不熟悉也沒關係,這裏我只是舉個例子,後期我會寫一些關於數學和編程方面的文章,詳細解釋這些好玩的東西,可以關注我的公眾號:極客起源 ,會不斷更新各種技術和數學文章,以及視頻課程。   從這兩個案例可以看出,在某一個領域需要非常費勁才能搞出來的東西,在另一個領域其實就是hello world。如果了解足夠多的領域,那麼完成很多工作,就會表現出天才的特徵(這也是成為天才的途徑之一,另一個途徑是投胎)。  

 PS:Excel的功能不僅僅是製作報表,Excel還擁有強大的數據分析能力。所以如果將Python與Excel集成,就意味着Python將擁有了Excel的全部能力,相當於Python擁有了Excel的整個生態。我將其稱為“生態滲透”。也就是通過集成或其他方式,一種技術可以直接或間接使用另外一種技術的全部或大部分資源。

7. 提高開發效率的利器:生態滲透    在未來,支持生態滲透的開發方式會非常普遍,如果只是用了一些現成的庫或開源軟件,並不能大幅度提高開發效率,但如果可以利用某些強大系統的生態,就不一樣了。在未來,還會有很多支持“生態滲透”的開發工具。例如,我們團隊研發的UnityMarvel,就是一款超平台開發系統。這裏之所以稱為“超平台”,而不是“跨平台”,是因為UnityMarvel不僅僅可以跨操作系統平台,還可以跨數據庫平台,雲平台、API平台、開源硬件、物聯網等,以及支持虛擬SQL、客戶端服務端一體化、柔性熱更新、Office加載項、瀏覽器插件等新特性。因此稱為“超平台”開發系統。並且自己研發了Ori編程語言(語法融合了Python、Java、Go等語言的優秀特性,但功能得到了前所未有的增強)。通過這些特性,可以用前所未有的規模利用其他系統的生態,要遠比Python使用Excel的生態更完美。其他功能先不解釋(等發布后我再寫文章詳談),先說說UnityMarvel是如何跨數據庫的。   所謂跨數據庫(目前指關係型數據, 以後會支持文檔、鍵值等NoSQL數據庫),是指用UnityMarvel開發基於數據庫的應用並不需要事先確定到底用什麼數據庫(如MySQL、SQL Server、Oracle等),UnityMarvel內置了一種虛擬數據庫,可以直接用虛擬數據庫開發,在發布時,會要求選擇使用的數據庫,例如,選擇MySQL或SQL Server。UnityMarvel會通過rosetta引擎將Ori語言的代碼轉換為支持MySQL的代碼。關於數據庫的部分,主要是用過內置的一種虛擬SQL完成的,而且這種SQL語言是與Ori語言是融為一體的。例如,如果要從persons表中查詢出id大於30的所有記錄,可以直接這樣寫:  

var  result = SELECT * FROM persons
                                 WHERE id > 30;

  result的類型是SQLSelect,將result賦給Grid組件,就會直接显示查詢結果。當發布時,會將上面的代碼轉換為使用相應數據庫(如MySQL、SQL Server)的特定編程語言(如JavaScript、Java等)的代碼。這麼做的好處如下: 1. 不需要進行數據庫選型,數據庫是在發布時後期綁定的; 2. 如果想切換數據庫(例如,從MySQL換成Oracle),只需要重新發布,選擇相應的數據庫就可以了,不需要修改一行代碼; 3. 統一數據庫接口,開發人員並不需要了解各種數據庫的細節,開發門檻低; 4. UI與數據庫交互非常容易,不必考慮各種數據庫引擎和庫,只需要直接將SQL語句賦給與其交互的UI組件即可; 5. 自動檢測和去除大多數SQL中的潛在風險,如SQL注入等; 6. 脫離數據庫環境開發。例如,想使用MySQL數據庫開發,但當前機器上並沒有MySQL開發環境,又不想安裝MySQL。這時仍然可以用UnityMarvel內置的虛擬數據庫進行開發,然後發布即可,部署在有MySQL環境的機器上就可以成功運行了;  

 

 

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

8. 上代碼:Python到底如何與Excel交互   在這一節玩點真格的,看一看Python到底如何與Excel交互。我們使用目前最常用的openpyxl來完成操作。先看一個未處理的Excel表格。

 

 

 上面這個表格是關於營業計劃的數據,看起來很彆扭,因為不同層次的數據之間沒有縮進,也沒有背景顏色,甚至沒有表格線。如果要將這個表格交給領導,估計領導會拿起塊磚頭砸過來!   領導最希望見到下面的表格:

 這個表格看起來是不是很舒服呢!其實這個表格用Excel做起來也並不費勁。不過仍然需要N步,這裏就不詳細解釋如何用Excel來做這個表格了,現在來看如何利用Python閃電般進行格式轉換。

from openpyxl.styles import Alignment,Font,Border,Side,Color,PatternFill
import openpyxl
# 打開待轉換的文件
workbook = openpyxl.load_workbook('原始表格.xlsx')

ws = workbook.active
table = ws['A1':'D11']
# 設置字體
ft = Font(name="黑體")
for rows in table:
    for cell in rows:
        cell.font = ft
# 調整行高(所有的行的高度統一設置為18)
for i in range(1,ws.max_row + 1):
    ws.row_dimensions[i].height = 18.0
# 插入列
ws.insert_cols(1,1)

# 調整新插入列的寬度
ws.column_dimensions['A'].width = 5

# 插入行
ws.insert_rows(1,1)
# 調整新插入行的高度
ws.row_dimensions[1].height = 10


# 文字左對齊,数字右對齊
leftAlign = Alignment(horizontal='left',vertical='center')
rightAlign = Alignment(horizontal='right',vertical='center')
for row in ws.rows:
    for cell in row:
        # 数字,右對齊
        if type(cell.value) == int:
            cell.alignment = rightAlign
        else:
            cell.alignment = leftAlign

# 調整列寬
ws.column_dimensions['B'].width =20
ws.column_dimensions['C'].width =9
ws.column_dimensions['D'].width =9
ws.column_dimensions['E'].width =9
ws.column_dimensions['F'].width =4  # 讓表格線出來一點



# 為表格添加邊框

topBorder = Border(top=Side(border_style='thick',color='000000'))
                #bottom=Side(border_style='thick',color='000000'),
                #horizontal = Side(border_style='thin',color='000000'))
# 添加表格頂邊的粗線(包括最後沒有數據的列)
for col in range(2, ws.max_column + 2):
    ws.cell(2, col).border = topBorder

bottomBorder = Border(bottom=Side(border_style='thick',color='000000'))
# 添加表格底邊的粗線(包括最後沒有數據的列),這裏需要加1,是因為前面繪製表格頂邊的粗線時,最大列的數量已經多了1個
# 所以只需要加1即可
for col in range(2, ws.max_column + 1):
    ws.cell(ws.max_row, col).border = bottomBorder

# 添加水平細線
horizontalBorder = Border(top=Side(border_style='thin',color='000000'))
for col in range(2, ws.max_column + 1):
    for row in range(4,ws.max_row):
        ws.cell(row, col).border = horizontalBorder

# 單元格縮進
ws['B5'].alignment=Alignment(indent=1)
ws['B6'].alignment=Alignment(indent=1)
ws['B8'].alignment=Alignment(indent=1)
ws['B11'].alignment=Alignment(indent=1)

ws['B9'].alignment=Alignment(indent=2)
ws['B10'].alignment=Alignment(indent=2)

# 設置文字顏色
blueFont = Font(name="Arial",color = '4169E1')
for col in range(3, ws.max_column + 1):
    ws.cell(5, col).font= blueFont
    ws.cell(6, col).font = blueFont
    ws.cell(9, col).font = blueFont
    ws.cell(10, col).font = blueFont
# 設置背景色
fill = PatternFill("solid", fgColor="B0C4DE")
for col in range(2, ws.max_column + 1):
    ws.cell(4, col).fill= fill
    ws.cell(7, col).fill = fill
    ws.cell(12, col).fill = fill

workbook.save('轉換后的表格.xlsx')

print('見證奇迹的時刻')

 

現在運行程序,當輸出“見證奇迹的時刻”后,就會在當前目錄生成一個“轉換后的表格.xlsx”,該文件就是上圖的效果,是不是很神奇呢?   從這段程序中可以看出,轉換該表格需要多少步,代碼並不複雜,大家可以根據openpyxl的文檔研究。  
9. 用Python替代VBA   目前微軟官方還沒有將Python作為VBA的替代品,倒是將JavaScript作為了另外一個選擇(office.js),不過可以利用xlwings做一個折中。xlwings可以單獨使用,也可以通過xlwings office加載項提供的RunPython函數運行Python代碼。   現在有一個hello.py文件,代碼如下:  

import xlwings as xw
def hello_xlwings():
    wb = xw.Book.caller()
    wb.sheets[0].range("A1").value = "Hello xlwings!"

  在xlwings的安裝目錄有一個xlwings.xlam文件,該文件是Excel的加載項文件,也就是Excel VBA的發行包文件。現在隨便開啟一個空的Excel workbook,然後點擊“工具”>“Excel加載項”菜單項,會打開如下圖所示的對話框,找到xlwings.xlam文件,並選中該文件。

 

 然後在“開發工具”選項卡中點擊“Visual Basic”按鈕(如下圖所示),進入VBA編輯頁面。

 

 

 最後引用xlwings庫即可。

  現在可以新建一個VBA模塊,然後編寫下面的代碼:  

 Sub test()
     RunPython ("import  hello; myproject.hello_xlwings()")
 End Sub   

運行腳本,就會看到在“A1”的位置插入了Hello xlwings!

  OK,現在大家已經了解了如何使用Python與Excel交互,其他還有很多種方法,而且也不僅僅只有Python能與Excel交互,其實幾乎所有的編程語言,甚至是C語言,都有想用的Library可以與Excel交互。那就期待我下面的文章吧!    

 

 

   

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

DIVOOM Pixoo LED發光像素單肩包:可自己換圖案、文字,絕對獨一無二!_網頁設計公司

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

這次為大家介紹的是 DIVOOM Pixoo LED發光像素單肩包開箱,不知道大家還記不記得去年我們曾經介紹過一款「Pixoo像素發光電腦背包」?當時開箱介紹完之後,聽說就立刻賣光光,到前陣子都還有讀者在詢問哪裡還有貨。限量就是這麼的殘酷,現在經過一年後原團隊再次推出了一款體積較小,使用情境更多,攜帶更方便的隨身單肩包,這次一樣數量有限,先來看阿達簡單的開箱介紹。

DIVOOM Pixoo LED發光像素單肩包開箱

這次由 DIVOOM推出的 Pixoo 系列 LED 單肩包外盒在設計上看起來蠻時尚的:

開箱裡面有一個攜行袋,掏出後就有 Pixoo LED發光像素單肩包與說明書:

Pixoo LED發光像素單肩包外型跟一般的單肩包無異,不過別看它體積不大,前、中、後都有收納空間,加上暗袋的設計能裝的東西不少:

一開始讓我注意到的是磁吸快拆肩帶,真的好用且牢固:

先看最前面,裡面可放行動電源與各種物品:

LED發光像素單肩包耗電量不大,官方實測搭配10000mAh的行動電源可連續跑馬顯示一天以上:

中間區域的空間容量最大,不論是 iPad mini、微單相機、Switch放裡面都沒問題,還有網格袋可收納零錢等物品:

另外還有一組鑰匙扣可別上鑰匙、悠遊卡、門禁卡之類常忘記帶出門的物品:

後層可當防盜層,因為緊貼身體比較不會被扒手覬覦,可放錢包、證件之類的物品:

在LED發光像素單肩包後方還有提把設計,當手包也沒問題:

下方的約束帶可鬆開增加單肩包的內容量,也可放置腳架、三軸之類的物品:

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

中間還有暗袋設計,可放雨傘、小水壺之類的物品,真的蠻能裝的:

LED發光像素單肩包這邊買

 

LED發光像素單肩包面板切換

LED發光像素單肩包最重要的功能之一就是在它的正面有一個16×16的LED面板,只要下載 DIVOOM APP 就可以將自己設計的圖片文字傳到包包上(當然要有點藝術天分):

也可以傳輸文字到單肩包上,如果您在搭捷運時身體不適想座博愛座的話,就可以寫上「我身體不舒服」、「我腳痛」、「我是孕婦」之類的文字,正義魔人應該就比較不會來廢話(除非他不識字啦):

除了文字跑馬以外,還有音樂遊戲、俄羅斯方塊…等小遊戲可以遊玩,這時候就用手機當手把,LED發光像素單肩包當作螢幕玩,也是相當有趣的小功能:

DIVOOM Pixoo LED發光像素單肩包除了當作一般的側背包以外,也可以當胸包、腰包、提包,搭配您自己無限的創意(沒創意的話APP裡面有一堆免費圖案可用),絕對讓你在外走跳成為眾人目光焦點,也不會有撞包的問題,白天晚上都相當清楚:

騎車還有提醒後方的功能喔:

LED發光像素單肩包本身也具備防潑水功能,下雨也不怕:

我們也拍攝了開箱影片給大家參考,個人覺得相當多功能的小型單肩包,阿達也舉辦抽獎活動,想要得到的話到 YouTube影片下方留言,2/28號抽出:

 

LED發光像素單肩包這邊買

現在 DIVOOM Pixoo LED發光像素單肩包正在壞朋友募資平台上舉行預購,價格我個人也覺得很合理,外面不少沒有特殊功能的單肩包就賣快要兩千元,這一款除了會發光、文字跑馬、秀動畫圖片以外,用料也實在,個人蠻推薦的,也提供給大家參考喔。

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

OPPO Find X3 Pro 更多關鍵規格曝光:將搭載高通 S888 處理器、12GB RAM、256GB ROM_網頁設計公司

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

幾週前,爆料大神 Evan Blass 才洩漏 OPPO Find X3 Pro 的官方渲染圖,不過至今關於 OPPO 準備推出 Find X 系列的 Find X3 和 Find X3 Pro 除了後者幾乎確認搭載高通 S888 旗艦處理器,其餘所知的規格其實相當有限。不過稍早網路流出有關 Find X3 Pro 的規格和多個測試平台的截圖畫面,也透露更多 Find X3 Pro 的關鍵規格,其中包括螢幕解析度等資訊。

▲圖片來源:Evan Blass(Voice/@evleaks)

OPPO Find X3 Pro 更多關鍵規格曝光:將搭載高通 S888 處理器、12GB RAM、256GB ROM

▲圖片來源:Evan Blass(Voice/@evleaks)

稍早在酷安網出現多張疑似 OPPO Find X3 Pro 的規格截圖畫面,其型號 PEEM00 與過去的傳聞相符:

▲圖片來源:酷安網

根據手機的截圖顯示, Find X3 Pro 的螢幕解析度為 1440×3216 ,據傳螢幕尺寸為 6.67 吋並將支持自適應調整的 120Hz 更新率(支援 10Hz – 120Hz 可變螢幕更新率)。而 Find X3 系列也將首搭載 OPPO 「全鏈路色彩管理系統」,這套基於硬體所開發的色彩管理系統,該色彩管理系統擁有兩大核心技術,全鏈路 10-bit 及色彩管理,能夠大幅度提升色彩採集的豐富度,在顯示環節則能讓畫質更加清晰且更精準的還原顯示圖像色彩。

硬體規格方面, Find X3 Pro 除了確認搭載 Qualcomm Snapdragon 888 處理器,將具備 12GB RAM 和 256GB ROM ,從之前曝光的安兔兔跑分成績 Find X3 Pro 的成績測得 771,491 分的成績。作業系統方面,將運行 Android 11 並搭配 Color OS 11.2 使用者介面。

▲圖片來源:酷安網

▲圖片來源:酷安網

同時在 Geekbench 資料庫也出現相同型號 PEEM00 的裝置,其單核和多核測試分別獲得 4236 分和 13323 分。不過根據以往經驗 Geekbench 資料庫的內容僅可做為參考,無法確認是真實的規格。

▲圖片來源:Geekbench

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

回顧去年 11 月,爆料大神  Evan Blass 首次提及關於將搭載高通 Snapdragon 888 處理器的 OPPO Find X3 Pro(代號:Fussi),當時提及 Find X3 Pro 相機將配備 5000 萬像素四鏡頭主相機,其中標準鏡頭和超廣角鏡頭都將採用 SONY 全新的感光元件(其中包括 SONY IMX766 感光元件),此外也具備 1300 萬像素 2x 望遠鏡頭以及 300 萬像素微距鏡頭。

延伸閱讀:
ROG Phone 5 更多外觀、規格細節曝光:另有 Anime Matrix 顯示版本?

OPPO Find X3 Lite 完整實機開箱照洩漏!只是外觀有點眼熟?

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※想知道最厲害的網頁設計公司嚨底家"!

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

OPPO Find X3 Pro 實機上手玩照片曝光:火山口設計主相機,並加入顯微鏡拍攝_網頁設計公司

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

傳聞將於 3 月登場的 OPPO Find X3 系列中備受矚目的 Find X3 Pro ,在前段時間來自 Evan Blass(evleaks)首曝過官方渲染圖,讓大家對於這款新機有了初步的概念。而今日稍早, evleaks 更是直接洩漏多張 OPPO Find X3 Pro 的實機外觀照片,從這批照片可以發現其實和之前的渲染圖幾乎吻合,不過實機的樣貌看起來還是相當特殊。

▲圖片來源:Evan Blass(Voice/@evleaks)

OPPO Find X3 Pro 實機上手玩照片曝光:火山口設計主相機,並加入顯微鏡拍攝

除了日前電腦王阿達為大家開箱的 OPPO Reno5/Reno5 Pro 開箱,相信也有不少人等待 2021 年 OPPO 在全新 Find X 系列會帶來哪些驚喜。稍早,爆料大神 Evan Blass(evleaks)釋出多張 Find X3 Pro 的實機外觀照片,與他之前分享的渲染圖的外觀造型可說是幾乎相同。這款將搭載 Qualcomm Snapdragon 888 的 Find X3 Pro 在機身背面和相機模組間有著流線的曲面弧度,而相機模組周圍微微隆起的「火山口」設計,據傳 Find X3 Pro 將推出玻璃和陶瓷兩種材質版本,相信對於生產也將帶來相當大的挑戰。

▲圖片來源:Evan Blass(Voice/@evleaks)

▲圖片來源:Evan Blass(Voice/@evleaks)

▲圖片來源:Evan Blass(Voice/@evleaks)

相機規格方面, Find X3 Pro 傳聞將搭載 5000 萬像素四鏡頭主相機的配置,其中包括 5000 萬像素的主鏡頭和超廣角鏡頭(SONY IMX766 感光元件),另外最特殊的是 Find X3 Pro 將加入一枚配有環形補光燈的 300 萬像素微距鏡頭,其 25 倍變焦可實現「顯微鏡」模式拍攝。至於第四顆鏡頭,則是去年就在 Find X2 搭載的 1300 萬像素 2x 長焦鏡頭( F2.4光圈、5P 鏡頭、5 倍混合變焦、最高 20倍數位變焦)。

▲圖片來源:Evan Blass(Voice/@evleaks)

在一月底,數碼閒聊站也在微博刊出一張手機的相機操作介面截圖,當時就曾出現過「顯微鏡」模式:

▲圖片來源:數碼閒聊站(微博)

最後關於 Find X3 系列發表的時間,傳聞 OPPO 有望於三月正式發表全新 Find X3 系列,包括 Find X3 Pro 、 Find X3 Neo 以及 Find X3 Lite ,其中 Find X3 Lite 日前的開箱照也證實就是台灣已推出的 Reno5 的更名版本。

消息來源:Evan Blass(Voice/@evleaks)|數碼閒聊站(微博)

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

延伸閱讀:
OPPO Find X3 Pro 更多關鍵規格曝光:將搭載高通 S888 處理器、12GB RAM、256GB ROM

ROG Phone 5 更多外觀、規格細節曝光:另有 Anime Matrix 顯示版本?

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

3 種生成高強度密碼的方法_網頁設計公司

綠能、環保無空污,成為 電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

現在信息泄露越來越嚴重,而強大的密碼是防止個人敏感信息泄露的第一步。良許曾經分享過一篇文章,如何判斷你的密碼是否足夠安全,點擊以下鏈接查看:

信息泄漏時代,如何讓自己的密碼更安全?

在生活中,我們需要用到大量的密碼,這些密碼最好不要統一,否則萬一泄漏的話,所有賬號都暴露在風險之下。而在工作中,我們同樣也需要用到大量密碼,比如批量添加用戶,批量設置服務器密碼等。

如果靠自己去想的話,想到的密碼可以不夠強大,而且比較費力。下面良許就介紹 3 種方法來批量生成高強度的密碼。

所謂的高強度密碼,就是包含了大小寫、数字、符號的密碼。

1. pwgen

pwgen 的特點是可以生成一些能夠被人類記住,並且也足夠安全的密碼。但是,如果你想生成不容易記住的隨機密碼,只需加上 -s 選項即可。

1.1 pwgen 的安裝

對於 Debian/Ubuntu 系統,直接使用 apt-get 命令即可安裝。

$ sudo apt install pwgen

對於 RHEL/CentOS 系統,可以使用 yum 命令安裝。

$ sudo yum install pwgen

其它系統可以使用對應的安裝命令,在此不贅述。

1.2 pwgen 的用法

pwgen 最簡單的用法是直接敲入這個命令,不帶任何參數就可以生成 160 個密碼。默認情況下,它生成的密碼是易於人類記住的密碼,8 個字符,包含大小寫及数字。

自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

一共 160 個,分成 20 行 8列。限於篇幅,以下結果做了縮減。

$ pwgen
ameiK2oo aibi3Cha EPium0Ie aisoh1Ee Nidee9ae uNga0Bee uPh9ieM1 ahn1ooNg
oc5ooTea tai7eKid tae2yieS hiecaiR8 wohY2Ohk Uab2maed heC4aXoh Ob6Nieso
…………
ahV4yore ue2laePh fu1eThui qui7aePh Fahth1nu ohk9puLo aiBeez0b Neengai5

如果你想生成 5 個 14 個字符長度的密碼,那麼可以使用以下命令:

$ pwgen -s 14 5
7YxUwDyfxGVTYD em2NT6FceXjPfT u8jlrljbrclcTi IruIX3Xu0TFXRr X8M9cB6wKNot1e

如果你想生成超級難記,超級安全的密碼,可以加上 -cnys 選項,使用以下格式:

$ pwgen -cnys 14 20
mQ3E=vfGfZ,5[B #zmj{i5|ZS){jg Ht_8i7OqJ%N`~2 443fa5iJ\W-L?] ?Qs$o=vz2vgQBR
^'Ry0Az|J9p2+0 t2oA/n7U_'|QRx EsX*%_(4./QCRJ ACr-,8yF9&eM[* !Xz1C'bw?tv50o
8hfv-fK(VxwQGS q!qj?sD7Xmkb7^ N#Zp\_Y2kr%!)~ 4*pwYs{bq]Hh&Y |4u=-Q1!jS~8=;
]{$N#FPX1L2B{h I|01fcK.z?QTz" l~]JD_,W%5bp.E +i2=D3;BQ}p+$I n.a3,.D3VQ3~&i

2. openssl

openssl 命令是調用 OpenSSL 的一些庫中的各種密碼學函數來生成密碼,強度也相對比較高。

我們可以使用以下命令格式來生成一個 14 位的隨機密碼:

$ openssl rand -base64 14
WjzyDqdkWf3e53tJw/c=

但是,這樣一條命令只能生成一個密碼,如果想要批量生成密碼,就要寫一個簡單的 Shell 語句。

$ for pw in {1..4}; do openssl rand -base64 14; done
6i0hgHDBi3ohZ9Mil8I=
gtn+y1bVFJFanpJqWaA=
rYu+wy+0nwLf5lk7TBA=
xrdNGykIzxaKDiLF2Bw=

3. gpg

1991年,程序員 Phil Zimmermann 為了避開政府監視,開發了加密軟件 PGP。這個軟件非常好用,迅速流傳開來,成了許多程序員的必備工具。但是,它是商業軟件,不能自由使用。所以,自由軟件基金會決定,開發一個PGP的替代品,取名為 GnuPG

我們可以使用以下格式來生成一個隨機的 14 位高強度密碼。

$ gpg --gen-random --armor 1 14
or
$ gpg2 --gen-random --armor 1 14
jq1mtY4gBa6gIuJrggM=

同樣地,如果這個命令只能生成一個密碼,如果要生成多個,那就需要寫一個簡單的 Shell 語句。

$ for pw in {1..4}; do gpg --gen-random --armor 1 14; done
or
$ for pw in {1..4}; do gpg2 --gen-random --armor 1 14; done
F5ZzLSUMet2kefG6Ssc=
8hh7BFNs8Qu0cnrvHrY=
B+PEt28CosR5xO05/sQ=
m21bfx6UG1cBDzVGKcE=

4. 小結

一個強大的密碼是保證我們賬號安全的第一步,重要性不容小覷。本文介紹了 3 種方法隨機生成高強度密碼,但還有很多工具還可以生成這樣的密碼,比如 makepasswdmkpasswd 等。大家平常都是怎麼生成密碼的?歡迎留言討論!

公眾號:良許Linux

有收穫?希望老鐵們來個三連擊,給更多的人看到這篇文章

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

簡單的面試經歷和學習分享!_網頁設計公司

想知道最厲害的 網頁設計公司嚨底家

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

最近在交流群里,有找工作的小夥伴,經常會問到,怎樣去找工作(就是投簡歷)以及如何去準備面試,也有小夥伴會問到一些學習方面的問題,比如如何學習 Linux ,如何學習 stm32等等,今天的文章,就來總結一下我個人的看法。

 

一、關於找工作方面的問題:

 

現在找工作確實越來越來難了,首先在投簡歷第一關,就是刷學歷,一般學歷達不到要求的話,就沒機會進行下一步了(舉個例子,比如去招聘網站上投簡歷,人家招聘要求裏面是本科及以上,這樣的話你投簡歷的話少投,不是不可以投,為啥這樣,下面在找工作第二關會說明)。

 

然後是第二關,你投簡歷的時候,要仔細看一下招聘要求,然後結合自身掌握的技能,適當的去投一些可能學歷不符合的公司,因為你能力達到了招聘要求,這可以去投簡歷試試,一般有些公司如果覺得你技能達到他們的要求,也是會來破格來招聘的(但是一些大廠的話,一般對學歷方面要求很嚴,不管是社招還是應屆,所以這個一般投簡歷沒啥意識,不要浪費時間,這個自己也有親身體會,當然可能也有例外,這都說不定!);總之如果招聘要求裏面有對學歷有硬性要求的,而且註明達不到要求的,不要去投簡歷,這個時候雙方就不要互相打擾了;如果沒有說明都可以去試試,只要你的技能達到招聘要求,機會都是自己爭取來的,不要輕易放棄。

 

第三關,如何寫簡歷,這個想必對於大多數剛畢業的應屆生來說,都是非常缺乏經驗的;那麼重點來了,對於怎樣寫簡歷這個問題,首先不要向寫小說一樣長篇大幅,這樣投的簡歷給 hr 看的話,他(她)根本沒有這麼多時間來看你的簡歷,因為不只有你一個人來投簡歷,所以我們要抓重點來寫,比如說自己掌握哪些技能(在嵌入式方面,你可以寫,熟悉 c、c++ 等編程語言,不要用精通二字,精通二字不要亂用;然後可以寫一寫,你在校做的項目或者參賽經歷都可以精簡寫出來等等);其實關於這方面,我個人覺得boss直聘網站上的簡歷模板就非常好的(如果實在不會做簡歷的話,或者說網上沒有找到合適的模板),自己之前找工作就是用 boss 直聘上的簡歷模板。

 

第四關,如何準備面試;對於這個,對於我們應屆生來說,也是非常欠缺經驗的;這裏介紹一下面試過程(不是規範,但是是自己的親身面試經歷):

  • 一般去公司面試的話,一開始hr會跟你聊一下,主要是大概了解一下你的基本情況(比如說,再次介紹一下自己的一些基本情況,或者說談談你對這個行業的認識等等)。

  • 然後一般的話,都會有一個筆試題;因為我們都是做底層開發的,C語言基礎必考的(也有一些c語言高級用法);一些數據結構(比如棧,隊列、鏈表等)問題在解答題裏面都是會有的;甚至有些會考一些外設協議問題,這方面稍微注意一下數據結構,這幾天和小夥伴交流的時候,就發現他的數據結構知識沒有掌握好。

  • 然後在你做完筆試,一般是現場給你答覆的(當然也有要等幾天的),如果筆試過了話,這時候, hr 會跟你說,我們技術主管會跟再聊一下技術上的問題;技術主管的話,對於應屆生,一般不會問很難的技術問題(社招就可能難了,這個不好說),大部分是一些基礎的問題,主要是考察你的基礎;這裏還有一點要非常注意,就是當你遇到不會的問題的時候,你不要一直在哪裡想,這樣會給別人不好的印象,你可以換個角度說嘛(比如說這個平時很久沒接觸了,只要我一看這個,就能理解和知道的;這個只是我舉個例子來說哈,還是要自己靈活變通的)。

  • 然後技術主管問完了話,覺得你的技術可以的話,一般情況下會當場直接給offer的(當然也有要等幾天,因為有些崗位競爭比較激烈;如果覺的回答技術的時候,回答的不好,然後 hr 叫你回去等消息的話,可以大部分情況下是涼了,這個要心裏有數。),這個時候,會跟老闆再談一談,主要是薪資待遇方面。

  • 在跟老闆談薪資待遇的時候,要說清楚和談清楚——比如說,開工資,你開在招聘時給的薪資範圍之內就行,如果最後沒有達到你所想要的,這個時候,先不要直接拒絕,先可以考慮一下,再回復;還有一些福利待遇,比如五險一金,上升空間,上班時間等等;總之一句話,你真要進公司,把自己要問的,都要問清楚來。

     

 

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

二、關於學習方面:

 

第一、關於 Linux 方面的學習;Linux 學習主要是:Linux 應用和 Linux驅動。對於學習 Linux 應用,一般的話,我們大部分是用  ubuntu 來進行學習的,所以首先,你得必須搭建好環境(這裏可以推薦一個公眾號:軟件管家,裏面的軟件都有安裝教程,對於小白非常友好。),一般的話我們都是在虛擬機裏面安裝 Linux 系統的,這樣省事,而且也一般不建議真機安裝 Linux ,對於我們入手的新手來說;然後在安裝好 Linux 系統后,最好快照一下,以免下次打開的時候,出現宕機問題,搞不好你又要去重裝系統,那就浪費時間了;最後就是在 Linux 系統裏面搭建編程環境,比如說安裝 gcc  、vim  、g++ 等,最後就可以開始學習了,對於新手的話,建議看書加視頻結合(視頻的話,可以在 b 站上找,如果覺得不好,也可以自己花點錢去買視頻學習,反正現在花點錢,如果你學到了,到時候出來找到了工作,一下子就賺回來了,這也是給自己投資。);這裏還有一個建議,在學的過程多記筆記和總結,同時也要多和別人交流。

 

第二、驅動方面;這方面的話,自己也是剛學,給的建議不多,開發板一塊,主要是用來做實驗,還有就是c語言基礎要好,最難得是要經的起折騰。

 

第三、關於 stm32 的學習,這方面我不好說,最好的建議就是你可以去招聘網站上去看招聘要求,看看大多數公司要求會哪些方面,然後你可以結合自己買的開發板資料,在學完基礎的部分,然後根據這些招聘要求去適當提高自己和學習。上面的 Linux 學習也是這樣的。

 

第四、關於學習過程中遇到問題,怎麼解決?首先如果是你學過知識點,可以先仔細思考或實驗,當這個方法行不通的話,就可以用搜索引擎去查找(一般情況下,別人也有遇到過的你這樣的問題),這搜索引擎的話,百度、bing、谷歌都可以,只要能夠幫到你的,都要去嘗試;如果這些都解決不了的話,這個時候可以單獨向一些大神請教或者在相關技術交流群里問(不過問問題的時候,要把問題描述清楚,而且也要有禮貌,不要給別人一種就是要給我解決問題的感覺,這一點切記於心!);然後如果是你沒遇到過的知識點,這時候自己可以看看,有沒有手冊說明(比如說我們在搞一款沒遇到的芯片),如果沒有的話,可以去官網查找或者博客裏面查找(這裡在博客裏面查找問題或者知識點的話,我一般喜歡瀏覽量比較大的博客,因為一般情況下,這些有用的,當然也不能那麼絕對!)。

 

三、總結:

 

今天所分享的這兩方面,是在平時和網友交流過程中遇到的,也有我自己親身經歷的(比如找工作方面,當初對於做簡歷和面試,對於剛出來的我也是一張白紙,什麼都不懂,然後後面經歷過很多面試,最後多總結和復盤、走心,慢慢的,自然這些東西你就會了!)。上面的一些看法,可能寫的比較片面(主要是針對剛畢業的應屆生和在校生),希望對你有幫助,如有不足和欠缺的地方,可以在留言下方補充。同時這裏也分享兩個問題給大家思考,或許以後,你可能會遇到這樣的處境:

 

  • 比如說,如果你還在一家公司上班,然後跳槽, hr 會問你,你為啥要辭職,你會怎麼回答?

  • 如果在技術主管問到你不會的技術或者知識點,你會怎樣回答和應對?

更多精彩內容可以關注微信公眾號:

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

台北 網頁設計公司全省服務真心推薦

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!