P.S. 這只是一個(gè)備忘錄卓研,避免未來(lái)轉(zhuǎn)行忘記現(xiàn)在所學(xué)會(huì)的一切,所以把它記錄下來(lái)炸茧!
最后更新時(shí)間:2024-11-07(未完待補(bǔ)充)
需要會(huì)的編程語(yǔ)言一覽
編程語(yǔ)言:java每强、javascript、typescript娇掏、css呕寝、sass/scss、html婴梧、sql下梢、lua、c#塞蹭、
了解或者會(huì)一點(diǎn)的編程語(yǔ)言:C孽江、C++、Go番电、Python
表達(dá)式:正則表達(dá)式岗屏、
數(shù)據(jù)庫(kù)基礎(chǔ)
數(shù)據(jù)庫(kù)安裝、數(shù)據(jù)庫(kù)配置漱办,(DDL这刷、DCL、DML)娩井,SQL暇屋,存儲(chǔ)過(guò)程,觸發(fā)器洞辣,視圖咐刨,SELECT查詢,子查詢扬霜,左/右/內(nèi)/外連接查詢定鸟,多表關(guān)聯(lián)查詢,分組統(tǒng)計(jì)查詢著瓶,查詢排序仔粥。Update更新,Delete刪除蟹但,邏輯刪除,閃回查詢谭羔,截?cái)啾砘牵治鰣?zhí)行計(jì)劃,數(shù)據(jù)庫(kù)內(nèi)置函數(shù)瘟裸,SQL性能優(yōu)化客叉,數(shù)據(jù)類型轉(zhuǎn)換,數(shù)據(jù)庫(kù)引擎,數(shù)據(jù)庫(kù)自增id兼搏,字段默認(rèn)值卵慰,字段效驗(yàn),數(shù)據(jù)庫(kù)主鍵(包括隱藏主鍵)佛呻,外鍵關(guān)聯(lián)裳朋,索引(聚合索引、非聚合索引)吓著,數(shù)據(jù)庫(kù)用戶/用戶權(quán)限管理鲤嫡,數(shù)據(jù)備份恢復(fù),數(shù)據(jù)庫(kù)異常修復(fù)绑莺,數(shù)據(jù)庫(kù)災(zāi)備暖眼,數(shù)據(jù)庫(kù)日志查看。
mysql專屬技術(shù):
- innodb數(shù)據(jù)庫(kù)引擎(這個(gè)不是專屬的纺裁,很多數(shù)據(jù)庫(kù)都有)诫肠,myisam數(shù)據(jù)庫(kù)引擎
- replace into,update/delete根limit語(yǔ)句欺缘,跨庫(kù)select/update栋豫,ON DUPLICATE KEY語(yǔ)句。
- mysqldump數(shù)據(jù)庫(kù)備份工具浪南。
- mysqlcheck數(shù)據(jù)庫(kù)檢查/修復(fù)工具笼才。
oracle一些專屬技術(shù):
- nvl函數(shù)
- ROWID、ROWNUM偽列
還有數(shù)據(jù)庫(kù)連接工具:Navicate络凿、Dberver骡送、Studio3T、RedisManage絮记、redis-client(redis自帶的命令行客戶端工具)摔踱。
需要掌握/了解的數(shù)據(jù)庫(kù)
- 常用關(guān)系型數(shù)據(jù)庫(kù):Mysql,MariaDB怨愤,Oracle派敷,PostgreSQL
- 可嵌入式輕量級(jí)關(guān)系型數(shù)據(jù)庫(kù):Sqlite
- 用于處理大量數(shù)據(jù)查詢的關(guān)系型數(shù)據(jù)庫(kù):Clickhouse
- 可用于緩存或快速key-value查詢的NoSQL數(shù)據(jù)庫(kù):Redis(RDB存儲(chǔ)技術(shù))
- 文檔型NoSQL數(shù)據(jù)庫(kù):MongoDB
- 支持分布式的搜索引擎:Elasticsearch
- 數(shù)據(jù)庫(kù)語(yǔ)言:SQL、PL/SQL(Oracle)撰洗、Bson(MongoDB)
數(shù)據(jù)庫(kù)/spring事務(wù)相關(guān)技術(shù)
- 事務(wù)相關(guān):
- 事務(wù)傳播方式:
- REQUIRED:已存在則使用已有的篮愉,否則新建(默認(rèn))
- SUPPORTS:當(dāng)前存在事務(wù)則加入,否則以非事務(wù)方式執(zhí)行
- MANDATORY:當(dāng)前存在事務(wù)則加入差导,否則拋出異常
- REQUIRES_NEW:總是創(chuàng)建一個(gè)新事務(wù)執(zhí)行试躏,如果已存在則掛起。
- NOT_SUPPORTED:以非事務(wù)方式執(zhí)行设褐,如果當(dāng)前存在事務(wù)則掛起颠蕴。
- NEVER:一直以非事務(wù)方式執(zhí)行泣刹,如果存在則拋出異常。
- NESTED:如果存在事務(wù)則創(chuàng)建一個(gè)嵌套事務(wù)犀被,否則創(chuàng)建一個(gè)新事務(wù)椅您。
- 事務(wù)隔離級(jí)別:
- Read Uncommitted:未提交讀。最低的隔離級(jí)別寡键,會(huì)讀取沒(méi)有提交的數(shù)據(jù)掀泳,會(huì)導(dǎo)致臟讀幻讀不可重復(fù)讀。
- Read Committed:已提交讀昌腰。允許讀取已經(jīng)提交的數(shù)據(jù)开伏。會(huì)導(dǎo)致幻讀和不可重復(fù)讀。
- Repeatable Read(部分?jǐn)?shù)據(jù)庫(kù)的默認(rèn)級(jí)別):可重復(fù)讀遭商。對(duì)同一個(gè)字段多次讀取結(jié)果是一樣的固灵,但是依然可能產(chǎn)生幻讀。
- Serializable:串行化劫流,最高隔離級(jí)別巫玻,所有事務(wù)依次執(zhí)行,一個(gè)結(jié)束執(zhí)行另外一個(gè)祠汇。
- 臟讀/幻讀/不可重復(fù)讀問(wèn)題
- 臟讀:讀取到的數(shù)據(jù)是未提交的仍秤,程序認(rèn)為是已經(jīng)有了,但是可能那邊事務(wù)回滾了可很,導(dǎo)致實(shí)際數(shù)據(jù)不存在诗力。
- 不可重復(fù)讀:第一次讀取一條數(shù)據(jù)拿到結(jié)果A,但是事務(wù)還沒(méi)結(jié)束另外一個(gè)請(qǐng)求把這條數(shù)據(jù)改了我抠,當(dāng)前事務(wù)第二次讀取這條數(shù)據(jù)苇本,結(jié)果和之前的A不一樣,這就是不可重復(fù)讀問(wèn)題菜拓。
- 幻讀:獲取表中所有數(shù)據(jù)一共10條瓣窄,另外一個(gè)事務(wù)加入了一條新數(shù)據(jù),這個(gè)時(shí)候在讀取數(shù)據(jù)變成11條數(shù)據(jù)了纳鼎,這就是幻讀俺夕。
- 事務(wù)傳播方式:
需要掌握/了解的中間件:
- 文件服務(wù):FastDFS、Minio
- java服務(wù)器:Tomcat贱鄙、jetty(可以了解weblogic和websphere)
- 發(fā)布訂閱推送消息系統(tǒng):RabbitMQ劝贸、Kafka
- 反向代理服務(wù)器/web前端頁(yè)面服務(wù)器:nginx
- 容器化管理服務(wù)工具:docker
- 容器編排工具:docker-compose、k8s逗宁、rancher
- 配置中心:nacos映九、apollo、spring cloud config
- 分布式協(xié)調(diào)框架:eureka(AP)疙剑、zookeeper(CP)
docker需要掌握的技術(shù)
Dockerfile文件編寫氯迂,docker包構(gòu)建命令,docker鏡像導(dǎo)入導(dǎo)出刪除言缤,docker鏡像詳情信息查看嚼蚀,docker容器啟動(dòng)停止重啟刪除,docker容器進(jìn)入管挟,docker網(wǎng)絡(luò)配置和刪除轿曙,docker環(huán)境變量配置,docker啟動(dòng)命令配置僻孝,docker端口映射导帝,docker文件掛載,docker cpu/內(nèi)存使用限制穿铆,docker重啟策略和異常通知您单,docker日志記錄和日志大小限制,docker健康檢測(cè)荞雏,docker內(nèi)外文件復(fù)制虐秦,docker鏡像tar包結(jié)構(gòu)原理,docker中心倉(cāng)庫(kù)和docker私有倉(cāng)庫(kù)搭建以及登錄docekr服務(wù)器凤优,arm悦陋、x86下docker的區(qū)別,docker中使用N卡gpu筑辨。
docker命令記錄:
- docker exec -it xxxx /bin/bash
- docker save xxx:xxx > xx.tar
- docker load < ./xx.tar
- docker pull xxx:xxx
- docker push
- docker inspect 鏡像id/鏡像名字:版本號(hào)/docker進(jìn)程名字/docker進(jìn)程id
- docker run -itd [--name xxx -p xx:xx -p xx:xx] xxx [commands]
- docker stop xxx
- docker start xx
- docker restart xx
- docker rm xx
- docker rmi xxx
- docker network ls
- docker network rm
- docker ps [--no-trunc]
- docker kill
- docker attach
- docker images
- docker version
- docker logs [-f --tail 1] xxxx
docker-compose命令記錄:
- docker-compose [-f xxxx/xx/docker-compose.yml] down [-v]
- docker-compose [-f xxxx/xx/docker-compose.yml] up [-d]
- docker-compose restart
- docker-compose logs [-f --tail 1]
java基礎(chǔ)
JSE俺驶、JEE、JME
java基本語(yǔ)法棍辕,50+關(guān)鍵字用法暮现,包裝類,IO流(字節(jié)流痢毒、字符流送矩、打印流、掃描流哪替、緩沖流)栋荸,對(duì)象序列化,NIO/AIO凭舶,NET(B/S協(xié)議晌块、C/S協(xié)議,TCP帅霜、UDP)匆背,多線程,線程池身冀,反射(還原類結(jié)構(gòu)钝尸,實(shí)例化對(duì)象括享,跳過(guò)構(gòu)造方法實(shí)例化對(duì)象),類加載器(遠(yuǎn)處網(wǎng)絡(luò)class類加載珍促,動(dòng)態(tài)加載卸載類)铃辖,異常捕捉,Annotation注解猪叙,函數(shù)式編程(Lambda表達(dá)式娇斩,方法引用,函數(shù)式接口)穴翩,集合框架(Iterator犬第、Collection、List芒帕、Set歉嗓、Map、Enumeartion副签、Vector遥椿、Struct、Concurrent*線程安全的集合框架淆储,CopyOnWriteArrayList冠场、...),JDBC(包括事務(wù)控制本砰,控制臟讀幻讀)碴裙,枚舉,泛型点额,比較器舔株,時(shí)間日期,時(shí)區(qū)概念/統(tǒng)一項(xiàng)目時(shí)區(qū)还棱,正則表達(dá)式载慈,多語(yǔ)言/國(guó)際化程序,Stream流珍手,動(dòng)態(tài)代理類办铡,字符串/可變字符串,大數(shù)值類(BigInteger琳要、BigDecimal)寡具,文件監(jiān)控類Watcher,稚补,java調(diào)用本地程序童叠,JNI,swing/awt课幕,對(duì)象克隆厦坛,XML/JSON五垮,JVM內(nèi)存模型(方法區(qū)、靜態(tài)區(qū)杜秸、棧內(nèi)存拼余、堆內(nèi)存),GC(G1亩歹、ZGC),java啟動(dòng)參數(shù)凡橱,javadoc文檔注釋小作,package-info/module-info。
主線程稼钩,守護(hù)線程顾稀。ThreadLocal,InheritableThreadLocal坝撑。
Java Agent代碼注入静秆,volatile多線程可見(jiàn)性原理,cpu行緩存巡李,CAS自旋鎖抚笔。SPI服務(wù)發(fā)現(xiàn)機(jī)制(jdbc是一個(gè)例子)
java配套技術(shù)
- eclipse/idea:java開(kāi)發(fā)工具。還有myeclipse侨拦,集成了大量插件殊橙,不過(guò)沒(méi)啥必要,spring的eclipse插件是免費(fèi)的狱从,用eclilpse+spring tools插件即可膨蛮。
- maven/gradle:項(xiàng)目管理工具+項(xiàng)目依賴包管理工具(打包構(gòu)建也是用他)
- git/svn:代碼版本管理工具。(.gitignore忽略文件編寫)
- TortoiseGit/TortoiseSVN:有可視化界面的git/svn操作軟件(最常用的)
- junit:?jiǎn)卧獪y(cè)試庫(kù)季研。
- jenkins:自動(dòng)化持續(xù)集成工具(讓某一個(gè)或某一套流程自動(dòng)化完成)
- sonarQube/sonarLint:代碼檢查工具(查bug敞葛、漏洞、優(yōu)化建議)与涡,代碼檢查插件(適用于開(kāi)發(fā)工具)
- gitlab:可搭建私有代碼倉(cāng)庫(kù)(共有的有g(shù)ithub和gitee)
- tomcat:java項(xiàng)目部署服務(wù)器
- openjdk:開(kāi)源免費(fèi)版本的jdk
- ffmpeg:開(kāi)源免費(fèi)的視頻處理庫(kù)(包括但不限于轉(zhuǎn)碼惹谐、實(shí)施推流、提取圖片递沪、截取視頻等)豺鼻,很多視頻播放軟件也是基于ffmpeg開(kāi)發(fā)的。
- openssl:用于生成ssl證書
- JD-GUI:java代碼反編譯工具
- jconsole:java自帶的圖形化界面的進(jìn)程監(jiān)控工具款慨。(命令行版的有jmap儒飒、jstat等)
- 數(shù)據(jù)庫(kù)設(shè)計(jì)軟件:powerDesigner(最常用)
java框架
- spring:核心框架,包括各種第三方框架集成檩奠,IOC+AOP桩了,項(xiàng)目生命周期管理附帽,以及各種強(qiáng)大功能。具體包括:
- spring:spring核心框架井誉。
- spring mvc:控制層controller核心框架蕉扮。
- springboot:簡(jiǎn)化web開(kāi)發(fā)的新一代框架,內(nèi)置tomcat颗圣,去xml配置喳钟,更多生命周期管理和擴(kuò)展功能。更多自動(dòng)注入自動(dòng)適配功能在岂。springboot也有自己的一套SPI更好用(spring.factories)奔则。
- springjdbc:jdbc框架
- spring security:web安全框架
- spring aop:AOP代理設(shè)計(jì)模式框架。
- spring data:JPA框架蔽午,簡(jiǎn)化各種數(shù)據(jù)庫(kù)訪問(wèn)易茬。(jpaRepository方法命名規(guī)則)
- spring cloud:微服務(wù)框架
- springfox:接口文檔生成框架
- springtest單元測(cè)試框架
- spring-websocket:websocket框架
- mybatis:半輕半重的最好用的jdbc框架之一。
- PageHelper:mybatis的分頁(yè)插件(不過(guò)要是直接用mybatis-plus就不需要這個(gè)了)
- mybatis-plus:mybatis的加強(qiáng)版及老,減少sql配置抽莱,自動(dòng)化實(shí)現(xiàn)更多sql操作。
- shiro:web安全骄恶、權(quán)限框架食铐,和spring security功能類似。
- flyway:自動(dòng)管理數(shù)據(jù)庫(kù)sql版本僧鲁。
- validation-api:參數(shù)驗(yàn)證框架璃岳,一般用在controller上。用配置實(shí)現(xiàn)參數(shù)效驗(yàn)悔捶。
- httpclient/okhttp:http請(qǐng)求框架铃慷。
- swagger:接口文檔框架。
- jackson:最好用的json框架之一蜕该。除此之外其他json框架還有(Gson犁柜、FastJson)
- druid:對(duì)運(yùn)維管理非常有好多數(shù)據(jù)庫(kù)連接池框架。
- HikariCP:spring內(nèi)置的輕量級(jí)性能好的數(shù)據(jù)庫(kù)連接池框架堂淡。
- 工具庫(kù):
- apache-common:apache常用工具庫(kù)
- apache-io:apache IO工具庫(kù)
- apache-net:apache網(wǎng)絡(luò)工具庫(kù)
- apache-fileupload:apache http文件上傳工具庫(kù)
- apache-codec:apache的編解碼工具庫(kù)
- spring utils:spring工具庫(kù)
- hutool:也是一個(gè)包含了很多常用操作的工具庫(kù)
- cglib/javassist/asm:動(dòng)態(tài)生成java類的庫(kù)馋缅,從左到右使用越來(lái)越難,但也越來(lái)越靈活绢淀。
- lombok:用注解方式自動(dòng)生成實(shí)體類setter萤悴、getter方法等各種常用方法/屬性的框架,可以極大的提高代碼開(kāi)發(fā)效率皆的。
- redission:非常好用的redis連接框架覆履,而且支持基于redis的很多分布式鎖功能。
- javacv:java集成ffmpeg的框架之一。
- feign:RPC框架硝全,通過(guò)接口和注解可以實(shí)現(xiàn)http接口調(diào)用操作栖雾,本身也是spring cloud生態(tài)框架中的一個(gè)。類似的RPC框架還有dubbo伟众。
- ribbon:一般配合feign使用析藕,可以實(shí)現(xiàn)負(fù)載均衡和服務(wù)發(fā)現(xiàn),feign只需要配置一個(gè)key凳厢,ribbon會(huì)根據(jù)key找到合適的ip進(jìn)行請(qǐng)求账胧。
- slf4j:統(tǒng)一的日志框架。他主要是一個(gè)抽象出來(lái)的公共日志操作先紫,避免切換日志框架帶來(lái)的修改代碼復(fù)雜的問(wèn)題找爱。他一般和其他日志框架配合使用。
- log4j泡孩、log4j2、logback:日志框架寺谤,logback是spring自帶的仑鸥。
- netty:這是一個(gè)簡(jiǎn)化了NIO網(wǎng)絡(luò)編程的框架。
- jasypt:這是一個(gè)可以讓springboot的配置文件中配置密文的框架变屁。從Environment中獲取配置時(shí)眼俊,會(huì)自動(dòng)將密文轉(zhuǎn)換為明文。這個(gè)框架是為了提高服務(wù)部署時(shí)配置文件的安全問(wèn)題粟关,不出現(xiàn)明文疮胖。
- poi:java讀寫excel的框架
- protobuf-java:java中使用protobuf協(xié)議的框架。
- jnotify:一個(gè)基于JNI調(diào)用底層邏輯的文件監(jiān)控庫(kù)闷板。用下來(lái)感覺(jué)底層原理和watch類差不多澎灸,都會(huì)占用監(jiān)視器數(shù)量,達(dá)到上限也會(huì)報(bào)錯(cuò)遮晚。不過(guò)他不會(huì)堵塞刪除性昭。(api很好用,但是jar沒(méi)法直接用县遣,因?yàn)閟o和dll沒(méi)有自動(dòng)加載糜颠,還得自己重寫里面有問(wèn)題的類重新加載)
需要了解的JSR規(guī)范提案
- JSR303:這是最常用的標(biāo)準(zhǔn)化參數(shù)驗(yàn)證規(guī)范。例如spring內(nèi)置了hibernate-validator包實(shí)現(xiàn)JSR303規(guī)范萧求。只需要給實(shí)體類設(shè)置注解其兴,然后再通過(guò)特定的類進(jìn)行檢查就可以自動(dòng)實(shí)現(xiàn)參數(shù)效驗(yàn)和拋出異常。springmvc的參數(shù)則會(huì)自動(dòng)對(duì)接口參數(shù)進(jìn)行效驗(yàn)無(wú)需自己再去編寫驗(yàn)證代碼夸政。
spring框架需要掌握的技術(shù)
tag: 以springboot為主
[spring]配置優(yōu)先級(jí):
支持讀取的配置文件:
- application.yml
- application-{profile}.yml
- application.properties
- application-{profile}.properties
- config/application.yml
- config/application-{profile}.yml
- config/application.properties
- config/application-{profile}.properties
配置加載優(yōu)先級(jí):
- 命令行參數(shù)
- JNDI配置
- java系統(tǒng)屬性:System.getProperties()
- 操作系統(tǒng)環(huán)境變量
- RandomValuePropertySource 配置的 random.* 屬性值元旬。
- jar包外部配置文件(有些順序沒(méi)驗(yàn)證過(guò)):
5.1. application-{profile}.properties
5.2. application-{profile}.yml
5.3. application.properties
5.4. application.yml
5.5. config/application-{profile}.properties
5.6. config/application-{profile}.yml
5.7. config/application.properties
5.8. config/application.yml - jar包內(nèi)classpath下配置文件(有些順序沒(méi)驗(yàn)證過(guò)):
6.1. classpath:application-{profile}.properties
6.2. classpath:application-{profile}.yml
6.3. classpath:application.properties
6.4. classpath:application.yml
6.5. classpath:config/application-{profile}.properties
6.6. classpath:config/application-{profile}.yml
6.7. classpath:config/application.properties
6.8. classpath:config/application.yml
[spring]常用注解
- @SpringBootApplication
- @Component,@Service,@Repository法绵,@Controller箕速,@RestController,@ControllerAdvice朋譬,@RestControllerAdvice盐茎,@Configurable
- @Order,@Primary
- @Import徙赢,@ImportAutoConfiguration字柠,@ConfigurationProperties,@EnableConfigurationProperties
- @RequestMapping狡赐,@GetMapping窑业,@PostMapping,@PutMapping枕屉,@DeleteMapping常柄,@RequestBody,@ResponseBody搀擂,@RequestParam西潘,@PathVariable,@RequestPart哨颂,@RequestHeader
- @ExceptionHandler
- @Autowired喷市,@Qualifier,@Value威恼,@Lazy品姓,@DependsOn
- @ConditionalOnProperty,@ConditionalOnClass箫措,@ConditionalOnMissingBean腹备,@ConditionalOnMissingClass,@ConditionalOnSingleCandidate斤蔓,@ConditionalOnNotWebApplication馏谨,@ConditionalOnResource,@Conditional
- @AutoConfigureBefore附迷,@AutoConfigureAfter惧互,@AutoConfigureOrder
- @EnableScheduling,@EnableAsync喇伯,@EnableWebSocket喊儡,@EnableCaching,@EnableWebSecurity
[spring]常用類
- RestTemplate稻据,JdbcTemplate艾猜,MongoTemplate买喧,RabbitTemplate
- ScriptUtils(可以解析執(zhí)行sql文件的工具類)
[spring]生命周期
TODO
配置加載前,配置加載后匆赃,bean初始化前窗市,bean初始化后帽借,bean攔截器
在任何一個(gè)階段注入代碼。
[spring]bean的多種初始化方式以及autoconfig
TODO
import注解
autoconfig
@Bean
@Configuration
不同方式的優(yōu)先級(jí),以及import方式注入bean的特殊用法祝谚。
[spring]條件配置Conditional
TODO
條件注解控制是否啟用bean
自定義條件類
[spring]自定義配置bean
TODO 自定義配置bean并且可以在application.yml配置文件里出現(xiàn)自動(dòng)提示
[spring]包掃描
TODO 利用spring內(nèi)置的包掃描類可以自己實(shí)現(xiàn)類的掃描邏輯什荣。
[spring]spring aware
TODO 可以獲取到一些bean蠕嫁,和直接注入差距不大朋沮。
[spring]banner
修改springboot啟動(dòng)時(shí)控制臺(tái)打印的橫幅logo。
[spring]其他需要掌握的技術(shù)
- aspectj切入點(diǎn)表達(dá)式
- OGNL表達(dá)式:通過(guò)配置一段字符串實(shí)現(xiàn)屬性讀取或方法調(diào)用囱淋,主要用在mybatis里
- SPEL表達(dá)式:Spring自己實(shí)現(xiàn)的一套表達(dá)式猪杭,和ognl類似。
maven需要掌握的技術(shù)
nexus私服搭建妥衣。pom文件結(jié)構(gòu)皂吮,多結(jié)構(gòu)包管理(子父pom層級(jí)),包版本號(hào)統(tǒng)一替換命令税手,dependencyManagement定義子項(xiàng)目可選包的包版本蜂筹,build配置項(xiàng)目結(jié)構(gòu),plugins插件配置冈止,自定義maven插件,常用插件(編譯插件候齿、跳過(guò)單元測(cè)試插件熙暴,springboot打包插件,打包可通過(guò)java -jar命令啟動(dòng)包的插件慌盯,將所有依賴包c(diǎn)lass文件打到一起的插件周霉,javadoc文檔生成插件,java源碼一起打包插件亚皂,推送項(xiàng)目發(fā)布maven中心倉(cāng)庫(kù)的插件)俱箱,maven多個(gè)中心倉(cāng)庫(kù)地址配置,多profile配置灭必。
mvn命令狞谱,跳過(guò)單元測(cè)試的命令,打包時(shí)自定義啟動(dòng)參數(shù)的命令禁漓,打包時(shí)指定profile的參數(shù)跟衅,統(tǒng)一修改版本號(hào)的命令,推送中心倉(cāng)庫(kù)的命令播歼,僅install安裝本地的命令伶跷。
jenkins需要掌握的技術(shù)或插件
- Pipeline語(yǔ)法
- Multijob project:父子項(xiàng)目插件(Multijob, Multiple SCMs plugin)
- jenkins存儲(chǔ)的密碼密文可以在jenkins中使用groovy代碼解密。
- Qy Wechat Notification:企業(yè)微信小機(jī)器人推送構(gòu)建消息插件
- ThinBackup:配置備份插件
- SonarQube Scanner:sonarqube代碼掃描集成插件
- Config File Provider:提供managed files功能,可以在jenkins中管理一些配置文件叭莫,構(gòu)建的時(shí)候追加進(jìn)去蹈集。
- Role-based Authorization Strategy:基于任務(wù)名字進(jìn)行權(quán)限控制的插件,支持角色功能雇初。
- 其他常用的docker拢肆、node、maven抵皱、git善榛、...插件略
- jenkins中變量使用${}替換。
nginx
其他nginx發(fā)行版本:openresty(集成了很多插件的nginx)
nginx部署前端頁(yè)面呻畸,nginx http反向代理移盆,nginx TCP反向代理,nginx websocket反向代理伤为,nginx限流咒循、防刷、屏蔽ip绞愚、自定義錯(cuò)誤頁(yè)面叙甸。nginx負(fù)載均衡,一個(gè)ip處理多個(gè)host(ip相同位衩,但是多個(gè)域名都指向同一個(gè)ip裆蒸,根據(jù)訪問(wèn)域名不同,走不同的server)糖驴,配置ssl(https)僚祷,追加/修改請(qǐng)求頭、響應(yīng)頭贮缕,發(fā)起子請(qǐng)求辙谜。nginx讀取環(huán)境變量,nginx內(nèi)置變量感昼,反向代理location多種配置方法(正則装哆、前綴匹配、精準(zhǔn)匹配等)定嗓,配置gzip壓縮蜕琴,取消gzip壓縮,反向代理https網(wǎng)站(包括單向認(rèn)證https和雙向認(rèn)證https)宵溅,nginx不停機(jī)熱更新
各種nginx插件:
- lua插件:嵌入lua腳本修改請(qǐng)求信息奸绷。
- sub_filter:替換返回值的內(nèi)容
web開(kāi)發(fā)解決方案
【全棧開(kāi)發(fā)體系】
后端:jdk17+springboot3+mybatis-plus+flyway+jackson+hutool+springjdbc+springsecurity+feign+ribbon+...
前端:typescript+vue3+element-plus2+vite+vitepress+axios+vue-router+vuex+sass/scss+unocss
【不想關(guān)注在哪個(gè)服務(wù)器上部署,以及服務(wù)器缺少什么環(huán)境】
使用docker部署层玲。
【不想關(guān)注硬件大小号醉,資源限制反症,只關(guān)注有一堆機(jī)器自動(dòng)調(diào)配】
k8s
【不希望現(xiàn)場(chǎng)自己執(zhí)行sql,sql自動(dòng)管理】
flyway
【需要分布式鎖】
redis+redission
【需要集中管理配置】
使用配置中心
需要自己能寫出來(lái)的數(shù)據(jù)結(jié)構(gòu)/算法
- 數(shù)據(jù)結(jié)構(gòu):鏈表畔派,堆棧铅碍,隊(duì)列,二叉樹(shù)线椰,四叉樹(shù)胞谈。
- 排序算法:冒泡排序、快速排序等多種排序算法憨愉。
- 數(shù)組操作:數(shù)組置換烦绳、二維數(shù)組旋轉(zhuǎn)。
- 最小生成樹(shù)算法:prim
需要了解或者會(huì)寫的一些算法
- 動(dòng)態(tài)規(guī)劃算法(DP)
- 貪心算法
- 廣度優(yōu)先算法(BFS)
- 深度優(yōu)先算法(DFS)
- 模擬退火算法(通常用于AI配紫,尋找近似最優(yōu)解)
- 遺傳算法(通常用于AI径密,逐漸完善最優(yōu)解)
設(shè)計(jì)模式
開(kāi)閉原則,MVC躺孝,MVVM享扔,單例/多例,工廠設(shè)計(jì)模式植袍,代理設(shè)計(jì)模式惧眠,動(dòng)態(tài)代理設(shè)計(jì)模式,單一職責(zé)原則于个,單一出口原則氛魁。
其他設(shè)計(jì)模式都不需要特別去記,本質(zhì)都是為了實(shí)現(xiàn)開(kāi)閉原則厅篓,寫多了自然就會(huì)了:
生成器模式(Builder)秀存,原型模式(Clone/Copy),組合模式(無(wú)繼承)贷笛,適配器模式应又,觀察者模式(+攔截器模式)宙项,責(zé)任鏈模式乏苦,狀態(tài)模式,命令模式尤筐,...
html基礎(chǔ)
dom基本結(jié)構(gòu)汇荐、dom屬性、html注釋盆繁、"<!doctype html>"HTML5標(biāo)記掀淘,<meta charset="utf-8">編碼設(shè)置,title標(biāo)題設(shè)置油昂。
input表單(文本框革娄、密碼框倾贰、單選/復(fù)選框、下拉選擇框拦惋、文件選擇框匆浙、...)、視頻/音頻/圖片播放組件(以及異常替換方法)厕妖。各種語(yǔ)義標(biāo)簽首尼,meta頭標(biāo)簽,iframe子頁(yè)面言秸,table表格软能,ul/ol列表,button按鈕举畸,canvas查排,shadow DOM(類似虛擬dom,html5原生支持的一種技術(shù))俱恶,noscript標(biāo)簽雹嗦,js中對(duì)dom的增刪改查各種操作。
基本的修改樣式的元素(font/color/strong/s/i/...)合是,這些再頁(yè)面項(xiàng)目中不推薦使用了罪,因?yàn)闃邮叫枰褂胏ss統(tǒng)一設(shè)置。不過(guò)再很多doc文檔注釋中聪全,可以使用這些泊藕。
以及需要了解xml中常用的一個(gè)標(biāo)記:<![CDATA[ ]]>。里面中括號(hào)中的內(nèi)容不會(huì)被解析器解析难礼,整體會(huì)作為純文本使用娃圆。
css基礎(chǔ)
scss:css的超集。還有sass蛾茉。css編寫更簡(jiǎn)單讼呢,可以用嵌套、變量等語(yǔ)法谦炬。
margin/padding/border/outline邊界樣式悦屏,box-shadow陰影樣式,color顏色樣式键思,background-背景樣式础爬,font字體樣式,animation動(dòng)畫樣式吼鳞,position/display結(jié)構(gòu)樣式看蚜,cursor鼠標(biāo)樣式,flex結(jié)構(gòu)樣式赔桌,height/width寬高樣式供炎,同理還有min-/max-最大最小寬高渴逻,@import導(dǎo)入不同css文件,"--"css變量音诫,align對(duì)齊樣式裸卫,字體過(guò)長(zhǎng)顯示樣式,line-height行高樣式纽竣,overflow*超出隱藏/滾動(dòng)條樣式墓贿,opacity透明度樣式,user-select選擇控制樣式蜓氨,visibility顯示隱藏樣式聋袋,z-index層疊順序樣式,pointer-events(可以忽略鼠標(biāo)事件)穴吹,
css選擇器幽勒,class選擇器、id選擇器港令、屬性選擇器啥容、多選選擇器、全選選擇器顷霹、選擇器偽類(:active咪惠、::after、::before淋淀、:checked遥昧、...),兄弟選擇器朵纷。
css函數(shù)炭臭,calc動(dòng)態(tài)計(jì)算值函數(shù),hsl顏色設(shè)置函數(shù)袍辞,var變量函數(shù)鞋仍,...。
瀏覽器安全字體搅吁,瀏覽器安全顏色威创。
字體單位:px、em似芝、rem那婉、%板甘、vw党瓮、vh
js基礎(chǔ)(JavaScript)
ECMAScript各個(gè)版本標(biāo)準(zhǔn)區(qū)別(核心是ES5和ES6),所有關(guān)鍵字用法盐类,單線程原理寞奸,setTimeout/setInterval協(xié)程呛谜,requestAnimationFrame(js動(dòng)畫/2d動(dòng)畫專用定時(shí)任務(wù)方法),閉包枪萄,根對(duì)象windows/global(node.js中是global)隐岛,XMLHttpRequest/fetch發(fā)http請(qǐng)求,Promise異步編程瓷翻,原型鏈(__proto__)聚凹,數(shù)據(jù)類型,Number最大安全數(shù)值齐帚,apply妒牙、call、bind改變this对妄,class相關(guān)語(yǔ)法糖(#私有屬性/方法湘今,constructor構(gòu)造方法,static屬性方法)剪菱,function方法摩瞎,new對(duì)象,var/let/const變量定義孝常,JSON類旗们,web work并發(fā),LocalStorage/SessionStorage存儲(chǔ)构灸,Cookie操作蚪拦,webDB,js反射冻押,js變量?jī)鼋Y(jié)驰贷,defineProperties/defineProperty屬性定義,Proxy對(duì)象代理洛巢,異常捕捉和自定義異常括袒,函數(shù)式編程,數(shù)組/Set/Map集合框架稿茉,時(shí)間日期對(duì)象Date锹锰,正則,BigInt漓库,import/export恃慧,await async語(yǔ)法糖,use strict嚴(yán)格模式渺蒿,==和===的區(qū)別以及==判斷原理(valueOf方法)痢士,方法對(duì)象toString,
Dom創(chuàng)建茂装、搜索怠蹂、銷毀善延、刪除、復(fù)制方法城侧。html5原生虛擬dom易遣。
各種瀏覽器事件:加載/關(guān)閉事件,鼠標(biāo)點(diǎn)擊移動(dòng)事件嫌佑,瀏覽器滾動(dòng)事件豆茫,拖拽事件,輸入/復(fù)制/粘貼事件屋摇,頁(yè)簽激活事件澜薄,動(dòng)畫執(zhí)行事件,...
onxxx設(shè)置事件和addEventListener設(shè)置事件的區(qū)別摊册,事件捕獲和冒泡肤京,阻止冒泡,
// 安全的使用requestAnimationFrame
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function( callback ){
window.setTimeout(callback, 1000 / 60);
};
})();
ts基礎(chǔ)(TypeScript)
class類茅特、interface接口忘分、enum枚舉、泛型(多條件限制泛型)白修,類/接口繼承妒峦,namespace命名空間,
js配套技術(shù)
- vs code:前端項(xiàng)目開(kāi)發(fā)工具兵睛。(此外還有HBuilder肯骇,HBuilderX)
- node.js:可以運(yùn)行js腳本的獨(dú)立引擎。(它讓一個(gè)腳本語(yǔ)言變成了一個(gè)獨(dú)立的編程語(yǔ)言)
- jsdoc:js中類似javadoc的可以生成代碼文檔的工具
- nw.js:node+瀏覽器結(jié)合祖很,非常好用的基于js語(yǔ)言的桌面應(yīng)用開(kāi)發(fā)工具
- nwjc:nw.js中的一個(gè)工具笛丙,可以將js源代碼編譯成二進(jìn)制原生代碼,保護(hù)源代碼假颇。
- electron:和nw.js功能基本一樣胚鸯,也是開(kāi)發(fā)桌面應(yīng)用的,了解不多笨鸡,但是感覺(jué)nw.js更容易上手jian'd
需要掌握/了解的前端框架
- 前端核心js框架:vue(3+)姜钳、react
- 前端核心體系框架:element-ui(element-plus)、bootstrap形耗、ace admin哥桥、uni-app(這個(gè)主要是開(kāi)發(fā)手機(jī)app的)
- 前端項(xiàng)目管理/打包構(gòu)建框架:vite、webpack
- 前端包管理框架:npm激涤、yarn拟糕、pnpm
- js框架:jquery、axios、vue已卸、vuex、vue-router硼一、vue-uuid累澡、vue-i18n、codemirror般贼、lodash(非常好用的前端工具庫(kù))愧哟、json5(讓js支持json5標(biāo)準(zhǔn))、echarts(各種圖表框架)哼蛆、pixi(強(qiáng)大的canvas渲染引擎蕊梧,也可以用于做游戲)
- jsDev框架:babel(將高版本的ES代碼轉(zhuǎn)換為低版本的ES代碼)、terser(js代碼壓縮工具)腮介、esbuild(新一代js代碼壓縮降低版本語(yǔ)法工具肥矢,可以徹底代替terser和babel)、obfuscator(js代碼混淆工具)
- css框架:uno-css
- 基于瀏覽器+node技術(shù)開(kāi)發(fā)桌面應(yīng)用的工具:nw.js
- 一些舊的技術(shù):layer叠洗、layui
node中可以使用的一些特殊插件(也可以用于vite等工具構(gòu)建js項(xiàng)目)
- rollup-plugin-terser(可以用esbuild代替這個(gè)):js壓縮插件
- rollup-plugin-obfuscator:js混淆插件甘改,js代碼注入自我保護(hù)/自我防護(hù)邏輯。
- rollup/plugin-replace:js字符串替換插件(替換特定參數(shù)或敏感信息)
- rollup-plugin-strip:移出代碼中的調(diào)試語(yǔ)句灭抑,如console.log等十艾。
其他技術(shù):
- jwt(代替token的另外一種認(rèn)知方式)
- SSR 服務(wù)端渲染技術(shù),借助node.js服務(wù)端渲染好html直接返回(對(duì)SEO友好腾节,客戶端電腦性能影響也不大忘嫉,不存在剛進(jìn)入白屏的問(wèn)題)
- SEO優(yōu)化(讓搜索引擎可以搜索到)
需要掌握/了解的瀏覽器技術(shù)
- 瀏覽器:chrome、firefox案腺、IE庆冕。(其他瀏覽器基本都是基于chrome,如edge)
- 查看網(wǎng)頁(yè)源代碼:Ctrl+U
- 瀏覽器最大請(qǐng)求數(shù)量限制劈榨。瀏覽器頁(yè)面進(jìn)程查看愧杯。
- 瀏覽器最小字體限制。
- 幾種刷新模式的區(qū)別:F5鞋既、Ctrl+R力九、Ctrl+F5、鼠標(biāo)點(diǎn)左上角刷新
- chrome擴(kuò)展開(kāi)發(fā)邑闺。(任意頁(yè)面注入任意css/js跌前,跨域請(qǐng)求)
- windows下通過(guò)注冊(cè)注冊(cè)表實(shí)現(xiàn)自定義瀏覽器協(xié)議擴(kuò)展功能。
- f12工具使用
- console查看報(bào)錯(cuò)和執(zhí)行命令陡舅。
- network分析請(qǐng)求接口:參數(shù)抵乓、返回值,頭信息,耗時(shí)灾炭,狀態(tài)茎芋,重發(fā)/復(fù)制請(qǐng)求信息等。
- 瀏覽器ui性能分析
- 瀏覽器內(nèi)存使用狀況查看
- element節(jié)點(diǎn)查看蜈出、修改田弥、調(diào)試
- js代碼加斷電,js變量debug修改铡原。
- 屏蔽debug斷點(diǎn)偷厦、破解部分頁(yè)面功能限制。(如不讓復(fù)制燕刻,強(qiáng)制彈窗等)只泼。
- 瀏覽器緩存
- 瀏覽器跨域限制,iframe跨域限制卵洗,localStorage跨域限制请唱,http請(qǐng)求跨域限制,預(yù)檢請(qǐng)求过蹂。
- https域下不允許發(fā)出http請(qǐng)求籍滴。
- 公網(wǎng)ip域下不允許發(fā)起私網(wǎng)ip的請(qǐng)求。(至于哪一段是公網(wǎng)ip榴啸,哪一段是私網(wǎng)ip孽惰,這個(gè)是業(yè)內(nèi)約定俗成的,也是瀏覽器內(nèi)置好的鸥印,比如192.168.xxx就是私網(wǎng)ip段)
- CDN(加快靜態(tài)資源獲妊Α)
- 瀏覽器網(wǎng)絡(luò)代理
- web auth:瀏覽器自帶的一種登錄方式,其他很多url也有類似的方式库说,比如:
http://user:pass@192.168.1.1:80/xxx
ftp://user:pass@host:port/xxx
tcp://user:pass@xxxxxx
- ...
需要明白的常見(jiàn)http狀態(tài)碼
- 101:協(xié)議轉(zhuǎn)換/正在請(qǐng)求中狂鞋。通常是websocket請(qǐng)求會(huì)見(jiàn)到。
- 200:成功
- 201:成功潜的。通常表示提交成功骚揍。
- 204:服務(wù)器數(shù)據(jù)無(wú)變化,瀏覽器可以繼續(xù)使用舊的數(shù)據(jù)啰挪。
- 301:永久get重定向
- 302:臨時(shí)get重定向
- 303:和302類似信不,可能是歷史遺留,只有語(yǔ)義上的區(qū)別亡呵,303更偏向于重定向到你要請(qǐng)求的資源的描述頁(yè)面抽活。
- 304:資源自上次請(qǐng)求沒(méi)有變化,可以直接用瀏覽器緩存的锰什。
- 307:臨時(shí)重定向下硕,保留原來(lái)的請(qǐng)求參數(shù)和請(qǐng)求方法丁逝。所以支持post重定向。
- 308:永久重定向梭姓,保留原來(lái)的請(qǐng)求參數(shù)和請(qǐng)求方法霜幼。所以支持post重定向。
- 400:通常表示參數(shù)錯(cuò)誤誉尖,請(qǐng)求無(wú)法被處理罪既。
- 401:沒(méi)有指定用戶名密碼/需要登陸。
- 403:沒(méi)有權(quán)限释牺。
- 404:資源url不存在萝衩。
- 405:請(qǐng)求方法不正確
- 406:請(qǐng)求期望的accept和服務(wù)器返回的content-type不符回挽。
- 407:代理服務(wù)器沒(méi)有登錄驗(yàn)證
- 408:請(qǐng)求超時(shí)
- 413:請(qǐng)求體太大没咙。
- 414:請(qǐng)求url太長(zhǎng)。
- 500:服務(wù)器遇到未知異常千劈。
- 502:代理服務(wù)器正常祭刚,但是服務(wù)器掛了或者無(wú)法訪問(wèn)到。
- 504:代理服務(wù)器正常墙牌,但是請(qǐng)求服務(wù)器超時(shí)涡驮。
需要明白的常用請(qǐng)求/響應(yīng)頭信息
content-type、content-encoding喜滨、content-length捉捅、accept、accept-language虽风、accept-encoding棒口、cookie、set-cookie辜膝、referer无牵、user-agent、Authorization厂抖、cache-control茎毁、etag、last-modified忱辅、date七蜘、server、transfer-encoding墙懂、connection崔梗、host、Referrer-Policy垒在、upgrade:websocket蒜魄、
origin扔亥、access-control-allow-origin、Access-Control-Request-Method谈为、Access-Control-Request-Headers旅挤、access-control-allow-credentials、
x-csrf-token
需要掌握的web安全問(wèn)題
【安全漏洞】
- XXE
- XSS(前端別用不安全的動(dòng)態(tài)參數(shù)生成html伞鲫,富文本是比較容易出問(wèn)題的地方粘茄,建議直接用markdown)
- CSRF(csrf token解決方案)
- SSRF(這個(gè)現(xiàn)在基本沒(méi)有了,文件服務(wù)的文件沒(méi)有人會(huì)去寫執(zhí)行的邏輯秕脓,而且也不會(huì)放在項(xiàng)目部署目錄下了)
- SQL注入(預(yù)編譯處理)柒瓣,對(duì)于模糊搜索注入可以堆'%'和'_'等字符做轉(zhuǎn)義。
- 點(diǎn)擊劫持
- css注入(重要請(qǐng)求別用get方法)
- ddos/tcp半連接(防火墻層面做配置)
- 防代理(代理檢測(cè)吠架,安全https芙贫,雙向認(rèn)證https)
【網(wǎng)絡(luò)安全】
- 屏蔽不需要開(kāi)放的端口
- 接口返回值去掉服務(wù)器版本號(hào),或者給一個(gè)錯(cuò)誤的版本號(hào)傍药。
- 修改所有默認(rèn)錯(cuò)誤頁(yè)面和錯(cuò)誤返回值磺平。
- 防火墻配置禁止ICMP協(xié)議。
SSO
SSO(SingleSignOn)是一種單點(diǎn)登錄認(rèn)證中心技術(shù)的簡(jiǎn)稱拐辽。主要目的是為了解決多個(gè)項(xiàng)目統(tǒng)一登陸認(rèn)證的問(wèn)題拣挪。
這里面還涉及到一個(gè)概念是CAS,這里容易搞混俱诸。因?yàn)樽孕i也叫CAS菠劝。不過(guò)這里的CAS是指(Central Authentication Service)中央認(rèn)證服務(wù)器。
CAS有很多現(xiàn)成的框架睁搭。其本質(zhì)的原理是:
- 訪問(wèn)任何一個(gè)服務(wù)器前需要判斷是否存在用戶token赶诊,如果沒(méi)有則跳轉(zhuǎn)到認(rèn)證中心服務(wù)器頁(yè)面進(jìn)行登錄。
- CAS服務(wù)器負(fù)責(zé)管理用戶信息和授權(quán)信息介袜,并提供登陸頁(yè)面進(jìn)行登錄甫何。
- 服務(wù)器跳轉(zhuǎn)到CAS頁(yè)面的時(shí)候,需要攜帶一個(gè)redirectUrl遇伞,表示登陸成功后跳回哪里辙喂。
- CAS登錄完成后,CAS會(huì)返回給客戶一個(gè)cookie(或者屬于CAS自己的token鸠珠,為了和后面的token區(qū)分開(kāi)巍耗,這里就說(shuō)cookie把),這樣之后再訪問(wèn)CAS頁(yè)面渐排,因?yàn)閏ookie存在炬太,說(shuō)明已經(jīng)登陸過(guò)就不用再登陸了。
- 之后CAS服務(wù)器內(nèi)部會(huì)生成一個(gè)生命周期非常短(可能就幾秒或者幾分鐘)驯耻,并且只能讀取一次(第二次讀取就是失效了)的token亲族。同時(shí)CAS服務(wù)器需要重定向到原服務(wù)器炒考。
- 這里重定向是一個(gè)安全難點(diǎn),重定向有post和get兩種方式霎迫,因?yàn)橹囟ㄏ蜻^(guò)去的時(shí)候需要帶上token斋枢。
- post需要返回一個(gè)頁(yè)面,頁(yè)面存在一個(gè)form表單知给,token就是表單參數(shù)瓤帚,返回后js觸發(fā)自動(dòng)提交然后進(jìn)行post重定向,重定向到原始頁(yè)面涩赢,提交這個(gè)表單信息戈次。
- get則是直接302重定向,但是這會(huì)導(dǎo)致token必須出現(xiàn)在url上筒扒。所以最好使用https怯邪。(由于token是一次性的臨時(shí)token,所以被人看到影響不大霎肯,但是被程序截取可能會(huì)提前一步登錄導(dǎo)致安全危險(xiǎn))
- 原服務(wù)器拿到token后搞乏,在服務(wù)器后臺(tái)發(fā)起一個(gè)請(qǐng)求直接請(qǐng)求CAS服務(wù)器驗(yàn)證token的有效性羞反,同時(shí)拿到用戶的信息和授權(quán)信息。(這個(gè)過(guò)程是不經(jīng)過(guò)客戶端的)
- 之后token就失效了卵贱,也可以理解為CAS服務(wù)器就和原服務(wù)器沒(méi)有關(guān)系了驮俗,CAS掛了都不影響懂缕。此時(shí)原服務(wù)器拿到用戶信息后,需要自己緩存redis等緩存數(shù)據(jù)庫(kù)王凑,同時(shí)自己生成一個(gè)新的cookie/token返回給前端搪柑,之后就可以正常使用了。
- 之后如果再有其他服務(wù)器要登陸索烹,跳轉(zhuǎn)到CAS登錄頁(yè)面后工碾,因?yàn)橐呀?jīng)登陸過(guò)了,所以直接從第五步繼續(xù)自動(dòng)執(zhí)行百姓,就成功登錄了渊额。
- 至于用戶中心如何可以知道一個(gè)用戶能夠擁有哪些權(quán)限,這就需要服務(wù)器對(duì)接CAS中心垒拢,將自己的權(quán)限列表同步給CAS服務(wù)器旬迹。管理人員就可以在CAS管理界面中進(jìn)行用戶權(quán)限配置了。
不過(guò)CAS技術(shù)還有一些變體求类,因?yàn)樯婕暗揭恍﹩?wèn)題奔垦,如:
- 只能統(tǒng)一登陸,不能統(tǒng)一登出尸疆。
- 即使登陸過(guò)了椿猎,訪問(wèn)其他系統(tǒng)時(shí)依然要跳轉(zhuǎn)CAS頁(yè)面惶岭,不方便。
變體一(cookie+域名版):
- 使用域名技術(shù)簡(jiǎn)化統(tǒng)一登陸:認(rèn)證中心服務(wù)器的域名是頂級(jí)域名犯眠,如abc.com俗他。其他所有子服務(wù)器都是子域名,如a.abc.com阔逼、b.abc.com兆衅。
- 認(rèn)知token使用cookie技術(shù),而不要用jwt嗜浮。cookie的一個(gè)特點(diǎn)是羡亩,在訪問(wèn)子域名服務(wù)器的時(shí)候,父域名上的cookie也會(huì)一起帶上危融。所以只要所有服務(wù)器在后臺(tái)使用統(tǒng)一的redis或者其他用戶緩存數(shù)據(jù)庫(kù)畏铆,那么只要父域名一登陸,子域名自動(dòng)就有cookie了吉殃。(不用域名用ip的話不同服務(wù)器之間cookie是不能共享的)
需要掌握的其他相關(guān)編程技術(shù)
布隆過(guò)濾器
TODO(可以過(guò)濾掉大量無(wú)意義的請(qǐng)求避免)
linux基礎(chǔ)/運(yùn)維相關(guān)技術(shù)
arm32辞居、arm64操作系統(tǒng)和x86、x86_64操作系統(tǒng)
ETL(數(shù)據(jù)庫(kù)數(shù)據(jù)抽取轉(zhuǎn)換工具)蛋勺、shell腳本瓦灶、linux ip配置、dns技術(shù)抱完、防火墻配置(uwf)贼陶、電腦路由表配置(route)、服務(wù)器時(shí)間同步巧娱、文件系統(tǒng)(ext3碉怔、ext4、FAT禁添、NTFS撮胧、...)、linux定時(shí)任務(wù)(crontab)老翘、查看linux版本芹啥、查看cpu核數(shù)/使用情況、查看內(nèi)存使用情況酪捡、查看io使用情況(iotop)叁征。rpm包安裝,deb包安裝逛薇。yum捺疼、apt/apt-get包安裝工具。
常用linux命令/shell語(yǔ)句:
apt永罚、apt-get啤呼、alias卧秘、awk
bash
cd、cp官扣、cat翅敌、clear、curl惕蹄、chattr蚯涮、chown、chmod卖陵、chgrp遭顶、cron、crontab
docker泪蔫、docker-compose棒旗、date、dpkg撩荣、du铣揉、df
echo
free、find餐曹、ftp逛拱、file、fdisk(硬盤格式化命令)
gpasswd凸主、grep橘券、git
history额湘、head卿吐、help、hostname
ifconfig锋华、ifup嗡官、ifdown
jobs
kill、killall
ls毯焕、ln衍腥、less、ll纳猫、lsattr婆咸、lsof、lsblk
mv芜辕、more尚骄、make、mkdir侵续、md5sum倔丈、man憨闰、mount/umount
netstat、ntpd需五、nvidia-smi
ping鹉动、passwd、ps宏邮、pwd
route泽示、reboot、rm蜜氨、rpm
sudo边琉、su、sh记劝、ssh变姨、source、shutdown厌丑、systemctl(centos下是service)定欧、scp、sed
tar怒竿、top砍鸠、tail、touch耕驰、telnet爷辱、tty、traceroute朦肘、tracepath
uname饭弓、users、useradd媒抠、userdel弟断、ufw
vi、vim
wget趴生、watch阀趴、who、whoami苍匆、wc
yum
zip/unzip
- 管道:xxx | xxx刘急。例如 cat x | grep xx
- 重定向:
- xxx > a:標(biāo)準(zhǔn)輸出重定向
- xxx 2> a:標(biāo)準(zhǔn)錯(cuò)誤輸出重定向
- xxx > a 2>1:讓標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到標(biāo)準(zhǔn)輸出
- xxx > /dev/null:/dev/null是一個(gè)固定路徑文件,表示將輸出重定向到虛無(wú)浸踩,就是丟棄的意思叔汁。
- xxx < xxx:標(biāo)準(zhǔn)輸入重定向,將一個(gè)文件輸入到左側(cè)命令作為輸入
- xxx <<< "xx":將右側(cè)的字符串作為左側(cè)的輸入?yún)?shù)輸入
- xxx >> a:雙箭頭表示在原來(lái)的內(nèi)容基礎(chǔ)上累加,單箭頭表示完全覆蓋原有內(nèi)容攻柠。
- `xxx`:執(zhí)行一段命令球订。例如xxx <<<
cat a
等同于 xxx < a - echo $xxx:輸出一個(gè)環(huán)境變量,環(huán)境變量key前面要帶上“$”
- echo $?:輸出上一個(gè)命令的返回狀態(tài)碼瑰钮,0是成功冒滩,其他都是失敗。
需要了解的windows cmd命令/bat語(yǔ)句
cd浪谴、call开睡、cls、copy
dir苟耻、date篇恒、del
echo、exit
goto
help
mkdir凶杖、move
path胁艰、pwd
rd、rename
set智蝠、shutdown腾么、start
tracert、tree杈湾、type
管道解虱、重定向邏輯和linux shell基本一致。
- 但是如果要重定向到虛無(wú)漆撞,需要使用關(guān)鍵字NUL殴泰。如echo a > NUL 2>&1
- echo %xxx%:輸出一個(gè)環(huán)境變量,環(huán)境變量key前后都要帶上“%”
需要詳細(xì)了解的協(xié)議/格式
- 網(wǎng)絡(luò)協(xié)議:http(s)1.1浮驳、http(s)2.0悍汛、http(s)3.0、websocket(ws)抹恳,wss(websocket加密協(xié)議)员凝,ftp,sftp奋献,TCP,UDP旺上,ICMP瓶蚂。
- 視頻格式:flv、mp4宣吱、h264窃这、h265
- 圖片格式:png、jpg征候、gif杭攻、ico祟敛、svg
- 其他數(shù)據(jù)傳輸協(xié)議:protobuf(google搞得高性能傳輸協(xié)議,基于提前代碼生成的技術(shù)實(shí)現(xiàn)兆解,支持多種語(yǔ)言馆铁,需要編寫proto協(xié)議文件,使用起來(lái)比較復(fù)雜)
【https協(xié)議部分原理】
首先RSA加解密速度很慢锅睛,所以https都是先用RSA來(lái)協(xié)商一個(gè)密鑰埠巨,然后再使用這個(gè)密鑰+對(duì)稱加密算法來(lái)做后續(xù)傳輸加解密。
網(wǎng)站自己首先有一個(gè)私鑰信息现拒,公鑰信息存儲(chǔ)在證書里辣垒,證書有時(shí)間限制避免時(shí)間太久被暴力破解,同時(shí)為了避免私法不安全證書印蔬,或者代理服務(wù)器偽造證書勋桶,必須聯(lián)網(wǎng)認(rèn)證,只有固定的幾個(gè)CA機(jī)構(gòu)頒發(fā)的整數(shù)侥猬,才是合理的哥遮。操作系統(tǒng)內(nèi)置了一些根證書來(lái)驗(yàn)證合法性。
公鑰證書是公開(kāi)的陵究,會(huì)發(fā)給所有訪問(wèn)者眠饮,訪問(wèn)者需要使用公鑰加密,然后服務(wù)器拿到后用私鑰解密铜邮。首先協(xié)商一個(gè)密鑰仪召,這個(gè)密鑰用RSA加密傳輸,兩邊都拿到后松蒜,后續(xù)再協(xié)商一個(gè)都支持的最好的堆成加密算法扔茅,然后用這個(gè)密鑰進(jìn)行后續(xù)內(nèi)容加解密。
對(duì)于雙向認(rèn)知https來(lái)說(shuō)秸苗,公鑰私鑰都不會(huì)傳輸召娜,只有兩邊各自才知道。一般客戶端是以類似U盤的外設(shè)需要插入電腦才可以訪問(wèn)特定網(wǎng)頁(yè)惊楼。此時(shí)客戶端發(fā)消息使用客戶端的公鑰加密玖瘸,服務(wù)的的私鑰解密。服務(wù)端返回消息用服務(wù)端公鑰加密檀咙,客戶端私鑰解密雅倒。
需要知道的加密/hash算法
- 對(duì)稱加密算法:AES、DES
- 加密模式:ECB弧可,CBC蔑匣,PCBC,CTS,CTR裁良,OFB凿将,CFB
- 填充模式:PKCS5Padding,ZerosPadding价脾,NoPadding牧抵,ISO10126Padding
- 密鑰長(zhǎng)度:DES(56位)、AES(128位彼棍、192位灭忠、256位)
- 非對(duì)稱加密算法:RSA
- hash散列算法:hash、cityhash座硕、md5弛作、sha1、sha256
需要知道的壓縮算法
- zip
- rar4/5
- zlib
- gzip
- deflate
- LZ4(好像是速度最快的)
- zstd
- 7z
- tar(這個(gè)只是合并打包华匾,不含壓縮)
- iso
需要了解的操作系統(tǒng)
- Windows映琳、Windows Server
- Linux:CentOS、RedHat蜘拉、Ubuntu萨西、Alpine(超輕量級(jí)linux框架,不到10mb旭旭,一般使用做docker鏡像制作)
還有shell腳本 - Windows:bat腳本
- Linux:sh/bat腳本
linux連接工具:xshell谎脯、putty
文件傳輸工具:scp、winscp持寄、xftp
需要掌握的虛擬機(jī)工具
Oracle VM VirtualBox:免費(fèi)開(kāi)源的虛擬機(jī)軟件源梭。
VMware:收費(fèi)的虛擬機(jī)軟件
其他需要了解的技術(shù)
VMwareTools:可以讓vmware虛擬機(jī)和宿主機(jī)交互更方便,比如可以直接拖拽文件進(jìn)來(lái)或出去稍味。
其他可以了解的沙盒軟件
sandbox废麻、360隔離沙箱、影子系統(tǒng)模庐、冰點(diǎn)還原精靈
需要了解/掌握的國(guó)產(chǎn)化技術(shù)
- 數(shù)據(jù)庫(kù):達(dá)夢(mèng)數(shù)據(jù)庫(kù)dm烛愧,人大金倉(cāng)數(shù)據(jù)庫(kù)。
需要了解到交換機(jī)/路由器/路由技術(shù)
- 路由表(路由器有掂碱,每個(gè)電腦自己也有怜姿。設(shè)置路由表可以讓電腦知道在請(qǐng)求哪個(gè)ip的時(shí)候走哪個(gè)網(wǎng)卡)
- 路由器、三層交換機(jī)
- 交換機(jī)廣播顶吮、交換機(jī)vlan
- 局域網(wǎng)安全問(wèn)題
需要掌握的配置文件格式
properties社牲,yml,json悴了,xml
需要知道的文檔語(yǔ)法
markdown(markdown編輯工具一般前端開(kāi)發(fā)工具都支持,也可以用獨(dú)立的typora或marktext(推薦這個(gè)))
需要掌握的其他軟件、技術(shù)湃交、工具
- 高級(jí)記事本(文本編輯器):editplus熟空、notepad++
- http請(qǐng)求工具:postman、(瀏覽器里的XMHttpRequest和fetch)
- 接口測(cè)試/壓測(cè)工具:jmeter
- 產(chǎn)品原型設(shè)計(jì)工具:Axure
- 視頻播放器(比f(wàn)fmpeg容錯(cuò)性更好):vlc搞莺,格式工廠播放器
- 遠(yuǎn)程電腦連接工具:todesk息罗、向日葵、teamviewer
- 郵件收發(fā)工具:foxmail
- 企業(yè)微信群可以創(chuàng)建機(jī)器人才沧,機(jī)器人關(guān)聯(lián)一個(gè)url迈喉,給這個(gè)url發(fā)請(qǐng)求可以在微信群里用機(jī)器人發(fā)消息。(如jenkins有個(gè)插件可以配合企業(yè)微信機(jī)器人可以發(fā)部署信息)
- 接口文檔工具:yapi温圆、showdoc
- 項(xiàng)目挨摸、bug管理工具:禪道
- 企業(yè)文檔/項(xiàng)目跟蹤管理工具:confluence、jira
- 企業(yè)私有代碼倉(cāng)庫(kù)管理:gitlab
- 內(nèi)網(wǎng)聊天工具:飛秋
- windows下的抓包工具:Fiddler(http岁歉,可以模擬中間人攻擊抓包https)得运,wireshark(抓更底層的網(wǎng)絡(luò)協(xié)議包)
- 進(jìn)程監(jiān)控器:Procmon64
- cpu負(fù)載、溫度查看工具:Core Temp
需要明白的其他概念
- 小端序和大端序的區(qū)別锅移。例如int轉(zhuǎn)byte熔掺,數(shù)字int32的16,小端序是[16,0,0,0]非剃,大端序是[0,0,0,16]
- 編碼:GBK置逻、GB2312、ISO8859-1备绽、UTF8券坞、UTF16、UTF32疯坤、UTF8+bom报慕、UnicodeBig (BE/LE)
- vpn
- 正向代理、反向代理區(qū)別压怠。
- groovy眠冈、kotlin是java語(yǔ)言的變種,編譯的文件也可以在jvm上運(yùn)行菌瘫。
- 協(xié)程蜗顽、線程、進(jìn)程的區(qū)別雨让。
- pdf文本域雇盖,可以用來(lái)作為pdf模板參數(shù)使用。(sejda是一個(gè)免費(fèi)在線可以編輯pdf的網(wǎng)站)
- AoS(數(shù)組結(jié)構(gòu)體)栖忠、SoA(結(jié)構(gòu)體數(shù)組)
已經(jīng)遺忘了的技術(shù)
tag:這些要么是已經(jīng)廢棄的技術(shù)崔挖,要么是好久不用已經(jīng)忘了
- JSP贸街、EL/JSTL
- jsonp(前后端分離了,這個(gè)不需要了)
- jfinal狸相、DWR(我覺(jué)得現(xiàn)在應(yīng)該沒(méi)人用這個(gè)了吧)
- hibernate(現(xiàn)在是直接用jpa了薛匪,思路是類似的)
- struct
- layerui(作者自己也放棄了)
- IE8(已經(jīng)不需要再兼容了,這個(gè)曾經(jīng)被客戶廣泛使用的早就過(guò)期的瀏覽器)
- dubbo(feign可讀性更好脓鹃,也更容易做日志)
- java遠(yuǎn)程方法調(diào)用開(kāi)發(fā)體系發(fā)展過(guò)程:CORBA逸尖、JAVA RMI、EJB瘸右、WebService(有些地方還在用)娇跟、AXIS->XFire->CXF、SOA太颤、Dubbo苞俘、Feign。
- DB2(主要是沒(méi)機(jī)會(huì)用到)
其他一些奇怪的編程界知識(shí)
- redis端口號(hào)是6379是因?yàn)?379在手機(jī)按鍵上對(duì)應(yīng)MERZ栋齿,MERZ是意大利歌女Alessia Merz的名字苗胀,作者不喜歡他所以用了6379。
- oracle創(chuàng)始人之一scott家里養(yǎng)了一只貓瓦堵,貓的名字叫tiger基协。所以oracle數(shù)據(jù)庫(kù)scott賬戶默認(rèn)密碼是tiger。
- Java5版本名字是tiger版菇用,因?yàn)樵O(shè)計(jì)師詹姆斯高斯林家里養(yǎng)了一只真的大老虎澜驮。
- Java創(chuàng)始人是詹姆斯高斯林。
- java火了之后微軟設(shè)計(jì)了一套J++語(yǔ)言惋鸥,但是被sun公司高侵權(quán)杂穷,最后改成了c#。
- Java原本要被IBM收購(gòu)卦绣,但是不知道因?yàn)槭裁醋詈蟊籵racle的拉里埃里森給快速收購(gòu)了耐量。
- oracle核心創(chuàng)始人拉里埃里森早期一直在對(duì)標(biāo)微軟,用oracle對(duì)抗sql server滤港,定制化ERP/CRM對(duì)抗office廊蜒,linux/unix對(duì)抗window server,收購(gòu)SUN獲得java對(duì)抗.net溅漾。收購(gòu)BEA獲得weblogic對(duì)抗IIS山叮。
- MySQL和MariaDB數(shù)據(jù)庫(kù)的創(chuàng)始人給自己開(kāi)發(fā)的兩數(shù)據(jù)庫(kù)起這個(gè)名字是因?yàn)樗袃蓚€(gè)女兒,一個(gè)叫My一個(gè)叫Maria添履。
- 由于mysql被sun公司收購(gòu)后長(zhǎng)期保持不更新屁倔,所以原作者很生氣繼續(xù)開(kāi)發(fā)了mariadb。
- 比爾蓋茨退學(xué)是因?yàn)樽プ×艘粋€(gè)創(chuàng)業(yè)的機(jī)會(huì)暮胧。1974年左右锐借,intel推出了微處理器问麸,愛(ài)德華羅伯茨(PC之父)制作出了第一個(gè)個(gè)人電腦。比爾蓋茨和他的朋友保羅一人連夜編寫了一段軟件代碼瞎饲,另一個(gè)人坐飛機(jī)前去口叙,最后他們的代碼成功在上面運(yùn)行炼绘,之后他們便退學(xué)開(kāi)始專門為PC開(kāi)發(fā)軟件嗅战。
- IBM發(fā)表了一個(gè)《關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)》的論文,oracle幾個(gè)創(chuàng)始人抓住機(jī)會(huì)創(chuàng)辦了oracle開(kāi)發(fā)了oracle數(shù)據(jù)庫(kù)俺亮。后來(lái)微軟開(kāi)發(fā)了sqlserver驮捍,IBM開(kāi)發(fā)了DB2。
- scott因?yàn)殄X分配問(wèn)題不滿脚曾,后來(lái)退出了oracle东且。退出后自己用java開(kāi)發(fā)了pointbase數(shù)據(jù)庫(kù),但是這個(gè)數(shù)據(jù)庫(kù)沒(méi)有太好的發(fā)展空間本讥。后來(lái)和BEA公司合作珊泳,但是BEA后來(lái)被oracle收購(gòu)了,所以pointbase數(shù)據(jù)庫(kù)也就沒(méi)啥發(fā)展了拷沸。
- webshpere是IBM的色查,weblogic一開(kāi)始是BEA的,后來(lái)被oracle收購(gòu)變成oracle的了撞芍。
- oracle從12C版本開(kāi)始推出云服務(wù)秧了,并在鋼鐵俠3中植入廣告,一段臺(tái)詞是“啟動(dòng)oracle云服務(wù)”序无。
- sun最初設(shè)計(jì)java語(yǔ)言是為了方便開(kāi)發(fā)嵌入式程序验毡,例如遠(yuǎn)程操控家電產(chǎn)品。
- 林納斯開(kāi)發(fā)git是為了管理自己的linux項(xiàng)目帝嗡。
- 第一個(gè)瀏覽器Netscape是由網(wǎng)景公司開(kāi)發(fā)晶通,這個(gè)公司依靠瀏覽器在短短幾個(gè)月就成功上市。此時(shí)的瀏覽器還需要錢哟玷。微軟為了與之競(jìng)爭(zhēng)反編譯瀏覽器進(jìn)行研究狮辽,自己開(kāi)發(fā)了一個(gè)IE瀏覽器并且免費(fèi)嵌入window操作系統(tǒng)。Netscape后來(lái)衰落最終變成了firefox碗降。
- 網(wǎng)景公司最初和sun公司合作隘竭,設(shè)計(jì)了javascript腳本語(yǔ)言,為的是乘上java這股熱浪讼渊,同時(shí)javascript語(yǔ)法也參考了java語(yǔ)言的設(shè)計(jì)动看。
- javascript誕生之初是為了將一些邏輯放到客戶端去執(zhí)行,減少服務(wù)器的壓力爪幻。
- 以前google在國(guó)內(nèi)還可以用的時(shí)候菱皆,google.com域名大家記不住须误,但是可以記住baidu.com,所以google后來(lái)也搞了一個(gè)新域名叫g(shù)uge.cn仇轻。
- 早在dos操作系統(tǒng)時(shí)代京痢,微軟就開(kāi)發(fā)了word軟件。甚至支持在dos中執(zhí)行如今word中能看到的很多操作篷店,甚至是打印預(yù)覽祭椰。
- 惠普公司HP名字的來(lái)源是兩個(gè)創(chuàng)始人:休利特、帕卡德疲陕。簡(jiǎn)稱HP方淤。
- 惠普公司最早是建在一個(gè)車庫(kù)里。
- 惠普公司有一個(gè)人是沃茲尼亞克蹄殃,也自己研發(fā)出了一種個(gè)人電腦携茂,但是惠普公司并沒(méi)有獲得專利。后來(lái)沃茲尼亞克和喬布斯合作诅岩,創(chuàng)辦蘋果公司讳苦,開(kāi)發(fā)出了AppleII型電腦。
- 蘋果公司的喬布斯曾經(jīng)從百事可樂(lè)挖了一個(gè)高管過(guò)來(lái)吩谦,但是因?yàn)槊芴嘧詈髮?dǎo)致喬布斯被迫離開(kāi)蘋果鸳谜。喬布斯離開(kāi)后蘋果公司開(kāi)始衰敗,喬布斯走的時(shí)候也帶走了大量核心員工逮京,并創(chuàng)辦了NeXT公司卿堂,后來(lái)Apple收購(gòu)了蘋果喬布斯就又回到了平臺(tái)。后來(lái)蘋果公司面臨破產(chǎn)懒棉,喬布斯說(shuō)服了比爾蓋茨給蘋果公司一筆投資讓蘋果公司活了過(guò)來(lái)草描,最后蘋果公司創(chuàng)造出了mac、iphone策严、appstore等產(chǎn)品穗慕。
- bug之所以叫bug,是因?yàn)樽钤绲挠?jì)算機(jī)非常大妻导,線路很粗逛绵,甚至可以鉆進(jìn)去蟲子,而有一次故障就是鉆進(jìn)去了一個(gè)蟲子倔韭,所以才叫做bug术浪。
- oracle收購(gòu)java后開(kāi)始搞各種版權(quán)收費(fèi),針對(duì)google貌似比較多寿酌,可能是因?yàn)檫@個(gè)原因胰苏,google的android架構(gòu)從java換成了Kotlin。