Этот материал находится в платной подписке. Оформи премиум подписку и смотри или слушай Java In-Depth: Become a Complete Java Engineer!, а также все другие курсы, прямо сейчас!
Премиум
  • Урок 1. 00:06:54
    Why Yet Another Java Course?
  • Урок 2. 00:10:31
    Course Structure & UI Controls for Site Navigation
  • Урок 3. 00:03:09
    Chapter Introduction
  • Урок 4. 00:06:44
    What is Java & Who is Using It?
  • Урок 5. 00:07:37
    Story behind Java's Creation ~ A Brief History
  • Урок 6. 00:06:19
    Compilation
  • Урок 7. 00:08:39
    Platform Dependency + Demo
  • Урок 8. 00:07:54
    Interpreter
  • Урок 9. 00:05:40
    Platform Independence in Java + Demo
  • Урок 10. 00:12:30
    Java Virtual Machine
  • Урок 11. 00:08:35
    An Overview of Java SE
  • Урок 12. 00:19:14
    Installing JDK 10 on Windows
  • Урок 13. 00:04:47
    Installing JDK 10 on Mac
  • Урок 14. 00:06:53
    Installing JDK10 on Linux
  • Урок 15. 00:09:21
    Setting Classpath Environment Variable
  • Урок 16. 00:16:17
    Writing First Java Program + Demo
  • Урок 17. 00:02:41
    Conclusion
  • Урок 18. 00:03:20
    Chapter Introduction
  • Урок 19. 00:12:59
    Class & Objects
  • Урок 20. 00:17:14
    Demo: Absolute Java Basics
  • Урок 21. 00:07:22
    Variables: Introduction
  • Урок 22. 00:05:31
    Variable Kinds
  • Урок 23. 00:02:01
    Variables: Primitive Types
  • Урок 24. 00:14:18
    Primitive Variables: Integers + Demo
  • Урок 25. 00:05:27
    Primitive Variables: Floating-point Numbers + Item 48
  • Урок 26. 00:11:28
    Primitive Variables: Character Data Type + Demo
  • Урок 27. 00:07:41
    Primitive Variables: Boolean Data Type + Demo
  • Урок 28. 00:19:26
    Variables: Type Casting + Demo
  • Урок 29. 00:03:01
    Variables: Object References
  • Урок 30. 00:07:42
    Statements + Demo
  • Урок 31. 00:11:26
    Arrays + Demo
  • Урок 32. 00:07:23
    2D Arrays
  • Урок 33. 00:05:21
    3D Arrays + Demo
  • Урок 34. 00:20:52
    Methods: Introduction + Demo
  • Урок 35. 00:21:28
    Method Types + Demo
  • Урок 36. 00:18:19
    How Data is Passed to Methods in Java? + Demo
  • Урок 37. 00:10:28
    Method Overloading + Demo
  • Урок 38. 00:08:40
    Methods: varargs + Demo
  • Урок 39. 00:16:13
    Constructors + Demo
  • Урок 40. 00:05:18
    this Reference + Demo
  • Урок 41. 00:16:22
    Demo: Student Example
  • Урок 42. 00:09:46
    Demo: Reinitializing Object References ~ More Brainstorming!
  • Урок 43. 00:21:44
    Review of Exercise 1 Solution with Best Practices
  • Урок 44. 00:03:39
    Conclusion
  • Урок 45. 00:03:33
    Chapter Introduction
  • Урок 46. 00:04:10
    Operators
  • Урок 47. 00:22:14
    Arithmetic Operators + Demo
  • Урок 48. 00:08:56
    Arithmetic Operation Rules + Demo
  • Урок 49. 00:14:46
    Demo: Comparison Operators
  • Урок 50. 00:28:15
    Logical Operators + Demo
  • Урок 51. 00:19:49
    Car Price Estimator ~ Coding Exercise for Comparison & Logical Operators
  • Урок 52. 00:06:07
    Car Price Estimator - Exercise Solution
  • Урок 53. 00:09:25
    Bitwise Operators + Demo
  • Урок 54. 00:05:38
    Bit Shift Operators
  • Урок 55. 00:18:06
    Control-flow: Demo: if-statement
  • Урок 56. 00:18:06
    Control-flow: switch + Demo
  • Урок 57. 00:03:37
    When is switch Preferred?
  • Урок 58. 00:07:27
    Control-flow: Ternary + Demo
  • Урок 59. 00:11:58
    Control-flow: for Statement + Demo
  • Урок 60. 00:21:55
    Demo: More for Statement ...
  • Урок 61. 00:18:43
    Demo: for-each Statement (+ discussion on Item 46)
  • Урок 62. 00:05:17
    Variable Scope
  • Урок 63. 00:03:27
    Control-flow: while Statement
  • Урок 64. 00:09:17
    Control-flow: break Statement + Demo
  • Урок 65. 00:05:09
    Control-flow: continue + Demo
  • Урок 66. 00:27:02
    Recursion + Demo
  • Урок 67. 00:05:56
    Conclusion
  • Урок 68. 00:02:30
    Chapter Introduction
  • Урок 69. 00:09:22
    Java API + Item 47 (Know and use the libraries)
  • Урок 70. 00:16:42
    Accessing Packages + Demo
  • Урок 71. 00:29:40
    Creating Packages & Classpath Management + Demo
  • Урок 72. 00:04:19
    Naming Packages
  • Урок 73. 00:05:45
    Strings: Introduction
  • Урок 74. 00:19:47
    String Class + Demo
  • Урок 75. 00:15:53
    String Pool & Interning + Demo
  • Урок 76. 00:03:30
    String Immutability
  • Урок 77. 00:10:33
    String Concatenation + Demo
  • Урок 78. 00:03:15
    Item 51: String Concatenation Performance
  • Урок 79. 00:04:51
    Escape Sequences + Demo
  • Урок 80. 00:09:10
    Access Levels
  • Урок 81. 00:10:59
    Information Hiding - Item 14: Use accessor methods, not public fields + Demo
  • Урок 82. 00:03:50
    Information Hiding - Item 13: Minimize the accessibility of classes and members
  • Урок 83. 00:05:37
    Demo: Student Example with Information Hiding
  • Урок 84. 00:07:03
    Conclusion
  • Урок 85. 00:02:29
    Chapter Introduction
  • Урок 86. 00:07:11
    Static Methods + Item 4: Enforce noninstantiability with a private constructor
  • Урок 87. 00:08:31
    Math Class + Demo
  • Урок 88. 00:07:26
    Static Variables + Demo
  • Урок 89. 00:07:45
    Initializers: Static & Instance + Demo
  • Урок 90. 00:09:45
    final Variable + Demo
  • Урок 91. 00:10:23
    Constant Variables + Demo
  • Урок 92. 00:10:47
    Boxed Primitives
  • Урок 93. 00:04:26
    Autoboxing + Demo
  • Урок 94. 00:11:38
    Item 49: Prefer Primitives to Boxed Primitives + Demo
  • Урок 95. 00:10:05
    Coding Conventions: Naming (Item 56: Use generally accepted naming conventions)
  • Урок 96. 00:07:32
    Coding Conventions: Structuring Programs (Item 45: Minimize the scope of local)
  • Урок 97. 00:06:40
    Coding Conventions: Stylistic + Demo
  • Урок 98. 00:13:13
    Coding Conventions: Comments + Demo
  • Урок 99. 00:07:48
    Conclusion
  • Урок 100. 00:10:16
    thrill.io ~ A Social Polymarking App!
  • Урок 101. 00:04:16
    Case Study
  • Урок 102. 00:08:28
    Inheritance
  • Урок 103. 00:12:28
    Access Modifiers & Inheritance + Demo
  • Урок 104. 00:04:09
    IS-A Test
  • Урок 105. 00:12:36
    Polymorphism + Demo
  • Урок 106. 00:10:08
    Casting Objects &
  • Урок 107. 00:07:28
    instanceof Operator + Demo
  • Урок 108. 00:14:50
    Type Safety
  • Урок 109. 00:17:04
    Method Overriding + Demo
  • Урок 110. 00:14:18
    Method Binding + Demo
  • Урок 111. 00:03:04
    What is Not Overridden? (final Method is one of them) + Demo
  • Урок 112. 00:07:53
    Demo: Fields are Not Overridden
  • Урок 113. 00:08:34
    Object Class + Demo + Item 10: Always override toString
  • Урок 114. 00:05:31
    Constructor Chaining + Demo
  • Урок 115. 00:07:04
    Preventing Inheritance
  • Урок 116. 00:06:15
    Conclusion
  • Урок 117. 00:06:28
    New Requirement: thrill.io for Kids
  • Урок 118. 00:05:59
    Abstract Classes & Methods + Demo
  • Урок 119. 00:05:22
    Item 20: Prefer class hierarchies to tagged classes
  • Урок 120. 00:04:09
    New Requirement: Sharing Bookmarks
  • Урок 121. 00:18:45
    Multiple Inheritance & Diamond Problem
  • Урок 122. 00:08:09
    Interfaces
  • Урок 123. 00:11:24
    More on Interfaces
  • Урок 124. 00:07:52
    Demo: Interfaces
  • Урок 125. 00:07:57
    Interfaces: A Conceptual View
  • Урок 126. 00:03:21
    Item 18: Prefer interfaces to abstract classes
  • Урок 127. 00:06:45
    Item 52: Refer to objects by their interfaces
  • Урок 128. 00:06:04
    Marker Interfaces
  • Урок 129. 00:18:52
    Cloneable Interface + Demo
  • Урок 130. 00:04:18
    default Methods (Java 8) + Demo
  • Урок 131. 00:10:10
    Recap of default Methods
  • Урок 132. 00:11:49
    default Methods: Other Benefits + Demo
  • Урок 133. 00:12:38
    Static Methods in Interfaces + Demo
  • Урок 134. 00:02:11
    Conclusion
  • Урок 135. 00:05:32
    Introduction
  • Урок 136. 00:11:01
    Installing Eclipse
  • Урок 137. 00:11:14
    Writing a Java Program in Eclipse
  • Урок 138. 00:05:27
    Eclipse Build Process
  • Урок 139. 00:10:35
    Importing Demo Code
  • Урок 140. 00:10:31
    Source Code Navigation
  • Урок 141. 00:02:47
    Automatic Source Code Cleaning & Generation
  • Урок 142. 00:17:36
    Code Refactoring
  • Урок 143. 00:18:04
    Using Eclipse Debugger
  • Урок 144. 00:00:44
    JUnit & Debugging
  • Урок 145. 00:03:59
    Conclusion
  • Урок 146. 00:06:56
    Project Introduction
  • Урок 147. 00:12:06
    MVC Architecture
  • Урок 148. 00:12:34
    Implementing Entities
  • Урок 149. 00:04:51
    Implementing Manager Classes - Demonstrates Singleton Pattern!!
  • Урок 150. 00:18:41
    Implementing Constant Exporting Classes
  • Урок 151. 00:05:41
    Implementing Data Store
  • Урок 152. 00:09:15
    Implementing Dao Classes
  • Урок 153. 00:15:55
    Launching the Application
  • Урок 154. 00:19:42
    Implementing User Bookmarking Feature
  • Урок 155. 00:19:02
    Implementing Kid-Friendly Eligibility Criteria Using TDD
  • Урок 156. 00:13:32
    Marking Bookmarks as Kid-Friendly
  • Урок 157. 00:19:09
    Implementing Sharing Feature: Part 1 (Implementing Shareable Interface)
  • Урок 158. 00:08:29
    Implementing Sharing Feature: Part 2 (View, Controller and Manager)
  • Урок 159. 00:08:33
    Introduction
  • Урок 160. 00:09:37
    Lifetime of a Type
  • Урок 161. 00:10:08
    Lifetime of a Type: Class Loading
  • Урок 162. 00:17:51
    Lifetime of a Type: Linking
  • Урок 163. 00:07:56
    Demo: Lifetime of a Type
  • Урок 164. 00:06:21
    Reflection
  • Урок 165. 00:12:45
    Accessing Class Object
  • Урок 166. 00:06:34
    Demo: Reflection
  • Урок 167. 00:10:50
    Runtime Data Areas
  • Урок 168. 00:06:56
    Method Area & Heap
  • Урок 169. 00:08:47
    Method Table
  • Урок 170. 00:07:15
    Garbage Collection: Introduction
  • Урок 171. 00:10:09
    Garbage Collection Algorithms
  • Урок 172. 00:07:44
    GC: Generational Collections
  • Урок 173. 00:06:26
    Demo: Tuning Heap & Analyzing GC Cycles
  • Урок 174. 00:05:49
    Item 6: Eliminate Obsolete Object References
  • Урок 175. 00:06:04
    Stack
  • Урок 176. 00:17:58
    Stack Frame
  • Урок 177. 00:08:05
    Instruction Set: invokespecial & invokevirtual + Demo
  • Урок 178. 00:03:05
    Conclusion
  • Урок 179. 00:15:01
    Chapter Introduction
  • Урок 180. 00:09:41
    Demo: Exceptions & Exception Handling
  • Урок 181. 00:10:10
    Demo: Multiple Exceptions & Polymorphically Referencing Exceptions!!
  • Урок 182. 00:11:54
    Checked & Unchecked Exceptions + Demo
  • Урок 183. 00:15:11
    finally Block + Demo
  • Урок 184. 00:07:24
    try-with-resources Statement + Demo
  • Урок 185. 00:12:50
    Demo: Suppressed Exceptions
  • Урок 186. 00:09:21
    Demo - Best Practices: Creating New Exceptions (Items 58 & 65)
  • Урок 187. 00:07:15
    Demo - Best Practices for Capturing Failure Information (Item 63)
  • Урок 188. 00:06:23
    Demo - Item 61: Throw exceptions appropriate to the abstraction
  • Урок 189. 00:10:08
    Exceptions: More Advice ... (Items 57, 59, 60, 62, and 38)
  • Урок 190. 00:09:20
    Assertions
  • Урок 191. 00:06:09
    Demo: Assertions
  • Урок 192. 00:06:33
    Conclusion
  • Урок 193. 00:19:42
    Chapter Introduction
  • Урок 194. 00:06:34
    Character Encoding + Demo (Prerequisite)
  • Урок 195. 00:05:51
    Stream IO
  • Урок 196. 00:19:58
    Byte Streams
  • Урок 197. 00:04:08
    Reading Byte-Oriented Files Efficiently + Decorator Pattern + Demo
  • Урок 198. 00:09:40
    Character Streams
  • Урок 199. 00:10:53
    Reading & Writing Text Efficiently
  • Урок 200. 00:13:04
    Project Extension: Reading User & Bookmark Data from Text Files (Demo)
  • Урок 201. 00:09:39
    Project Extension: Downloading WebLinks & Writing to Disk (Demo)
  • Урок 202. 00:14:40
    Demo: Reading User Input from Console using BufferedReader & Scanner
  • Урок 203. 00:17:35
    The File Class + Demo
  • Урок 204. 00:12:05
    Serializing Java Objects + Demo
  • Урок 205. 00:03:36
    Deserialization & Versioning + Demo
  • Урок 206. 00:07:18
    Demo: Decoding with Compatible Encoding Scheme
  • Урок 207. 00:07:36
    Conclusion
  • Урок 208. 00:06:32
    Chapter Introduction
  • Урок 209. 00:03:32
    Collection Interface
  • Урок 210. 00:06:13
    List Interface
  • Урок 211. 00:16:17
    ArrayList - Introduction
  • Урок 212. 00:19:19
    Demo: ArrayList
  • Урок 213. 00:10:37
    Iterator + Demo
  • Урок 214. 00:10:40
    List Iterator + Demo
  • Урок 215. 00:09:37
    LinkedList
  • Урок 216. 00:09:48
    Queue & Deque Interfaces
  • Урок 217. 00:09:38
    ArrayDeque + Demo
  • Урок 218. 00:14:52
    Hash Table
  • Урок 219. 00:05:22
    Set Interface & HashSet + Demo + Overriding hashCode & Equals (Item 9) + Item 52
  • Урок 220. 00:09:05
    LinkedHashSet + Demo
  • Урок 221. 00:18:04
    SortedSet & NavigableSet
  • Урок 222. 00:09:47
    TreeSet (Comparable & Comparator) + Demo
  • Урок 223. 00:08:34
    Demo: More TreeSet ~ Exploring NavigableSet Methods
  • Урок 224. 00:13:39
    Map Interface
  • Урок 225. 00:07:36
    Demo: HashMap + Excercise
  • Урок 226. 00:17:43
    Demo: Beware of Creating Mutable Keys
  • Урок 227. 00:10:19
    LinkedHashMap + Demo
  • Урок 228. 00:19:55
    SortedMap, NavigableMap and TreeMap + Demo
  • Урок 229. 00:08:24
    Demo: Arrays Class
  • Урок 230. 00:16:35
    Demo: Arrays Class (Part 2) ~ Parallelized Operations from Java 8
  • Урок 231. 00:05:19
    Demo: Collections Class
  • Урок 232. 00:08:36
    Best Practice: Return empty arrays or collections instead of nulls (Item 43)
  • Урок 233. 00:12:25
    Conclusion - A Quick Summary
  • Урок 234. 00:08:34
    Chapter Introduction ~ Motivation & Agenda
  • Урок 235. 00:15:56
    Generic & Parameterized Types
  • Урок 236. 00:13:14
    Demo: Creating Generic Types
  • Урок 237. 00:09:51
    Project Extension: Replacing Arrays with ArrayLists (Part 1)
  • Урок 238. 00:11:16
    Project Extension: Replacing Arrays with ArrayLists (Part 2)
  • Урок 239. 00:12:15
    Bounded Type Parameter + Demo
  • Урок 240. 00:10:11
    Item 23: Don’t use raw types in new code + Demo
  • Урок 241. 00:07:17
    Unbounded Wildcard + Demo
  • Урок 242. 00:15:18
    Invariance + Demo + Item 25: Prefer lists to arrays
  • Урок 243. 00:20:47
    Generic Methods (Items 26 & 27: Favor generic types/methods)
  • Урок 244. 00:11:24
    Demo: Generic Methods & Generic Constructors
  • Урок 245. 00:12:45
    Bounded Wildcards: Motivation + Demo
  • Урок 246. 00:15:27
    Bounded Wildcards + Item 28: Use bounded wildcards to increase API flexibility
  • Урок 247. 00:04:46
    Demo: Bounded Wildcards
  • Урок 248. 00:11:59
    Generics Restrictions
  • Урок 249. 00:09:19
    Conclusion - A Quick Summary
  • Урок 250. 00:17:10
    Chapter Introduction
  • Урок 251. 00:21:58
    Nonstatic Member Classes + Demo
  • Урок 252. 00:07:44
    Anonymous Classes + Demo & Item 21 ~ About Function objects
  • Урок 253. 00:15:14
    Local Classes + Demo
  • Урок 254. 00:04:37
    Static Member Classes + Demo + Item 22: Favor Static Member Classes
  • Урок 255. 00:06:25
    Variable Scope with Nested Classes
  • Урок 256. 00:10:26
    Conclusion - A Quick Summary
  • Урок 257. 00:12:35
    enums: Motivation & Introduction + Item 30: Use enums instead of int constants
  • Урок 258. 00:06:09
    Enum Class + Demo
  • Урок 259. 00:04:17
    enums with State & Behavior + Demo
  • Урок 260. 00:12:18
    Nested enums + Demo
  • Урок 261. 00:11:12
    Project Extension: Converting Constant Exporting Classes to Enums
  • Урок 262. 00:08:14
    enums with Constant-specific Behavior + Demo
  • Урок 263. 00:07:53
    Chapter Introduction ~ Motivation & Agenda
  • Урок 264. 00:14:41
    Threads: Introduction
  • Урок 265. 00:12:56
    Demo: Launching Threads and Making them to Sleep!
  • Урок 266. 00:13:29
    Demo: Thread Naming, Prioritization and Joining + Item 73 (Avoid thread groups)
  • Урок 267. 00:10:51
    Race Condition + Demo
  • Урок 268. 00:10:46
    Synchronization + Demo + Item 66: Synchronize access to shared mutable data
  • Урок 269. 00:09:30
    Java Memory Model (JMM)
  • Урок 270. 00:17:55
    Volatile Variables + Demo
  • Урок 271. 00:08:42
    Atomic Variables + Demo
  • Урок 272. 00:14:45
    Synchronization Best Practices (+ Item 67: Avoid excessive synchronization)
  • Урок 273. 00:21:55
    Thread Cooperation & Management + Demo
  • Урок 274. 00:23:52
    Demo: wait & notify
  • Урок 275. 00:26:00
    Thread Interruption + Demo
  • Урок 276. 00:05:49
    Explicit Locks (Reentrant Lock) + Demo
  • Урок 277. 00:16:23
    Item 69: Prefer concurrency utilities to wait and notify
  • Урок 278. 00:13:41
    Executor Framework + Demo (Item 68: Prefer executors and tasks to threads)
  • Урок 279. 00:10:20
    Executor Service & Future
  • Урок 280. 00:11:43
    Demo: ExecutorService & Future
  • Урок 281. 00:19:21
    Tasks with Time Limits + Demo
  • Урок 282. 00:21:04
    Project Extension: Downloading Web Links Concurrently
  • Урок 283. 00:01:56
    Project Extension: Implementing Background Job to Download Web Links
  • Урок 284. 00:12:51
    Agenda
  • Урок 285. 00:24:31
    Background ~ epoch, UTC, Timezone ...
  • Урок 286. 00:09:53
    Legacy API ~ Date & Calendar Classes + Demo
  • Урок 287. 00:22:44
    New Date & Time API ~ Introduction
  • Урок 288. 00:15:13
    Demo: New Date & Time API
  • Урок 289. 00:10:31
    Database Introduction & Chapter Agenda
  • Урок 290. 00:25:16
    Installing MySQL Database & MySQL Workbench
  • Урок 291. 00:17:38
    Database Design & Normalization
  • Урок 292. 00:25:30
    Database Design using MySQL Workbench
  • Урок 293. 00:09:11
    Project Ext.: Creating Database via CREATE & INSERT Queries + Storage Engines
  • Урок 294. 00:19:28
    Installing JDBC Driver
  • Урок 295. 00:20:51
    Writing SELECT Queries with Multiple Tables, GROUP BY, ORDER BY, etc.
  • Урок 296. 00:14:05
    Project Extension: Loading Data from Database via JDBC API
  • Урок 297. 00:08:45
    Project Extension: Saving Bookmarking Data via INSERT Queries
  • Урок 298. 00:13:41
    Project Extension: ALTER Query & Saving Kid-Friendly Details via UPDATE Queries
  • Урок 299. 00:10:24
    Functional-style Programming: Motivation & Chapter Agenda
  • Урок 300. 00:13:30
    Lambdas ~ Introduction
  • Урок 301. 00:25:11
    Demo: Lambdas
  • Урок 302. 00:14:34
    Demo: Capturing Variables from Lambdas ~ Closures!
  • Урок 303. 00:13:01
    Predicate, (Bi) Function, and Unary Operator Interfaces + Demo
  • Урок 304. 00:08:53
    Demo: Consumer, Supplier, and Primitive Functional Interfaces
  • Урок 305. 00:23:42
    Demo: Method References
  • Урок 306. 00:07:04
    Demo: Constructor References
  • Урок 307. 00:18:51
    Streams + Demo
  • Урок 308. 00:10:35
    Stream Operations: An Overview
  • Урок 309. 00:18:28
    Demo: Slicing a Stream
  • Урок 310. 00:23:11
    Demo: Stream Matching Operations
  • Урок 311. 00:23:35
    Demo: Stream Finding Operations & Optional Class
  • Урок 312. 00:10:53
    Stream Reduction Operations + Demo
  • Урок 313. 00:12:02
    Mutable Reduction with Collection Operations + Demo
  • Урок 314. 00:18:33
    collect() with Collector
  • Урок 315. 00:25:17
    Demo: Collecting Stream into List & Set
  • Урок 316. 00:07:43
    Demo: Grouping Stream Elements
  • Урок 317. 00:23:32
    Demo: Summarizing Groups & Generating Multi-level Groups
  • Урок 318. 00:12:08
    Motivation & Agenda
  • Урок 319. 00:07:22
    Web Basics
  • Урок 320. 00:23:56
    Java EE & Servlet Containers
  • Урок 321. 00:13:36
    Installing Tomcat
  • Урок 322. 00:22:36
    BooksAloha! ~ Creating & Deploying a Web Application using Servlets
  • Урок 323. 00:13:45
    Servlet Life Cycle
  • Урок 324. 00:06:04
    Implementing BooksAloha! as MVC using JSP
  • Урок 325. 00:28:56
    Using JSTL to Improve Presentation Layer
  • Урок 326. 00:29:21
    Project Extension: Web-enabling thrill.io Project
  • Урок 327. 00:35:07
    Project Extension: Implementing Browse Functionality
  • Урок 328. 00:08:53
    Project Extension: Implementing Bookmarking & MyBooks Functionality
  • Урок 329. 00:21:21
    Project Extension: Implementing Login Functionality with Session
  • Урок 330. 00:00:00
    JAR Files - Introduction